ZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzU1MjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1iaW4KLWJpbi5wcm9qZWN0Ci1idWlsZC54bWwKLW9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0c18xLjAuMC5qYXIKLWpzcGNvcmV0ZXN0cy5qYXIKLXRlbXAuZm9sZGVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMzM1MGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGQ4YjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0OTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGExMTc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDoganNwY29yZXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLkpTUENvcmVUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jbGVhbnVwZm9ybWF0LAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jbGVhbnVwZm9ybWF0LnRlc3RmaWxlcywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY29udGVudHR5cGVpZGVudGlmaWVyLmNvbnRlbnRzcGVjaWZpYywKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuZG9tLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5tb2RlbCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudGFnbGliaW5kZXgKLVJlcXVpcmUtQnVuZGxlOiBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZSwKLSBjb20uaWJtLmljdSwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS5qZHQuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjNTk4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MDA4MjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gdGVzdC54bWwsXAotICAgICAgICAgICAgICAganNwY29yZXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbCxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIHNyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy8KLWphcnMuY29tcGlsZS5vcmRlciA9IGpzcGNvcmV0ZXN0cy5qYXIKLXNvdXJjZS5qc3Bjb3JldGVzdHMuamFyID0gc3JjLwotb3V0cHV0LmpzcGNvcmV0ZXN0cy5qYXIgPSBiaW4vCi1zcmMuaW5jbHVkZXMgPSB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxM2RiMzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwotQnVuZGxlLU5hbWUuMCA9IEpTUCBDb3JlIFRlc3RzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNmQ0ZWZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL0pTUENvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuRGVmYXVsdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JbnN0YW5jZVNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5KU1BDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5KU1BEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuSlNQQ29yZVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklFbmNvZGVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuUHJlZmVyZW5jZXM7Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIEpTUCBTb3VyY2UgZWRpdG9yCi0gKiBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIEpTUENvcmVQcmVmZXJlbmNlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogVGVzdHMgZXhpc3RhbmNlIG9mIHByZWZlcmVuY2UgdmFsdWVzIHdoZW4gZ2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcwotCSAqIHRocm91Z2ggUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVuZGxlR2V0UHJlZmVyZW5jZXMoKSB7Ci0JCWZpbmFsIFN0cmluZyBidW5kbGVOYW1lID0gIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9Ci0JCWNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBKU1BDb3JlUHJlZmVyZW5jZU5hbWVzLkRFRkFVTFRfRVhURU5TSU9OKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IG51bGw7Ci0KLQkJU3RyaW5nIHZhbHVlID0gUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkuZ2V0U3RyaW5nKGJ1bmRsZU5hbWUsIHByZWZLZXksIGRlZmF1bHRWYWx1ZSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UuIEtleTogIiArIHByZWZLZXksIGRlZmF1bHRWYWx1ZSAhPSB2YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgZGVmYXVsdCB2YWx1ZXMgb2YgcHJlZmVyZW5jZXMuCi0JICogCi0JICogTk9URTogRXhwZWN0ZWQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhcmQtY29kZWQsIHNvIGlmIGRlZmF1bHQgdmFsdWVzIGRvCi0JICogZ2V0IGNoYW5nZWQsIGFzc2VydGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2VzKCkgewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUgPSBuZXcgRGVmYXVsdFNjb3BlKCkuZ2V0Tm9kZShKU1BDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSk7Ci0KLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMsIEJvb2xlYW4udG9TdHJpbmcodHJ1ZSkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5LCBTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJLy8gc3RyaW5nCi0KLQkJU3RyaW5nIHRoZURlZmF1bHRWYWx1ZSA9IG5vZGUuZ2V0KHByZWZLZXksIGRlZmF1bHRWYWx1ZSk7Ci0JCWFzc2VydEVxdWFscygiR2V0IGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSwgZXhwZWN0ZWQsIHRoZURlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSA9IG5ldyBJbnN0YW5jZVNjb3BlKCkuZ2V0Tm9kZShKU1BDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSk7Ci0KLQkJcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4obm9kZSwgSlNQQ29yZVByZWZlcmVuY2VOYW1lcy5WQUxJREFURV9GUkFHTUVOVFMpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWJvb2xlYW4gb3JpZ2luYWxWYWx1ZSA9IGZhbHNlOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSB0cnVlOwotCi0JCVN0cmluZyBvcmlnaW5hbFN0cmluZyA9IG5vZGUuZ2V0KHByZWZLZXksICJib2d1cyIpOwotCQlpZiAoISJib2d1cyIuZXF1YWxzKG9yaWdpbmFsU3RyaW5nKSkgewotCQkJb3JpZ2luYWxWYWx1ZSA9IEJvb2xlYW4udmFsdWVPZihvcmlnaW5hbFN0cmluZykuYm9vbGVhblZhbHVlKCk7Ci0JCQlleHBlY3RlZFZhbHVlID0gIW9yaWdpbmFsVmFsdWU7Ci0JCX0KLQkJbm9kZS5wdXRCb29sZWFuKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlib29sZWFuIGZvdW5kVmFsdWUgPSBub2RlLmdldEJvb2xlYW4ocHJlZktleSwgdHJ1ZSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJaWYgKCJib2d1cyIuZXF1YWxzKG9yaWdpbmFsU3RyaW5nKSkKLQkJCW5vZGUucmVtb3ZlKHByZWZLZXkpOwotCQllbHNlCi0JCQlub2RlLnB1dChwcmVmS2V5LCBvcmlnaW5hbFN0cmluZyk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgbGluZSBkZWxpbWl0ZXIgcHJlZmVyZW5jZXMgYnkgbWFraW5nIHN1cmUgZG9jdW1lbnQgY3JlYXRlZAotCSAqIGZvbGxvd3MgbGluZSBkZWxpbWl0ZXIgcHJlZmVyZW5jZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsaW1pdGVyUHJlZmVyZW5jZXMoKSB7Ci0JCS8vIGNoZWNrIGlmIGNvbnRlbnQgdHlwZSBwcmVmZXJlbmNlcyBtYXRjaAotCQlTdHJpbmcgcHJlZmVycmVkRGVsaW1pdGVyID0gQ29udGVudFR5cGVFbmNvZGluZ1ByZWZlcmVuY2VzLmdldFByZWZlcnJlZE5ld0xpbmVEZWxpbWl0ZXIoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCVByZWZlcmVuY2VzIHByZWZzID0gQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkuZ2V0UHJlZmVyZW5jZXMoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCVN0cmluZyBnYXRld2F5RGVsaW1pdGVyID0gcHJlZnMuZ2V0KENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoIkNvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlcyBhbmQgQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkgcHJlZmVyZW5jZXMgZG8gbm90IG1hdGNoIiwgZ2F0ZXdheURlbGltaXRlciwgcHJlZmVycmVkRGVsaW1pdGVyKTsKLQotCQkvLyBzZXQgYSBwYXJ0aWN1bGFyIGxpbmUgZGVsaW1pdGVyCi0JCXByZWZzLnB1dChDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFLCBDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5MRik7Ci0KLQkJLy8gY3JlYXRlIGRvY3VtZW50Ci0JCUpTUERvY3VtZW50TG9hZGVyIGxvYWRlciA9IG5ldyBKU1BEb2N1bWVudExvYWRlcigpOwotCQlJRW5jb2RlZERvY3VtZW50IGRvY3VtZW50ID0gbG9hZGVyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudCgpOwotCQlTdHJpbmcgZG9jdW1lbnREZWxpbWl0ZXIgPSBkb2N1bWVudC5nZXRQcmVmZXJyZWRMaW5lRGVsaW1pdGVyKCk7Ci0KLQkJLy8gdmVyaWZ5IGRlbGltaXRlciBpbiBkb2N1bWVudCBtYXRjaGVzIHByZWZlcmVuY2UKLQkJYXNzZXJ0RXF1YWxzKCJEZWxpbWl0ZXIgaW4gZG9jdW1lbnQgZG9lcyBub3QgbWF0Y2ggcHJlZmVyZW5jZSIsIENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLlNUUklOR19MRiwgZG9jdW1lbnREZWxpbWl0ZXIpOwotCi0JCS8vIHJldHVybiB0byBvcmlnaW5hbCBwcmVmZXJlbmNlCi0JCXByZWZzLnJlbW92ZShDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9KU1BDb3JlVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZTllYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNsZWFudXBmb3JtYXQuRm9ybWF0VGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jb250ZW50dHlwZWlkZW50aWZpZXIuY29udGVudHNwZWNpZmljLlRlc3RDb250ZW50VHlwZUhhbmRsZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jb250ZW50dHlwZWlkZW50aWZpZXIuY29udGVudHNwZWNpZmljLlRlc3RNb2RlbEhhbmRsZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5kb20uVGVzdEltcG9ydGVkTm9kZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLm1vZGVsLlRlc3RNb2RlbEluY2x1ZGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5tb2RlbC5UZXN0TW9kZWxSZWxlYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5tb2RlbC5UZXN0TW9kZWxXaXRoTm9GaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5zb3VyY2UuSlNQVG9rZW5pemVyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudGFnbGliaW5kZXguVGVzdEluZGV4OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy50cmFuc2xhdGlvbi5KU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy52YWxpZGF0aW9uLkpTUEphdmFWYWxpZGF0b3JUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY3NzLmNvcmUudGVzdHMuc291cmNlLkpTUGVkQ1NTU291cmNlUGFyc2VyVGVzdDsKLQotCi0KLXB1YmxpYyBjbGFzcyBKU1BDb3JlVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgSlNQQ29yZVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBKU1BDb3JlVGVzdFN1aXRlKCkgewotCQlzdXBlcigiU1NFIEpTUCBDb3JlIFRlc3QgU3VpdGUiKTsKLQotCQlhZGRUZXN0KFRlc3RDZWFudXBGb3JtYXQuc3VpdGUoKSk7Ci0JCWFkZFRlc3QoTW9kZWxDbG9uZVN1aXRlLnN1aXRlKCkpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsSGFuZGxlcnMuY2xhc3MsICJUZXN0TW9kZWxIYW5kbGVycyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RDb250ZW50VHlwZUhhbmRsZXJzLmNsYXNzLCAiVGVzdENvbnRlbnRUeXBlSGFuZGxlcnMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxNYW5hZ2VyLmNsYXNzLCAiVGVzdE1vZGVsTWFuYWdlciIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEZvcm1hdFRlc3Rlci5jbGFzcywgIkZvcm1hdFRlc3RlciIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbFJlbGVhc2UuY2xhc3MsICJKU1AgTW9kZWwgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxXaXRoTm9GaWxlLmNsYXNzLCAiSlNQIE1vZGVsIFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEluZGV4LmNsYXNzLCAiVGFnbGliSW5kZXggVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BUb2tlbml6ZXJUZXN0LmNsYXNzLCAiU3BlY2lhbCBQYXJzaW5nIFRlc3RzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQSmF2YVRyYW5zbGF0b3JDb3JlVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsSW5jbHVkZXMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUENvcmVQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC5jbGFzcywgIlNwZWNpYWwgUGFyc2luZyBUZXN0cyBmb3IgSlNQLUNTUyBjb250ZW50IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQSmF2YVZhbGlkYXRvclRlc3QuY2xhc3MsICJKU1AgSmF2YSBWYWxpZGF0b3IgVGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0SW1wb3J0ZWROb2Rlcy5jbGFzcywgIkltcG9ydGVkIE5vZGVzIFRlc3RzIikpOwotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL0pTUENvcmVUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNWIzYjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvSlNQQ29yZVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEpTUENvcmVUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIEpTUENvcmVUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy9SZXNvdXJjZSBidW5kbGUuCi0JcHJpdmF0ZSBSZXNvdXJjZUJ1bmRsZSByZXNvdXJjZUJ1bmRsZTsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgSlNQQ29yZVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5UZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSlNQQ29yZVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBKU1BDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMiKS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXNvbHZlZExvY2F0aW9uID0gRmlsZUxvY2F0b3IucmVzb2x2ZShpbnN0YWxsTG9jYXRpb24pOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc29sdmVkTG9jYXRpb247Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy9TdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCUZpbGUgcmVzdWx0ID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2NDFlMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBQbHVnaW4gZlBsdWdpbiA9IEpTUENvcmVUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCk7Ci0JcHJpdmF0ZSBzdGF0aWMgQnVuZGxlIGZCdW5kbGUgPSBmUGx1Z2luLmdldEJ1bmRsZSgpOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBmUGx1Z2luSWQgPSBmQnVuZGxlLmdldFN5bWJvbGljTmFtZSgpOwotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBmUGx1Z2luSWQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlmUGx1Z2luLmdldExvZygpLmxvZyhzdGF0dXNPYmopOwotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIGZQbHVnaW5JZCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCWZQbHVnaW4uZ2V0TG9nKCkubG9nKHN0YXR1c09iaik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsdWdpbiBmb3IgdGhpcyBsb2dnZXIgaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gZlBsdWdpbi5pc0RlYnVnZ2luZygpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oZlBsdWdpbklkICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvTW9kZWxDbG9uZVN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9Nb2RlbENsb25lU3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJmMmNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9Nb2RlbENsb25lU3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotcHVibGljIGNsYXNzIE1vZGVsQ2xvbmVTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IE1vZGVsQ2xvbmVTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBNb2RlbENsb25lU3VpdGUoKSB7Ci0JCXN1cGVyKCJNb2RlbENsb25lU3VpdGUiKTsKLQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFN0cnVjdHVyZWREb2N1bWVudENsb25lLmNsYXNzLCAiVGVzdFN0cnVjdHVyZWREb2N1bWVudENsb25lIikpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9OdWxsSW5wdXRTdHJlYW0uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL051bGxJbnB1dFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTAxM2E2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL051bGxJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLQotcHVibGljIGNsYXNzIE51bGxJbnB1dFN0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtIHsKLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNtYXJrKGludCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgbWFyayhpbnQgcmVhZGxpbWl0KSB7Ci0JCS8vIG5vdGhpbmcgdG8gZG8KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jbWFya1N1cHBvcnRlZCgpCi0JICovCi0JcHVibGljIGJvb2xlYW4gbWFya1N1cHBvcnRlZCgpIHsKLQkJLy8gd2UgY2FuIG1hcmsgbm90aGluZy4KLQkJLy8gYW5kLCB3ZSBhcmUgdXNpbmcgdGhpcyBOdWxsIGNsYXNzIHNwZWNpZmljYWxseSBmb3IKLQkJLy8gYSAiZmFrZSIgcmVzZXR0YWJsZSBzdHJlYW0uCi0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZWFkKCkKLQkgKi8KLQlwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jcmVzZXQoKQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNldCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIG5vdGhpbmcgdG8gZG8KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jc2tpcChsb25nKQotCSAqLwotCXB1YmxpYyBsb25nIHNraXAobG9uZyBuKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gMDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0Q2VhbnVwRm9ybWF0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0Q2VhbnVwRm9ybWF0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2ZTY3MWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvVGVzdENlYW51cEZvcm1hdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLmNsZWFudXBmb3JtYXQuQ2xlYW51cFRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY2xlYW51cGZvcm1hdC5Gb3JtYXRUZXN0ZXI7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RDZWFudXBGb3JtYXQgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBUZXN0Q2VhbnVwRm9ybWF0KCk7Ci0JfQotCi0JcHVibGljIFRlc3RDZWFudXBGb3JtYXQoKSB7Ci0JCXN1cGVyKCJUZXN0Q2VhbnVwRm9ybWF0Iik7Ci0KLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKENsZWFudXBUZXN0ZXIuY2xhc3MsICJDbGVhbnVwVGVzdGVyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRm9ybWF0VGVzdGVyLmNsYXNzLCAiRm9ybWF0VGVzdGVyIikpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0TW9kZWxNYW5hZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9UZXN0TW9kZWxNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlNzJiNzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvVGVzdE1vZGVsTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgdGVzdHMgYmFzaWMgY3JlYXRpb24gb2YgSU1vZGVsTWFuYWdlciBwbHVnaW4gYW5kIHRoZQotICogTW9kZWxNYW5nZXIuCi0gKiAKLSAqIEFwcHJvcHJpYXRlIGZvciBCVlQuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0TW9kZWxNYW5hZ2VyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRlc3RNb2RlbE1hbmFnZXIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVGVzdE1vZGVsTWFuYWdlcihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWxNYW5hZ2VyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWxNYW5hZ2VyIG11c3Qgbm90IGJlIG51bGwiLCBtb2RlbE1hbmFnZXIgIT0gbnVsbCk7Ci0KLQkJdHJ5IHsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdC54bWwiLCBuZXcgTnVsbElucHV0U3RyZWFtKCksIG51bGwpOwotCQkJYXNzZXJ0VHJ1ZSgiYmFzaWMgWE1MIGVtcHR5IG1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkIiwgbW9kZWwgIT0gbnVsbCk7Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TnVsbEFyZ3VtZW50KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUV4Y2VwdGlvbiBlID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQl0cnkgewotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KChTdHJpbmcpIG51bGwsIG51bGwsIG51bGwpOwotCQl9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQllID0gZXhjZXB0aW9uOwotCQkJYXNzZXJ0VHJ1ZSgiaWxsZWdhbCBhcmd1bWVudCBmYWlsZWQgdG8gdGhyb3cgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIiwgZSBpbnN0YW5jZW9mIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbik7Ci0JCX0gZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRDbG9uZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvVGVzdFN0cnVjdHVyZWREb2N1bWVudENsb25lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI0NTkzM2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvVGVzdFN0cnVjdHVyZWREb2N1bWVudENsb25lLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKgotICogVG8gY2hhbmdlIHRoaXMgZ2VuZXJhdGVkIGNvbW1lbnQgZWRpdCB0aGUgdGVtcGxhdGUgdmFyaWFibGUgInR5cGVjb21tZW50IjoKLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPlRlbXBsYXRlcy4KLSAqIFRvIGVuYWJsZSBhbmQgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgdHlwZSBjb21tZW50cyBnbyB0bwotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+Q29kZSBHZW5lcmF0aW9uLgotICovCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWREb2N1bWVudENsb25lIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRlc3RNb2RlbENsb25lLgotCSAqLwotCXB1YmxpYyBUZXN0U3RydWN0dXJlZERvY3VtZW50Q2xvbmUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IGdldFRlc3QoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN0cnVjdHVyZWREb2N1bWVudENsb25lKCJ0ZXN0Q2xvbmVTdHJ1Y3R1cmVkTW9kZWxKU1BYTUwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvbmVTdHJ1Y3R1cmVkRG9jdW1lbnRYTUwoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS54bWwiLCAoSW5wdXRTdHJlYW0pIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJzdHJ1Y3R1cmVkRG9jdW1lbnQgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgc3RydWN0dXJlZERvY3VtZW50ICE9IG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgY2xvbmVkU3RydWN0dXJlZERvY3VtZW50ID0gc3RydWN0dXJlZERvY3VtZW50Lm5ld0luc3RhbmNlKCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgY3JpdGljYWwgdmFyaWFibGVzIGFyZSBOT1QgaWRlbnRpY2FsLCBidXQgdGhhdCBuZXcgaW5zdGFuY2VzIAotCQkvLyBoYXZlIGJlZW4gbWFkZQotCQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0RW5jb2RpbmdNZW1lbnRvKCkgPT0gc3RydWN0dXJlZERvY3VtZW50LmdldEVuY29kaW5nTWVtZW50bygpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkgPT0gc3RydWN0dXJlZERvY3VtZW50LmdldFBhcnNlcigpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVQYXJzZXIoKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVQYXJzZXIoKSkKLQkJCXBhc3NlZCA9IGZhbHNlOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBYTUwgc3RydWN0dXJlZERvY3VtZW50IGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBpcyBtb3N0IHVzZWZ1bCB0byBjaGVjayBicmVha3BvaW50cyBhbmQgZGlnIGRlZXAgaW4gb2JqZWN0IAotCSAqIHRvIGNoZWNrIGNsb25lcyB2YWx1ZXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvbmVTdHJ1Y3R1cmVkRG9jdW1lbnRKU1AoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbE1hbmFnZXIuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS5qc3AiLCAoSW5wdXRTdHJlYW0pIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJzdHJ1Y3R1cmVkRG9jdW1lbnQgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgc3RydWN0dXJlZERvY3VtZW50ICE9IG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgY2xvbmVkU3RydWN0dXJlZERvY3VtZW50ID0gc3RydWN0dXJlZERvY3VtZW50Lm5ld0luc3RhbmNlKCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgY3JpdGljYWwgdmFyaWFibGVzIGFyZSBOT1QgaWRlbnRpY2FsLCBidXQgdGhhdCBuZXcgaW5zdGFuY2VzIAotCQkvLyBoYXZlIGJlZW4gbWFkZQotCQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0RW5jb2RpbmdNZW1lbnRvKCkgPT0gc3RydWN0dXJlZERvY3VtZW50LmdldEVuY29kaW5nTWVtZW50bygpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkgPT0gc3RydWN0dXJlZERvY3VtZW50LmdldFBhcnNlcigpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVQYXJzZXIoKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVQYXJzZXIoKSkKLQkJCXBhc3NlZCA9IGZhbHNlOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBKU1Agc3RydWN0dXJlZERvY3VtZW50IGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBpcyBtb3N0IHVzZWZ1bCB0byBjaGVjayBicmVha3BvaW50cyBhbmQgZGlnIGRlZXAgaW4gb2JqZWN0IAotCSAqIHRvIGNoZWNrIGNsb25lcyB2YWx1ZXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvbmVTdHJ1Y3R1cmVkRG9jdW1lbnRKU1BYTUwoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJU3RyaW5nIHRlc3RDb250ZW50ID0gIjxAISBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC94bWxcIiBAPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigiZHVtbXkuanNwIiwgdGVzdENvbnRlbnQsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJzdHJ1Y3R1cmVkRG9jdW1lbnQgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgc3RydWN0dXJlZERvY3VtZW50ICE9IG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgY2xvbmVkU3RydWN0dXJlZERvY3VtZW50ID0gc3RydWN0dXJlZERvY3VtZW50Lm5ld0luc3RhbmNlKCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgY3JpdGljYWwgdmFyaWFibGVzIGFyZSBOT1QgaWRlbnRpY2FsLCBidXQgdGhhdCBuZXcgaW5zdGFuY2VzIAotCQkvLyBoYXZlIGJlZW4gbWFkZQotCQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0RW5jb2RpbmdNZW1lbnRvKCkgPT0gc3RydWN0dXJlZERvY3VtZW50LmdldEVuY29kaW5nTWVtZW50bygpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkgPT0gc3RydWN0dXJlZERvY3VtZW50LmdldFBhcnNlcigpKQotCQkJcGFzc2VkID0gZmFsc2U7Ci0JCWlmIChjbG9uZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVQYXJzZXIoKSA9PSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UmVQYXJzZXIoKSkKLQkJCXBhc3NlZCA9IGZhbHNlOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBKU1BYTUwgc3RydWN0dXJlZERvY3VtZW50IGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvQ2xlYW51cFRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC9DbGVhbnVwVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYTA2NDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC9DbGVhbnVwVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY2xlYW51cGZvcm1hdDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY2xlYW51cC5IVE1MQ2xlYW51cFByb2Nlc3NvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5IVE1MQ29yZVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuY2xlYW51cC5BYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5jbGVhbnVwLklTdHJ1Y3R1cmVkQ2xlYW51cFByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2xlYW51cC5DbGVhbnVwUHJvY2Vzc29yWE1MOwotCi1wdWJsaWMgY2xhc3MgQ2xlYW51cFRlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSSU5UX0ZBSUxFRF9GT1JNQVRfVEVTVFMgPSBmYWxzZTsKLQlwcm90ZWN0ZWQgSU1vZGVsTWFuYWdlciBmTW9kZWxNYW5hZ2VyID0gbnVsbDsKLQlwcm90ZWN0ZWQgQ2xlYW51cFByb2Nlc3NvclhNTCBmQ2xlYW51cFByb2Nlc3NvciA9IG51bGw7Ci0JcHJvdGVjdGVkIEhUTUxDbGVhbnVwUHJvY2Vzc29ySW1wbCBmSFRNTENsZWFudXBQcm9jZXNzb3IgPSBudWxsOwotCi0JcHVibGljIENsZWFudXBUZXN0ZXIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JCS8vIGdldCBtb2RlbCBtYW5hZ2VyCi0JCWZNb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCS8vIGdldCBjbGVhbnVwIHByb2Nlc3NvcgotCQlmQ2xlYW51cFByb2Nlc3NvciA9IG5ldyBDbGVhbnVwUHJvY2Vzc29yWE1MKCk7Ci0KLQkJLy8gZ2V0IEhUTUwgY2xlYW51cCBwcm9jZXNzb3IKLQkJZkhUTUxDbGVhbnVwUHJvY2Vzc29yID0gbmV3IEhUTUxDbGVhbnVwUHJvY2Vzc29ySW1wbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwSW5zZXJ0VGFnc1F1b3RlQXR0cnMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiaW52b2ljZS54bWwiKTsKLQotCQkvLyB1c2UgZm9yIGRlYnVnZ2luZwotLy8JCVN0cmluZyBwcmVjbGVhbmVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCi0JCS8vIGluaXQgQ2xlYW51cFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkQ2xlYW51cFByZWZlcmVuY2VzIGNsZWFudXBQcmVmZXJlbmNlcyA9IGZDbGVhbnVwUHJvY2Vzc29yLmdldENsZWFudXBQcmVmZXJlbmNlcygpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydFJlcXVpcmVkQXR0cnMoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0TWlzc2luZ1RhZ3ModHJ1ZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRRdW90ZUF0dHJWYWx1ZXModHJ1ZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRGb3JtYXRTb3VyY2UoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29udmVydEVPTENvZGVzKGZhbHNlKTsKLQotCQkvLyBjbGVhbnVwCi0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkNsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkNsZWFudXBQcm9jZXNzb3IuY2xlYW51cE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkNsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGNsZWFuZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImludm9pY2UuYWZ0ZXJDbGVhbnVwSW5zZXJ0VGFnc1F1b3RlQXR0cnMueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgY2xlYW5lZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsZWFudXBJbnNlcnRUYWdzKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJpbnZvaWNlLnhtbCIpOwotCi0JCS8vIGluaXQgQ2xlYW51cFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkQ2xlYW51cFByZWZlcmVuY2VzIGNsZWFudXBQcmVmZXJlbmNlcyA9IGZDbGVhbnVwUHJvY2Vzc29yLmdldENsZWFudXBQcmVmZXJlbmNlcygpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydFJlcXVpcmVkQXR0cnMoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0TWlzc2luZ1RhZ3ModHJ1ZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRRdW90ZUF0dHJWYWx1ZXMoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Rm9ybWF0U291cmNlKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbnZlcnRFT0xDb2RlcyhmYWxzZSk7Ci0KLQkJLy8gY2xlYW51cAotCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZDbGVhbnVwUHJvY2Vzc29yLmNsZWFudXBNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBjbGVhbmVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJpbnZvaWNlLmFmdGVyQ2xlYW51cEluc2VydFRhZ3MueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgY2xlYW5lZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsZWFudXBDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgic21hbGwueG1sIik7Ci0KLQkJLy8gaW5pdCBDbGVhbnVwUHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXMgY2xlYW51cFByZWZlcmVuY2VzID0gZkNsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3ModHJ1ZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRSZXF1aXJlZEF0dHJzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydE1pc3NpbmdUYWdzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldFF1b3RlQXR0clZhbHVlcyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRGb3JtYXRTb3VyY2UodHJ1ZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb252ZXJ0RU9MQ29kZXMoZmFsc2UpOwotCi0JCS8vIGNsZWFudXAKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmQ2xlYW51cFByb2Nlc3Nvci5jbGVhbnVwTW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgY2xlYW5lZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAic21hbGwuYWZ0ZXJDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgY2xlYW5lZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsZWFudXBIVE1MKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImNsZWFudXAuaHRtbCIpOwotCi0JCS8vIGluaXQgQ2xlYW51cFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkQ2xlYW51cFByZWZlcmVuY2VzIGNsZWFudXBQcmVmZXJlbmNlcyA9IGZIVE1MQ2xlYW51cFByb2Nlc3Nvci5nZXRDbGVhbnVwUHJlZmVyZW5jZXMoKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldFRhZ05hbWVDYXNlKEhUTUxDb3JlUHJlZmVyZW5jZU5hbWVzLlVQUEVSKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEF0dHJOYW1lQ2FzZShIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0UmVxdWlyZWRBdHRycyhmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRNaXNzaW5nVGFncyh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldFF1b3RlQXR0clZhbHVlcyh0cnVlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEZvcm1hdFNvdXJjZShmYWxzZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb252ZXJ0RU9MQ29kZXMoZmFsc2UpOwotCi0JCS8vIGNsZWFudXAKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmSFRNTENsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkhUTUxDbGVhbnVwUHJvY2Vzc29yLmNsZWFudXBNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZIVE1MQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgY2xlYW5lZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiY2xlYW51cC5hZnRlckNsZWFudXAuaHRtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGNsZWFuZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwSFRNTHR3aWNlKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImNsZWFudXAuYWZ0ZXJDbGVhbnVwLmh0bWwiKTsKLQotCQkvLyBpbml0IENsZWFudXBQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZENsZWFudXBQcmVmZXJlbmNlcyBjbGVhbnVwUHJlZmVyZW5jZXMgPSBmSFRNTENsZWFudXBQcm9jZXNzb3IuZ2V0Q2xlYW51cFByZWZlcmVuY2VzKCk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRUYWdOYW1lQ2FzZShIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5VUFBFUik7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRBdHRyTmFtZUNhc2UoSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuTE9XRVIpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzKGZhbHNlKTsKLQkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydFJlcXVpcmVkQXR0cnMoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0TWlzc2luZ1RhZ3ModHJ1ZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRRdW90ZUF0dHJWYWx1ZXModHJ1ZSk7Ci0JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRGb3JtYXRTb3VyY2UoZmFsc2UpOwotCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Q29udmVydEVPTENvZGVzKGZhbHNlKTsKLQotCQkvLyBjbGVhbnVwCi0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkQ2xlYW51cFByb2Nlc3NvcikgZkhUTUxDbGVhbnVwUHJvY2Vzc29yKS5yZWZyZXNoQ2xlYW51cFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZIVE1MQ2xlYW51cFByb2Nlc3Nvci5jbGVhbnVwTW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmSFRNTENsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGNsZWFuZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImNsZWFudXAuYWZ0ZXJDbGVhbnVwLmh0bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBjbGVhbmVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwSlNQRW1wdHlUYWdzMSgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJLy8gZ2V0IG1vZGVsCi0vLwkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgibG9naW4uanNwIik7Ci0vLwotLy8JCS8vIGluaXQgQ2xlYW51cFByZWZlcmVuY2VzCi0vLwkJSVN0cnVjdHVyZWRDbGVhbnVwUHJlZmVyZW5jZXMgY2xlYW51cFByZWZlcmVuY2VzID0gZkhUTUxDbGVhbnVwUHJvY2Vzc29yLmdldENsZWFudXBQcmVmZXJlbmNlcygpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRUYWdOYW1lQ2FzZShDb21tb25Nb2RlbFByZWZlcmVuY2VOYW1lcy5VUFBFUik7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldEF0dHJOYW1lQ2FzZShDb21tb25Nb2RlbFByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbXByZXNzRW1wdHlFbGVtZW50VGFncyhmYWxzZSk7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldEluc2VydFJlcXVpcmVkQXR0cnMoZmFsc2UpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRNaXNzaW5nVGFncyh0cnVlKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0UXVvdGVBdHRyVmFsdWVzKHRydWUpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRGb3JtYXRTb3VyY2UodHJ1ZSk7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldENvbnZlcnRFT0xDb2RlcyhmYWxzZSk7Ci0vLwotLy8JCS8vIGNsZWFudXAKLS8vCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZIVE1MQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IGZhbHNlOwotLy8JCWZIVE1MQ2xlYW51cFByb2Nlc3Nvci5jbGVhbnVwTW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLS8vCQkoKEFic3RyYWN0U3RydWN0dXJlZENsZWFudXBQcm9jZXNzb3IpIGZIVE1MQ2xlYW51cFByb2Nlc3NvcikucmVmcmVzaENsZWFudXBQcmVmZXJlbmNlcyA9IHRydWU7Ci0vLwotLy8JCS8vIGNvbXBhcmUKLS8vCQlTdHJpbmcgY2xlYW5lZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLS8vCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJsb2dpbi5hZnRlckNsZWFudXAuanNwIjsKLS8vCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotLy8JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGNsZWFuZWQpOwotLy8KLS8vCQkvLyByZWxlYXNlIG1vZGVsCi0vLwkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotLy8JfQotLy8KLS8vCXB1YmxpYyB2b2lkIHRlc3RDbGVhbnVwSlNQRW1wdHlUYWdzMigpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJLy8gZ2V0IG1vZGVsCi0vLwkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgic3Vic2NyaXB0aW9uLmpzcCIpOwotLy8KLS8vCQkvLyBpbml0IENsZWFudXBQcmVmZXJlbmNlcwotLy8JCUlTdHJ1Y3R1cmVkQ2xlYW51cFByZWZlcmVuY2VzIGNsZWFudXBQcmVmZXJlbmNlcyA9IGZIVE1MQ2xlYW51cFByb2Nlc3Nvci5nZXRDbGVhbnVwUHJlZmVyZW5jZXMoKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0VGFnTmFtZUNhc2UoQ29tbW9uTW9kZWxQcmVmZXJlbmNlTmFtZXMuVVBQRVIpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRBdHRyTmFtZUNhc2UoQ29tbW9uTW9kZWxQcmVmZXJlbmNlTmFtZXMuTE9XRVIpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb21wcmVzc0VtcHR5RWxlbWVudFRhZ3MoZmFsc2UpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRJbnNlcnRSZXF1aXJlZEF0dHJzKGZhbHNlKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0SW5zZXJ0TWlzc2luZ1RhZ3ModHJ1ZSk7Ci0vLwkJY2xlYW51cFByZWZlcmVuY2VzLnNldFF1b3RlQXR0clZhbHVlcyh0cnVlKTsKLS8vCQljbGVhbnVwUHJlZmVyZW5jZXMuc2V0Rm9ybWF0U291cmNlKHRydWUpOwotLy8JCWNsZWFudXBQcmVmZXJlbmNlcy5zZXRDb252ZXJ0RU9MQ29kZXMoZmFsc2UpOwotLy8KLS8vCQkvLyBjbGVhbnVwCi0vLwkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmSFRNTENsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSBmYWxzZTsKLS8vCQlmSFRNTENsZWFudXBQcm9jZXNzb3IuY2xlYW51cE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0vLwkJKChBYnN0cmFjdFN0cnVjdHVyZWRDbGVhbnVwUHJvY2Vzc29yKSBmSFRNTENsZWFudXBQcm9jZXNzb3IpLnJlZnJlc2hDbGVhbnVwUHJlZmVyZW5jZXMgPSB0cnVlOwotLy8KLS8vCQkvLyBjb21wYXJlCi0vLwkJU3RyaW5nIGNsZWFuZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0vLwkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAic3Vic2NyaXB0aW9uLmFmdGVyQ2xlYW51cC5qc3AiOwotLy8JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0vLwkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgY2xlYW5lZCk7Ci0vLwotLy8JCS8vIHJlbGVhc2UgbW9kZWwKLS8vCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0vLwl9Ci0KLQlwcm90ZWN0ZWQgU3RyaW5nIHJlYWRGaWxlKFN0cmluZyBmaWxlTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGlucHV0U3RyaW5nID0gbnVsbDsKLQkJSW5wdXRTdHJlYW0gZmlsZUlucHV0U3RyZWFtID0gbnVsbDsKLQotCQl0cnkgewotCQkJZmlsZUlucHV0U3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVOYW1lKTsKLQotCQkJYnl0ZVtdIGlucHV0QnVmZmVyID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQlpbnB1dFN0cmluZyA9IG5ldyBTdHJpbmcoKTsKLQkJCWludCBieXRlc1JlYWQgPSAtMTsKLQotCQkJd2hpbGUgKHRydWUpIHsKLQkJCQlieXRlc1JlYWQgPSBmaWxlSW5wdXRTdHJlYW0ucmVhZChpbnB1dEJ1ZmZlcik7Ci0JCQkJaWYgKGJ5dGVzUmVhZCA9PSAtMSkKLQkJCQkJYnJlYWs7Ci0JCQkJU3RyaW5nIGJ1ZmZlclN0cmluZyA9IG5ldyBTdHJpbmcoaW5wdXRCdWZmZXIsIDAsIGJ5dGVzUmVhZCk7Ci0JCQkJLy9idWZmZXJTdHJpbmcgPSBidWZmZXJTdHJpbmcuc3Vic3RyaW5nKDAsIGJ5dGVzUmVhZCk7Ci0JCQkJaW5wdXRTdHJpbmcgPSBpbnB1dFN0cmluZy5jb25jYXQoYnVmZmVyU3RyaW5nKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChmaWxlSW5wdXRTdHJlYW0gIT0gbnVsbCkKLQkJCQlmaWxlSW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJfQotCi0JCXJldHVybiBpbnB1dFN0cmluZzsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcHJpbnRFeGNlcHRpb24oRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCQlleGNlcHRpb24ucHJpbnRTdGFja1RyYWNlKCk7Ci0JfQotCi0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0TW9kZWwoU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IG51bGw7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbnVsbDsKLQotCQl0cnkgewotCQkJU3RyaW5nIGlucHV0ID0gZ2V0RmlsZShmaWxlTmFtZSk7Ci0JCQlpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShpbnB1dC5nZXRCeXRlcygiVVRGLTgiKSk7Ci0JCQlTdHJpbmcgaWQgPSBpbnB1dFN0cmVhbS50b1N0cmluZygpLmNvbmNhdChmaWxlTmFtZSk7Ci0JCQlzdHJ1Y3R1cmVkTW9kZWwgPSBmTW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yUmVhZChpZCwgaW5wdXRTdHJlYW0sIG51bGwpOwotCQl9Ci0JCS8vIHNpbmNlIGluIHRlc3QgY29kZSwgbm8gbmVlZCB0byBjYXRjaCB0aGlzCi0JCS8vCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCQkvLwkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZXhjZXB0aW9uKTsKLQkJLy8JCX0KLQkJZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGV4Y2VwdGlvbikgewotCQkJCS8vIGhvcGVsZXNzCi0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gc3RydWN0dXJlZE1vZGVsOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgZ2V0RmlsZShTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiByZWFkRmlsZSgidGVzdGZpbGVzLyIuY29uY2F0KGZpbGVOYW1lKSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgY29tcGFyZShTdHJpbmcgdGVzdGNhc2VOYW1lLCBTdHJpbmcgZXhwZWN0ZWQsIFN0cmluZyBjbGVhbmVkKSB7Ci0JCWlmIChjbGVhbmVkLmNvbXBhcmVUbyhleHBlY3RlZCkgIT0gMCkgewotCQkJaWYgKFBSSU5UX0ZBSUxFRF9GT1JNQVRfVEVTVFMpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4odGVzdGNhc2VOYW1lICsgIiBmYWlsZWQiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT0gZXhwZWN0ZWQgZmlsZSA9PT09PT09PT09Iik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGV4cGVjdGVkKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIj09PT09PT09PT0gY2xlYW5lZCBmaWxlID09PT09PT09PT0iKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY2xlYW5lZCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGV4cGVjdGVkIGZpbGUgPT09PT09PT09PSIpOwotCQkJCVN0cmluZyBleHBlY3RlZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZXhwZWN0ZWQsICJcciIsICJcXHIiKTsKLQkJCQlleHBlY3RlZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZXhwZWN0ZWRTdHJpbmcsICJcbiIsICJcXG4iKTsKLQkJCQlleHBlY3RlZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZXhwZWN0ZWRTdHJpbmcsICJcdCIsICJcXHQiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZXhwZWN0ZWRTdHJpbmcpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PSBjbGVhbmVkIGZpbGUgPT09PT09PT09PSIpOwotCQkJCVN0cmluZyBjbGVhbmVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShjbGVhbmVkLCAiXHIiLCAiXFxyIik7Ci0JCQkJY2xlYW5lZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoY2xlYW5lZFN0cmluZywgIlxuIiwgIlxcbiIpOwotCQkJCWNsZWFuZWRTdHJpbmcgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGNsZWFuZWRTdHJpbmcsICJcdCIsICJcXHQiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY2xlYW5lZFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKTsKLQkJCX0KLQkJCWFzc2VydFRydWUoZmFsc2UpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvRm9ybWF0VGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L0Zvcm1hdFRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMjI2NTE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvRm9ybWF0VGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY2xlYW51cGZvcm1hdDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5mb3JtYXQuSFRNTEZvcm1hdFByb2Nlc3NvckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmZvcm1hdC5BYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmZvcm1hdC5JU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LkZvcm1hdFByb2Nlc3NvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LlN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTDsKLQotcHVibGljIGNsYXNzIEZvcm1hdFRlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFBSSU5UX0ZBSUxFRF9GT1JNQVRfVEVTVFMgPSBmYWxzZTsKLQlwcm90ZWN0ZWQgSU1vZGVsTWFuYWdlciBmTW9kZWxNYW5hZ2VyID0gbnVsbDsKLQlwcm90ZWN0ZWQgRm9ybWF0UHJvY2Vzc29yWE1MIGZGb3JtYXRQcm9jZXNzb3IgPSBudWxsOwotCXByb3RlY3RlZCBIVE1MRm9ybWF0UHJvY2Vzc29ySW1wbCBmSFRNTEZvcm1hdFByb2Nlc3NvciA9IG51bGw7Ci0KLQlwdWJsaWMgRm9ybWF0VGVzdGVyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCi0JCS8vIGdldCBtb2RlbCBtYW5hZ2VyCi0JCWZNb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCS8vIGdldCBmb3JtYXQgcHJvY2Vzc29yCi0JCWZGb3JtYXRQcm9jZXNzb3IgPSBuZXcgRm9ybWF0UHJvY2Vzc29yWE1MKCk7Ci0KLQkJLy8gZ2V0IEhUTUwgZm9ybWF0IHByb2Nlc3NvcgotCQlmSFRNTEZvcm1hdFByb2Nlc3NvciA9IG5ldyBIVE1MRm9ybWF0UHJvY2Vzc29ySW1wbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXQyNjE5NjgoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCIyNjE5NjgueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gIjI2MTk2OC5hZnRlckRlZmF1bHRGb3JtYXQueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0VGFnT3BlbigpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInRhZ09wZW4ueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInRhZ09wZW4ueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0VGFnT3BlblRhZ0Nsb3NlKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgidGFnT3BlblRhZ0Nsb3NlLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJ0YWdPcGVuVGFnQ2xvc2UueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0VGFncygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInRhZ3MueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInRhZ3MuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdEVtcHR5KCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiZW1wdHkueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImVtcHR5LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdE9uZVNwYWNlKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgib25lU3BhY2UueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gImVtcHR5LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdE9uZUNoYXIoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJvbmVDaGFyLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoOTk5KTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJvbmVDaGFyLnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdFNwYWNlcygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInNwYWNlcy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiZW1wdHkueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0Q2hhcnMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJjaGFycy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiY2hhcnMueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0U3BhY2VzQW5kQ2hhcnMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJzcGFjZXNBbmRDaGFycy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiY2hhcnMueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0KCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgic21hbGwueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyhmYWxzZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg5OTkpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInNtYWxsLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgic21hbGwueG1sIik7Ci0KLQkJLy8gaW5pdCBGb3JtYXRQcmVmZXJlbmNlcwotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZkZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyh0cnVlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDcyKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCWZGb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoc3RydWN0dXJlZE1vZGVsKTsKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJzbWFsbC5hZnRlclNwbGl0TGluZXNTcGxpdE11bHRpQXR0cnNGb3JtYXQueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0U3BsaXRMaW5lcygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoInNtYWxsLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoZmFsc2UpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRMaW5lV2lkdGgoNzIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoIlx0Iik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhmYWxzZSk7Ci0KLQkJLy8gZm9ybWF0Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSBmYWxzZTsKLQkJZkZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkvLyBjb21wYXJlCi0JCVN0cmluZyBmb3JtYXR0ZWQgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCVN0cmluZyBleHBlY3RlZEZpbGVOYW1lID0gInNtYWxsLmFmdGVyU3BsaXRMaW5lc0Zvcm1hdC54bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtYXRCbG9ja0NvbW1lbnRzKCkgewotCQkvLyBnZXQgbW9kZWwKLQkJSVN0cnVjdHVyZWRNb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSBnZXRNb2RlbCgiYmxvY2tDb21tZW50cy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiYmxvY2tDb21tZW50cy5hZnRlckRlZmF1bHRGb3JtYXQueG1sIjsKLQkJU3RyaW5nIGV4cGVjdGVkID0gZ2V0RmlsZShleHBlY3RlZEZpbGVOYW1lKTsKLQkJY29tcGFyZShleHBlY3RlZEZpbGVOYW1lLCBleHBlY3RlZCwgZm9ybWF0dGVkKTsKLQotCQkvLyByZWxlYXNlIG1vZGVsCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Rm9ybWF0SW5saW5lQ29tbWVudHMoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJpbmxpbmVDb21tZW50cy54bWwiKTsKLQotCQkvLyBpbml0IEZvcm1hdFByZWZlcmVuY2VzCi0JCUlTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXMgZm9ybWF0UHJlZmVyZW5jZXMgPSBmRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDk5OSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiaW5saW5lQ29tbWVudHMuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZvcm1hdElubGluZUNvbW1lbnRzU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRycygpIHsKLQkJLy8gZ2V0IG1vZGVsCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gZ2V0TW9kZWwoImlubGluZUNvbW1lbnRzLnhtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZGb3JtYXRQcm9jZXNzb3IuZ2V0Rm9ybWF0UHJlZmVyZW5jZXMoKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnModHJ1ZSk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aCg3Mik7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldEluZGVudCgiXHQiKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0Q2xlYXJBbGxCbGFua0xpbmVzKGZhbHNlKTsKLQotCQkvLyBmb3JtYXQKLQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmRm9ybWF0UHJvY2Vzc29yLmZvcm1hdE1vZGVsKHN0cnVjdHVyZWRNb2RlbCk7Ci0JCSgoQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yKSBmRm9ybWF0UHJvY2Vzc29yKS5yZWZyZXNoRm9ybWF0UHJlZmVyZW5jZXMgPSB0cnVlOwotCi0JCS8vIGNvbXBhcmUKLQkJU3RyaW5nIGZvcm1hdHRlZCA9IHN0cnVjdHVyZWRNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJU3RyaW5nIGV4cGVjdGVkRmlsZU5hbWUgPSAiaW5saW5lQ29tbWVudHMuYWZ0ZXJTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzRm9ybWF0LnhtbCI7Ci0JCVN0cmluZyBleHBlY3RlZCA9IGdldEZpbGUoZXhwZWN0ZWRGaWxlTmFtZSk7Ci0JCWNvbXBhcmUoZXhwZWN0ZWRGaWxlTmFtZSwgZXhwZWN0ZWQsIGZvcm1hdHRlZCk7Ci0KLQkJLy8gcmVsZWFzZSBtb2RlbAotCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUxGb3JtYXQoKSB7Ci0JCS8vIGdldCBtb2RlbAotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IGdldE1vZGVsKCJIaXRDb3VudGVySW50cm8uaHRtbCIpOwotCi0JCS8vIGluaXQgRm9ybWF0UHJlZmVyZW5jZXMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZIVE1MRm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCSgoU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzWE1MKSBmb3JtYXRQcmVmZXJlbmNlcykuc2V0U3BsaXRNdWx0aUF0dHJzKGZhbHNlKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0TGluZVdpZHRoKDcyKTsKLQkJZm9ybWF0UHJlZmVyZW5jZXMuc2V0SW5kZW50KCJcdCIpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRDbGVhckFsbEJsYW5rTGluZXMoZmFsc2UpOwotCi0JCS8vIGZvcm1hdAotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkhUTUxGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IGZhbHNlOwotCQlmSFRNTEZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChzdHJ1Y3R1cmVkTW9kZWwpOwotCQkoKEFic3RyYWN0U3RydWN0dXJlZEZvcm1hdFByb2Nlc3NvcikgZkhUTUxGb3JtYXRQcm9jZXNzb3IpLnJlZnJlc2hGb3JtYXRQcmVmZXJlbmNlcyA9IHRydWU7Ci0KLQkJLy8gY29tcGFyZQotCQlTdHJpbmcgZm9ybWF0dGVkID0gc3RydWN0dXJlZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQlTdHJpbmcgZXhwZWN0ZWRGaWxlTmFtZSA9ICJIaXRDb3VudGVySW50cm8uYWZ0ZXJEZWZhdWx0Rm9ybWF0Lmh0bWwiOwotCQlTdHJpbmcgZXhwZWN0ZWQgPSBnZXRGaWxlKGV4cGVjdGVkRmlsZU5hbWUpOwotCQljb21wYXJlKGV4cGVjdGVkRmlsZU5hbWUsIGV4cGVjdGVkLCBmb3JtYXR0ZWQpOwotCi0JCS8vIHJlbGVhc2UgbW9kZWwKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCX0KLQotCXByb3RlY3RlZCBTdHJpbmcgcmVhZEZpbGUoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCVN0cmluZyBpbnB1dFN0cmluZyA9IG51bGw7Ci0JCUlucHV0U3RyZWFtIGZpbGVJbnB1dFN0cmVhbSA9IG51bGw7Ci0KLQkJdHJ5IHsKLQkJCWZpbGVJbnB1dFN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlTmFtZSk7Ci0KLQkJCWJ5dGVbXSBpbnB1dEJ1ZmZlciA9IG5ldyBieXRlWzEwMjRdOwotCQkJaW5wdXRTdHJpbmcgPSBuZXcgU3RyaW5nKCk7Ci0JCQlpbnQgYnl0ZXNSZWFkID0gLTE7Ci0KLQkJCXdoaWxlICh0cnVlKSB7Ci0JCQkJYnl0ZXNSZWFkID0gZmlsZUlucHV0U3RyZWFtLnJlYWQoaW5wdXRCdWZmZXIpOwotCQkJCWlmIChieXRlc1JlYWQgPT0gLTEpCi0JCQkJCWJyZWFrOwotCQkJCVN0cmluZyBidWZmZXJTdHJpbmcgPSBuZXcgU3RyaW5nKGlucHV0QnVmZmVyKTsKLQkJCQlidWZmZXJTdHJpbmcgPSBidWZmZXJTdHJpbmcuc3Vic3RyaW5nKDAsIGJ5dGVzUmVhZCk7Ci0JCQkJaW5wdXRTdHJpbmcgPSBpbnB1dFN0cmluZy5jb25jYXQoYnVmZmVyU3RyaW5nKTsKLQkJCX0KLQotCQkJaWYgKGZpbGVJbnB1dFN0cmVhbSAhPSBudWxsKQotCQkJCWZpbGVJbnB1dFN0cmVhbS5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCXByaW50RXhjZXB0aW9uKGV4Y2VwdGlvbik7Ci0JCX0KLQotCQlyZXR1cm4gaW5wdXRTdHJpbmc7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHByaW50RXhjZXB0aW9uKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJZXhjZXB0aW9uLnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQotCXByb3RlY3RlZCBJU3RydWN0dXJlZE1vZGVsIGdldE1vZGVsKFN0cmluZyBmaWxlTmFtZSkgewotCQlJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IG51bGw7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbnVsbDsKLQotCQl0cnkgewotCQkJU3RyaW5nIGlucHV0ID0gZ2V0RmlsZShmaWxlTmFtZSk7Ci0JCQlpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShpbnB1dC5nZXRCeXRlcygiVVRGOCIpKTsKLQkJCVN0cmluZyBpZCA9IGlucHV0U3RyZWFtLnRvU3RyaW5nKCkuY29uY2F0KGZpbGVOYW1lKTsKLQkJCXN0cnVjdHVyZWRNb2RlbCA9IGZNb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKGlkLCBpbnB1dFN0cmVhbSwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJCWV4Y2VwdGlvbi5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCXRyeSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWNhdGNoIChFeGNlcHRpb24gZXhjZXB0aW9uKSB7Ci0JCQkJLy8gaG9wZWxlc3MKLQkJCX0KLQkJfQotCi0JCXJldHVybiBzdHJ1Y3R1cmVkTW9kZWw7Ci0JfQotCi0JcHJvdGVjdGVkIFN0cmluZyBnZXRGaWxlKFN0cmluZyBmaWxlTmFtZSkgewotCQlyZXR1cm4gcmVhZEZpbGUoInRlc3RmaWxlcy8iLmNvbmNhdChmaWxlTmFtZSkpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNvbXBhcmUoU3RyaW5nIHRlc3RjYXNlTmFtZSwgU3RyaW5nIGV4cGVjdGVkLCBTdHJpbmcgZm9ybWF0dGVkKSB7Ci0JCWlmIChmb3JtYXR0ZWQuY29tcGFyZVRvKGV4cGVjdGVkKSAhPSAwKSB7Ci0JCQlpZiAoUFJJTlRfRkFJTEVEX0ZPUk1BVF9URVNUUykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbih0ZXN0Y2FzZU5hbWUgKyAiIGZhaWxlZCIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PSBleHBlY3RlZCBmaWxlID09PT09PT09PT0iKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZXhwZWN0ZWQpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PSBmb3JtYXR0ZWQgZmlsZSA9PT09PT09PT09Iik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKGZvcm1hdHRlZCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCI9PT09PT09PT09IGV4cGVjdGVkIGZpbGUgPT09PT09PT09PSIpOwotCQkJCVN0cmluZyBleHBlY3RlZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZXhwZWN0ZWQsICJcciIsICJcXHIiKTsKLQkJCQlleHBlY3RlZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZXhwZWN0ZWRTdHJpbmcsICJcbiIsICJcXG4iKTsKLQkJCQlleHBlY3RlZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZXhwZWN0ZWRTdHJpbmcsICJcdCIsICJcXHQiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZXhwZWN0ZWRTdHJpbmcpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PSBmb3JtYXR0ZWQgZmlsZSA9PT09PT09PT09Iik7Ci0JCQkJU3RyaW5nIGZvcm1hdHRlZFN0cmluZyA9IFN0cmluZ1V0aWxzLnJlcGxhY2UoZm9ybWF0dGVkLCAiXHIiLCAiXFxyIik7Ci0JCQkJZm9ybWF0dGVkU3RyaW5nID0gU3RyaW5nVXRpbHMucmVwbGFjZShmb3JtYXR0ZWRTdHJpbmcsICJcbiIsICJcXG4iKTsKLQkJCQlmb3JtYXR0ZWRTdHJpbmcgPSBTdHJpbmdVdGlscy5yZXBsYWNlKGZvcm1hdHRlZFN0cmluZywgIlx0IiwgIlxcdCIpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZWRTdHJpbmcpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Iik7Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKGZhbHNlKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy8yNjE5NjguYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzLzI2MTk2OC5hZnRlckRlZmF1bHRGb3JtYXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDgzODgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzLzI2MTk2OC5hZnRlckRlZmF1bHRGb3JtYXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPHRhZz4KLQk8dDE+PC90MT4KLQk8dDI+PC90MgotCTx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotCTx0MT48L3QxPgotCTx0Mj4KLQkJL3QyPgotCQk8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLQk8dDE+PC90MT4KLQl0Mj4KLQk8L3QyPgotCTx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotCTx0MT48L3QxPgotCTx0MjwvdDI+Ci0JPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0JPHQxPjwvdDE+Ci0JPHQyPC90MgotCTx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotCTx0MT48L3QxPgotCTx0MjwvdDI+Ci0JPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0JPHQxPjwvdDE+Ci0JPHQyPC90Mj4KLQk8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLQk8dDE+PC90MT4KLQk8dDI8L3QyPgotCXQzPgotCTwvdDM+Ci08L3RhZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy8yNjE5NjgueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvMjYxOTY4LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjk5ODFlOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy8yNjE5NjgueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPHRhZz4KLSAgICAgICA8dDE+PC90MT4KLSAgICAgICA8dDI+PC90MgotICAgICAgIDx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotICAgICAgIDx0MT48L3QxPgotICAgICAgIDx0Mj4vdDI+Ci0gICAgICAgPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0gICAgICAgPHQxPjwvdDE+Ci0gICAgICAgdDI+PC90Mj4KLSAgICAgICA8dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLSAgICAgICA8dDE+PC90MT4KLSAgICAgICA8dDI8L3QyPgotICAgICAgIDx0Mz48L3QzPgotPC90YWc+Ci08dGFnPgotICAgICAgIDx0MT48L3QxPgotICAgICAgIDx0MjwvdDIgICAgICAgPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0gICAgICAgPHQxPjwvdDE+Ci0gICAgICAgPHQyPC90MiAgICAgID4gICAgICAgPHQzPjwvdDM+Ci08L3RhZz4KLTx0YWc+Ci0gICAgICAgPHQxPjwvdDE+Ci0gICAgICAgPHQyPC90MiAgICAgID48dDM+PC90Mz4KLTwvdGFnPgotPHRhZz4KLSAgICAgICA8dDE+PC90MT4KLSAgICAgICA8dDI8L3QyICAgICAgPnQzPjwvdDM+Ci08L3RhZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9IaXRDb3VudGVySW50cm8uYWZ0ZXJEZWZhdWx0Rm9ybWF0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9IaXRDb3VudGVySW50cm8uYWZ0ZXJEZWZhdWx0Rm9ybWF0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYWNlNGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvSGl0Q291bnRlckludHJvLmFmdGVyRGVmYXVsdEZvcm1hdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPEhUTUw+Ci08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5QYWdlIEhpdCBDb3VudGVyIEludHJvZHVjdGlvbjwvVElUTEU+Ci08TElOSyByZWw9IlNUWUxFU0hFRVQiIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvSEVBRD4KLTxCT0RZPgotPENFTlRFUj4KLTxGT1JNIG5hbWU9Im15Rm9ybSIgbWV0aG9kPSJwb3N0IgotCWFjdGlvbj0iLi4vQ29udHJvbGxlcnMvU2FtcGxlQ29udHJvbGxlciI+Ci08VEFCTEUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiPgotCTxUQk9EWT4KLQkJPFRSPgotCQkJPFREIGNvbHNwYW49IjIiPjxJTUcgc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxIgotCQkJCWhlaWdodD0iMjUiIGFsdD0iIj48L1REPgotCQk8L1RSPgotCQk8VFI+Ci0JCQk8VEQgcm93c3Bhbj0iMiIgYWxpZ249IkxFRlQiIHdpZHRoPSIyMjAiIGhlaWdodD0iMzAwIj48SU1HCi0JCQkJc3JjPSIuLi9pbWFnZXMvaGl0Q291bnRlcjAxLmdpZiIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIzMDAiIGFsdD0iIj48L1REPgotCQkJPFREIGFsaWduPSJMRUZUIiB3aWR0aD0iMzgwIj4KLQkJCTxQPjxGT05UIHNpemU9IisxIj48Qj5QYWdlIEhpdCBDb3VudGVyIFNhbXBsZTwvQj48L0ZPTlQ+PC9QPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPgotCQkJPFREIGFsaWduPSJMRUZUIiB2YWxpZ249IlRPUCI+Ci0JCQk8UD48Rk9OVCBzaXplPSItMSI+VGhpcyBzYW1wbGUgc2hvd3MgeW91IGhvdyB0byB1c2UgYSBKYXZhCi0JCQlzZXJ2bGV0IHRvIGNvdW50IGhvdyBtYW55IHRpbWVzIGEgcGFnZSB3YXMgdmlzaXRlZC48L0ZPTlQ+PC9QPgotCQkJPFA+PEZPTlQgc2l6ZT0iLTEiPlRoaXMgc2FtcGxlIHJlcXVpcmVzIGEgZGF0YWJhc2UgdG8KLQkJCXN0b3JlIHRoZSBjb3VudGVyLiBJZiB5b3UgaGF2ZSBub3QgYWxyZWFkeSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQKLQkJCXlvdXIgZGF0YWJhc2UgZm9yIHRoZSBXZWJTcGhlcmUgc2FtcGxlcywgcmVmZXIgdG8gPEEKLQkJCQlocmVmPSIuLi9Db25maWd1cmF0aW9uL0RCQ29uZmlnLmh0bWwiPkRhdGFiYXNlIENvbmZpZ3VyYXRpb248L0E+IGZvcgotCQkJaW5zdHJ1Y3Rpb25zLiA8L0ZPTlQ+PC9QPgotCQkJPFA+PEZPTlQgc2l6ZT0iLTEiPjxBCi0JCQkJaHJlZj0iamF2YXNjcmlwdDpkb2N1bWVudC5teUZvcm0uc3VibWl0KCkiIHRhcmdldD0iX3NlbGYiPiA8Qj5SdW4KLQkJCXRoaXMgc2FtcGxlPC9CPjwvQT4gPC9GT05UPjwvUD4KLQkJCTxJTlBVVCBuYW1lPSJjb21tYW5kIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJIaXRDb3VudGVyVmlldyIgLz4gPElOUFVUCi0JCQkJbmFtZT0iZGJfcmVnaW9uIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJ0cnVlIiAvPjwvVEQ+Ci0JCTwvVFI+Ci08L1RBQkxFPgotPC9GT1JNPgotPEJSPgotPFRBQkxFIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNTAwIj4KLQk8VEJPRFk+Ci0JCTxUUj4KLQkJCTxURCBhbGlnbj0iQ0VOVEVSIj4KLQkJCTxQPjxCPjxGT05UIHNpemU9Ii0xIj5Ib3cgdGhpcyBzYW1wbGUgd29ya3M6PC9GT05UPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPgotCQkJPFREPgotCQkJPFRBQkxFIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwhLS0gIyMjIyMjIyMjIyMjIGhvcml6b250YWwgc3BhY2VyICMjIyMjIyMjIyMjIyAtLT4gPElNRwotCQkJCQkJCXNyYz0iLi4vaW1hZ2VzL2NsZWFyUGl4ZWwuZ2lmIiB3aWR0aD0iMTUiIGhlaWdodD0iMSIgYWx0PSIiPgotCQkJCQkJPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPjwvVEQ+Ci0JCQkJCQk8VEQ+Ci0JCQkJCQk8UD48Rk9OVCBzaXplPSItMSI+VGhpcyBzYW1wbGUgaGFzOjwvRk9OVD48L1A+Ci0JCQkJCQk8VUw+Ci0JCQkJCQkJPExJPjxGT05UIHNpemU9Ii0xIj5BIEphdmEgc2VydmxldCB0aGF0IGluY3JlbWVudHMgYQotCQkJCQkJCWNvdW50ZXIgZXZlcnkgdGltZSBpdCBpcyBpbnZva2VkIDwvRk9OVD4KLQkJCQkJCQk8VUw+Ci0JCQkJCQkJCTxMST48Rk9OVCBzaXplPSItMSI+QSBKYXZhIFNlcnZlciBQYWdlIChKU1ApIHRoYXQKLQkJCQkJCQkJaW52b2tlcyB0aGUgc2VydmxldCBhbmQgZGlzcGxheXMgdGhlIGNvdW50ZXIgPC9GT05UPgotCQkJCQkJCQk8TEk+PEZPTlQgc2l6ZT0iLTEiPkEgLnNlcnZsZXQgZmlsZSB0aGF0IHByb3ZpZGVzCi0JCQkJCQkJCWluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2bGV0IHRvIHRoZSBXZWJTcGhlcmUgQXBwbGljYXRpb24KLQkJCQkJCQkJU2VydmVyIDwvRk9OVD4KLQkJCQkJCQk8L1VMPgotCQkJCQkJPC9VTD4KLQkJCQkJCTxQPjxGT05UIHNpemU9Ii0xIj5UaGUgQXBwbGljYXRpb24gU2VydmVyIHByb2Nlc3NlcwotCQkJCQkJLmpzcCBmaWxlcyB3aXRoIGl0cyBKU1AgMS4wIHByb2Nlc3NvciBzZXJ2bGV0LiBJdCBoYW5kbGVzIHRoZQotCQkJCQkJJmx0O2pzcDppbmNsdWRlIC4uLiAvJmd0OyB0YWcgYXMgYSBzZXJ2ZXItc2lkZSBpbmNsdWRlLCByZXBsYWNpbmcKLQkJCQkJCXRoZSB0YWcgd2l0aCB0aGUgdmFyaWFibGUgZGF0YSBnZW5lcmF0ZWQgYnkgdGhlIHNlcnZsZXQuPC9GT05UPjwvUD4KLQkJCQkJCTwvVEQ+Ci0JCQkJCQk8VEQ+PCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HCi0JCQkJCQkJc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxIiBhbHQ9IiI+Ci0JCQkJCQk8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+PC9URD4KLQkJCQk8L1RCT0RZPgotCQkJPC9UQUJMRT4KLQkJCTwvVEQ+Ci0JCTwvVFI+Ci0JPC9UQk9EWT4KLTwvVEFCTEU+Ci08QlI+Ci08VEFCTEUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiIGJvcmRlcj0iMCIKLQljZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiCi0JY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIgotCXdpZHRoPSI1MDAiPgotCTxUQk9EWT4KLQkJPFRSPgotCQkJPFREIGFsaWduPSJDRU5URVIiPgotCQkJPFA+PEI+PEZPTlQgc2l6ZT0iLTEiPiBIb3cgdG8gdXNlIHRoaXMgc2FtcGxlIG9uIHlvdXIKLQkJCXdlYiBwYWdlOjwvRk9OVD48L0I+PC9QPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPgotCQkJPFREPgotCQkJPFRBQkxFIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwhLS0gIyMjIyMjIyMjIyMjIGhvcml6b250YWwgc3BhY2VyICMjIyMjIyMjIyMjIyAtLT4gPElNRwotCQkJCQkJCXNyYz0iLi4vaW1hZ2VzL2NsZWFyUGl4ZWwuZ2lmIiB3aWR0aD0iMTUiIGhlaWdodD0iMSIgYWx0PSIiPgotCQkJCQkJPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPjwvVEQ+Ci0JCQkJCQk8VEQ+Ci0JCQkJCQk8UD48Rk9OVCBzaXplPSItMSI+WW91IGNhbiBhZGQgdGhpcyBleGFjdCB0YWcgdG8gYW55Ci0JCQkJCQlIVE1MIHBhZ2UgeW91IGhhdmUgb24geW91ciBzaXRlLiBSZW5hbWUgdGhlIEhUTUwgZmlsZSB3aXRoIGEgLmpzcAotCQkJCQkJZmlsZSBleHRlbnNpb24sIHB1dCB0aGUgSmF2YSAuY2xhc3MgYW5kIC5zZXJ2bGV0IGZpbGVzIGluIHRoZQotCQkJCQkJY2xhc3NlcyBmb2xkZXIsIHB1Ymxpc2guLi4uIGFuZCB5b3UncmUgcmVhZHkgdG8gZ28uPC9GT05UPjwvUD4KLQkJCQkJCTwvVEQ+Ci0JCQkJCQk8VEQ+PCEtLSAjIyMjIyMjIyMjIyMgaG9yaXpvbnRhbCBzcGFjZXIgIyMjIyMjIyMjIyMjIC0tPiA8SU1HCi0JCQkJCQkJc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxIiBhbHQ9IiI+Ci0JCQkJCQk8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQk8L1RCT0RZPgotCQkJPC9UQUJMRT4KLQkJCTwvVEQ+Ci0JCTwvVFI+Ci0JPC9UQk9EWT4KLTwvVEFCTEU+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9IaXRDb3VudGVySW50cm8uaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL0hpdENvdW50ZXJJbnRyby5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjY2NjYTE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL0hpdENvdW50ZXJJbnRyby5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08SFRNTD4KLQkJPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2Ci09Ci0iQ29udGVudC1UeXBlIgotY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5QYWdlIEhpdCBDb3VudGVyIEludHJvZHVjdGlvbjwvVElUTEU+Ci08TElOSyByZWw9IlNUWUxFU0hFRVQiIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHR5cGU9InRleHQvY3NzIj4KLTwvSEVBRD4KLTxCT0RZPgotPENFTlRFUj4KLTxGT1JNIG5hbWUgICA9ICAgIm15Rm9ybSIgbWV0aG9kPSJwb3N0IiBhY3Rpb249Ii4uL0NvbnRyb2xsZXJzL1NhbXBsZUNvbnRyb2xsZXIiPgotCTxUQUJMRSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCI+Ci0JPFRCT0RZPgotCQk8VFI+Ci0JCQk8VEQgY29sc3Bhbj0iMiI+Ci0JCQk8SU1HIHNyYz0iLi4vaW1hZ2VzL2NsZWFyUGl4ZWwuZ2lmIiB3aWR0aD0iMSIgaGVpZ2h0PSIyNSIgYWx0PSIiPjwvVEQ+Ci0JCTwvVFI+Ci0JCTxUUj4KLQkJCTxURCByb3dzcGFuPSIyIiBhbGlnbj0iTEVGVCIgd2lkdGg9IjIyMCIgaGVpZ2h0PSIzMDAiPjxJTUcgc3JjPSIuLi9pbWFnZXMvaGl0Q291bnRlcjAxLmdpZiIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIzMDAiIGFsdD0iIj48L1REPgotCQkJPFREIGFsaWduPSJMRUZUIiB3aWR0aD0iMzgwIj4KLQkJCTxQPjxGT05UIHNpemU9IisxIj48Qj5QYWdlIEhpdCBDb3VudGVyIFNhbXBsZTwvQj48L0ZPTlQ+PC9QPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPgotCQkJPFREIGFsaWduPSJMRUZUIiB2YWxpZ249IlRPUCI+Ci0JCQk8UD48Rk9OVCBzaXplPSItMSI+VGhpcyBzYW1wbGUgc2hvd3MgeW91IGhvdyB0byB1c2UgYSBKYXZhIHNlcnZsZXQgdG8gY291bnQgaG93IG1hbnkgdGltZXMgYSBwYWdlIHdhcyB2aXNpdGVkLjwvRk9OVD48L1A+Ci0JCQk8UD48Rk9OVCBzaXplPSItMSI+VGhpcyBzYW1wbGUgcmVxdWlyZXMgYSBkYXRhYmFzZSB0byBzdG9yZSB0aGUgY291bnRlci4gSWYgeW91IGhhdmUgbm90IGFscmVhZHkgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkIHlvdXIgZGF0YWJhc2UgZm9yIHRoZSBXZWJTcGhlcmUgc2FtcGxlcywgcmVmZXIgdG8gPEEgaHJlZj0iLi4vQ29uZmlndXJhdGlvbi9EQkNvbmZpZy5odG1sIj5EYXRhYmFzZSBDb25maWd1cmF0aW9uPC9BPiBmb3IgaW5zdHJ1Y3Rpb25zLiA8L0ZPTlQ+PC9QPgotCQkJPFA+PEZPTlQgc2l6ZT0iLTEiPjxBIGhyZWY9ImphdmFzY3JpcHQ6ZG9jdW1lbnQubXlGb3JtLnN1Ym1pdCgpIiB0YXJnZXQ9Il9zZWxmIj4gPEI+UnVuIHRoaXMgc2FtcGxlPC9CPjwvQT4gPC9GT05UPjwvUD4KLQkJCTxJTlBVVCBuYW1lPSJjb21tYW5kIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJIaXRDb3VudGVyVmlldyIgLz4gPElOUFVUIG5hbWU9ImRiX3JlZ2lvbiIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0idHJ1ZSIgLz48L1REPgotCQk8L1RSPgotPC9UQUJMRT4KLTwvRk9STT4KLTxCUj4KLTxUQUJMRSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCI+Ci0JPFRCT0RZPgotCQk8VFI+Ci0JCQk8VEQgYWxpZ249IkNFTlRFUiI+Ci0JCQk8UD48Qj48Rk9OVCBzaXplPSItMSI+SG93IHRoaXMgc2FtcGxlIHdvcmtzOjwvRk9OVD4KLQkJCTwvVEQ+Ci0JCTwvVFI+Ci0JCTxUUj4KLQkJCTxURD4KLQkJCTxUQUJMRSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIj4KLQkJCQk8VEJPRFk+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD48IS0tICMjIyMjIyMjIyMjIyBob3Jpem9udGFsIHNwYWNlciAjIyMjIyMjIyMjIyMgLS0+IDxJTUcgc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxIiBhbHQ9IiI+IDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT48L1REPgotCQkJCQkJPFREPgotCQkJCQkJPFA+PEZPTlQgc2l6ZT0iLTEiPlRoaXMgc2FtcGxlIGhhczo8L0ZPTlQ+PC9QPgotCQkJCQkJPFVMPgotCQkJCQkJCTxMST48Rk9OVCBzaXplPSItMSI+QSBKYXZhIHNlcnZsZXQgdGhhdCBpbmNyZW1lbnRzIGEgY291bnRlciBldmVyeSB0aW1lIGl0IGlzIGludm9rZWQgPC9GT05UPgotPFVMPgotCTxMST48Rk9OVCBzaXplPSItMSI+QSBKYXZhIFNlcnZlciBQYWdlIChKU1ApIHRoYXQgaW52b2tlcyB0aGUgc2VydmxldCBhbmQgZGlzcGxheXMgdGhlIGNvdW50ZXIgPC9GT05UPgotCTxMST48Rk9OVCBzaXplPSItMSI+QSAuc2VydmxldCBmaWxlIHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNlcnZsZXQgdG8gdGhlIFdlYlNwaGVyZSBBcHBsaWNhdGlvbiBTZXJ2ZXIgPC9GT05UPgotPC9VTD4KLQkJCQkJCTwvVUw+Ci0JCQkJCQk8UD48Rk9OVCBzaXplPSItMSI+VGhlIEFwcGxpY2F0aW9uIFNlcnZlciBwcm9jZXNzZXMgLmpzcCBmaWxlcyB3aXRoIGl0cyBKU1AgMS4wIHByb2Nlc3NvciBzZXJ2bGV0LiBJdCBoYW5kbGVzIHRoZSAmbHQ7anNwOmluY2x1ZGUgLi4uIC8mZ3Q7IHRhZyBhcyBhIHNlcnZlci1zaWRlIGluY2x1ZGUsIHJlcGxhY2luZyB0aGUgdGFnIHdpdGggdGhlIHZhcmlhYmxlIGRhdGEgZ2VuZXJhdGVkIGJ5IHRoZSBzZXJ2bGV0LjwvRk9OVD48L1A+Ci0JCQkJCQk8L1REPgotCQkJCQkJPFREPjwhLS0gIyMjIyMjIyMjIyMjIGhvcml6b250YWwgc3BhY2VyICMjIyMjIyMjIyMjIyAtLT4gPElNRyBzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjEiIGFsdD0iIj4gPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPjwvVEQ+Ci0JCQkJPC9UQk9EWT4KLQkJCTwvVEFCTEU+Ci0JCQk8L1REPgotCQk8L1RSPgotCTwvVEJPRFk+Ci08L1RBQkxFPgotPEJSPgotPFRBQkxFIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNTAwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgd2lkdGg9IjUwMCIgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSI1MDAiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiB3aWR0aD0iNTAwIj4KLQk8VEJPRFk+Ci0JCTxUUj4KLQkJCTxURCBhbGlnbj0iQ0VOVEVSIj4KLQkJCTxQPjxCPjxGT05UIHNpemU9Ii0xIj4KLUhvdyB0byB1c2UgdGhpcyBzYW1wbGUgb24geW91ciB3ZWIgcGFnZTo8L0ZPTlQ+PC9CPjwvUD4KLQkJCTwvVEQ+Ci0JCTwvVFI+Ci0JCTxUUj4KLQkJCTxURD4KLQkJCTxUQUJMRSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIj4KLQkJCQk8VEJPRFk+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD48IS0tICMjIyMjIyMjIyMjIyBob3Jpem9udGFsIHNwYWNlciAjIyMjIyMjIyMjIyMgLS0+IDxJTUcgc3JjPSIuLi9pbWFnZXMvY2xlYXJQaXhlbC5naWYiIHdpZHRoPSIxNSIgaGVpZ2h0PSIxIiBhbHQ9IiI+IDwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT48L1REPgotCQkJCQkJPFREPgotCQkJCQkJPFA+PEZPTlQgc2l6ZT0iLTEiPllvdSBjYW4gYWRkIHRoaXMgZXhhY3QgdGFnIHRvIGFueSBIVE1MIHBhZ2UgeW91IGhhdmUgb24geW91ciBzaXRlLiBSZW5hbWUgdGhlIEhUTUwgZmlsZSB3aXRoIGEgLmpzcCBmaWxlIGV4dGVuc2lvbiwgcHV0IHRoZSBKYXZhIC5jbGFzcyBhbmQgLnNlcnZsZXQgZmlsZXMgaW4gdGhlIGNsYXNzZXMgZm9sZGVyLCBwdWJsaXNoLi4uLiBhbmQgeW91J3JlIHJlYWR5IHRvIGdvLjwvRk9OVD48L1A+Ci0JCQkJCQk8L1REPgotCQkJCQkJPFREPjwhLS0gIyMjIyMjIyMjIyMjIGhvcml6b250YWwgc3BhY2VyICMjIyMjIyMjIyMjIyAtLT4gPElNRyBzcmM9Ii4uL2ltYWdlcy9jbGVhclBpeGVsLmdpZiIgd2lkdGg9IjE1IiBoZWlnaHQ9IjEiIGFsdD0iIj4gPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPjwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJPC9UQk9EWT4KLQkJCTwvVEFCTEU+Ci0JCQk8L1REPgotCQkJCTwvVFI+Ci0JCQkJCTwvVEJPRFk+Ci0JCQkJCQk8L1RBQkxFPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvYmxvY2tDb21tZW50cy5hZnRlckRlZmF1bHRGb3JtYXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvYmxvY2tDb21tZW50cy5hZnRlckRlZmF1bHRGb3JtYXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2I4NDEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2Jsb2NrQ29tbWVudHMuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwhLS0gY29tbWVudCBvbiBhIG5ldyBsaW5lIC0tPgotPG1lbnUgZGF0ZT0iMTEvMzAvMjAwMCI+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPHJuYW1lPkxpYW0ncyBDaG93ZGVyIEhvdXNlIGFuZCBHcmlsbDwvcm5hbWU+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPCEtLSBibG9jayBjb21tZW50Ci0JCUJsYWNrID0gIzAwMDAwMAotCQlTaWx2ZXI9ICNDMEMwQzAKLQkJR3JheSAgPSAjODA4MDgwCi0JCVdoaXRlID0gI0ZGRkZGRgotCS0tPgotCTwhLS0gYmxvY2sgY29tbWVudAotCQlCbGFjayA9ICMwMDAwMDAKLQkJU2lsdmVyPSAjQzBDMEMwCi0JCUdyYXkgID0gIzgwODA4MAotCQlXaGl0ZSA9ICNGRkZGRkYKLQktLT4KLQk8aXRlbSB0eXBlPSJhcHBldGl6ZXIiPgotCQk8ZGVzYz5XYXJtZWQgbGVlayBzYWxhZDwvZGVzYz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQkJPHByaWNlIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+PC9wcmljZT4KLQkJPHByaWNlIHVuaXRzPSJ1c2QiIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+PC9wcmljZT4KLQk8L2l0ZW0+Ci0JPCEtLSBjb21tZW50IG9uIGEgbmV3IGxpbmUgLS0+Ci0JPCEtLSAgIGNvbW1lbnQgICBvbiAgIGEgICBuZXcgICBsaW5lICAgLS0+Ci0JPCEtLWNvbW1lbnQgb24gYSBuZXcgbGluZSB3aXRoIG5vIHNwYWNlLS0+Ci0JPCEtLQotCQlObyBzcGFjZQotCS0tPgotCTwhLS0KLQkJT25lU3BhY2UKLQktLT4KLQk8IS0tCi0JCU9uZSB0YWIKLQktLT4KLQk8IS0tCi0JCVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQkJCi0JCVRoZSB0ZXh0Ci0JCWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLi0tPgotCTwhLS0KLQkJVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCQkKLQkJVGhlIHRleHQKLQkJaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0JLS0+Ci0JPCEtLQotCQlUaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0JCQotCQkKLQkJVGhlIHRleHQKLQkJaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0JLS0+Ci0JPCEtLQotCQlUaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0JCQotCQkKLQkJCi0JCVRoZSB0ZXh0Ci0JCWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotCS0tPgotCTwhLS0KLQkJCi0JCVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQkJCi0JCVRoZSB0ZXh0Ci0JCWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotCS0tPgotCTwhLS0KLQkJCi0JCVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQkJCi0JCVRoZSB0ZXh0Ci0JCWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotCQkKLQktLT4KLQk8IS0tCi0JCQotCQkKLQkJCi0JCVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQkJCi0JCQotCQkKLQkJVGhlIHRleHQKLQkJaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuCi0JCQotCQkKLQkJCi0JLS0+Ci0JPGl0ZW0gdHlwZT0iYXBwZXRpemVyIj4KLQkJPCEtLSBhCi0JCQliLS0+Ci0JCTwhLS0gYQotCQkJYiAtLT4KLQkJPCEtLQotCQkJYQotCQkJYi0tPgotCQk8IS0tCi0JCQlhCi0JCQliIC0tPgotCQk8IS0tCi0JCQlhCi0JCQliCi0JCS0tPgotCQk8IS0tIGEKLQkJCWIKLQkJLS0+Ci0JCTwhLS0KLQkJCQotCQkJCi0JCQkKLQkJCWEKLQkJCQotCQkJCi0JCQkKLQkJCWIKLQkJCQotCQkJCi0JCQkKLQkJLS0+Ci0JCTxkZXNjPlByb3NjaXV0dG8gaGFtIHdpdGggbWVsb248L2Rlc2M+Ci0JCTwhLS0gdGhpcyBibG9jayBjb21tZW50IHNob3VsZCBsaW5lIHVwIHdpdGggdGhlIHNpYmlsaW5ncwotCQkJQmxhY2sgPSAjMDAwMDAwCi0JCQlTaWx2ZXI9ICNDMEMwQzAKLQkJCUdyYXkgID0gIzgwODA4MAotCQkJV2hpdGUgPSAjRkZGRkZGCi0JCS0tPgotCQk8cHJpY2UgdW5pdHM9InVzZCI+Ny45NTwvcHJpY2U+Ci0JCTwhLS0gY29tbWVudCBiZWZvcmUgbWlzc2luZyBlbmQgdGFnIC0tPgotPC9tZW51PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2Jsb2NrQ29tbWVudHMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvYmxvY2tDb21tZW50cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5Njk4NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvYmxvY2tDb21tZW50cy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci0JPCEtLSBjb21tZW50IG9uIGEgbmV3IGxpbmUgLS0+Ci0JCTxtZW51IGRhdGU9IjExLzMwLzIwMDAiPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTxybmFtZT5MaWFtJ3MgQ2hvd2RlciBIb3VzZSBhbmQgR3JpbGw8L3JuYW1lPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTwhLS0gYmxvY2sgY29tbWVudAotCQlCbGFjayA9ICMwMDAwMDAKLQkJU2lsdmVyPSAjQzBDMEMwCi0JCUdyYXkgID0gIzgwODA4MAotCQlXaGl0ZSA9ICNGRkZGRkYKLQktLT4KLQk8IS0tIGJsb2NrIGNvbW1lbnQKLQkJCUJsYWNrID0gIzAwMDAwMAotCQlTaWx2ZXI9ICNDMEMwQzAKLQkJCQlHcmF5ICA9ICM4MDgwODAKLQlXaGl0ZSA9ICNGRkZGRkYKLS0tPgotCTxpdGVtIHR5cGU9ImFwcGV0aXplciI+Ci0JCTxkZXNjPldhcm1lZCBsZWVrIHNhbGFkPC9kZXNjPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPjxwcmljZSB1bml0cz0idXNkIj42Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPjwvcHJpY2U+PHByaWNlIHVuaXRzPSJ1c2QiIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+PC9wcmljZT4KLQk8L2l0ZW0+Ci0JPCEtLSBjb21tZW50IG9uIGEgbmV3IGxpbmUgLS0+Ci0JPCEtLSAgIGNvbW1lbnQgICBvbiAgIGEgICBuZXcgICBsaW5lICAgLS0+Ci0JPCEtLWNvbW1lbnQgb24gYSBuZXcgbGluZSB3aXRoIG5vIHNwYWNlLS0+Ci08IS0tCi1ObyBzcGFjZQotLS0+Ci08IS0tCi0gT25lU3BhY2UKLS0tPgotPCEtLQotCU9uZSB0YWIKLS0tPgotPCEtLQotVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCi1UaGUgdGV4dAotaW4gdGhpcyBwYXJhZ3JhcGggc2hvdWxkIE5PVCBiZSByZS1mbG93ZWQuLS0+Ci08IS0tCi1UaGlzIGlzIGEgbG9uZyBwYXJhZ3JhcGguCi0KLVRoZSB0ZXh0Ci1pbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLS0tPgotPCEtLQotVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCi0KLVRoZSB0ZXh0Ci1pbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLS0tPgotPCEtLQotVGhpcyBpcyBhIGxvbmcgcGFyYWdyYXBoLgotCi0KLQotVGhlIHRleHQKLWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotLS0+Ci08IS0tCi0KLVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQotVGhlIHRleHQKLWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotLS0+Ci08IS0tCi0KLVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQotVGhlIHRleHQKLWluIHRoaXMgcGFyYWdyYXBoIHNob3VsZCBOT1QgYmUgcmUtZmxvd2VkLgotCi0tLT4KLTwhLS0KLQotCi0KLVRoaXMgaXMgYSBsb25nIHBhcmFncmFwaC4KLQotCi0KLVRoZSB0ZXh0Ci1pbiB0aGlzIHBhcmFncmFwaCBzaG91bGQgTk9UIGJlIHJlLWZsb3dlZC4KLQotCi0KLS0tPgotCTxpdGVtIHR5cGU9ImFwcGV0aXplciI+Ci08IS0tIGEKLSAgICAgYi0tPgotPCEtLSBhCi0gICAgIGIgLS0+Ci08IS0tCi1hCi0gICAgIGItLT4KLTwhLS0KLWEKLSAgICAgYiAtLT4KLTwhLS0KLWEKLSAgICAgYgotLS0+Ci08IS0tIGEKLSAgICAgYgotICAgICAgLS0+Ci08IS0tCi0KLQotCi1hCi0KLQotCi1iCi0KLQotCi0tLT4KLQkJPGRlc2M+UHJvc2NpdXR0byBoYW0gd2l0aCBtZWxvbjwvZGVzYz4KLTwhLS0gdGhpcyBibG9jayBjb21tZW50IHNob3VsZCBsaW5lIHVwIHdpdGggdGhlIHNpYmlsaW5ncwotCUJsYWNrID0gIzAwMDAwMAotCVNpbHZlcj0gI0MwQzBDMAotCUdyYXkgID0gIzgwODA4MAotCVdoaXRlID0gI0ZGRkZGRgotLS0+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiPjcuOTU8L3ByaWNlPgotCTwhLS0gY29tbWVudCBiZWZvcmUgbWlzc2luZyBlbmQgdGFnIC0tPgotPC9tZW51PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NoYXJzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2NoYXJzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjJiYThmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9jaGFycy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1hYmMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9jbGVhbnVwLmFmdGVyQ2xlYW51cC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvY2xlYW51cC5hZnRlckNsZWFudXAuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ3ZDhkNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9jbGVhbnVwLmFmdGVyQ2xlYW51cC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQzICswLDAgQEAKLTxIVE1MPgotPEhFQUQ+Ci0gICA8TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIiAvPgotICAgPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNb3ppbGxhLzQuNzIgW2VuXSAoV2luZG93cyBOVCA1LjA7IFUpIFtOZXRzY2FwZV0iIC8+Ci08VElUTEU+PC9USVRMRT4KLTwvSEVBRD4KLQotVGhpcyBpcyBhIHBhZ2Ugb2Ygc29tZSBvZiB0aGUgdGVjaG5pY2FsIHN0dWZmIHRoYXQgSSd2ZSB3cml0dGVuIHVzaW5nIHZhcmlvdXMKLXByb2dyYW1taW5nIGxhbmd1YWdlcy4gIENsaWNrIG9uIHRoZSBsaW5rcyB0byBsZWFybiBtb3JlIGFib3V0IHRoZSBwcm9qZWN0cyBvcgotdG8gc2VlIHRoZSBzb3VyY2UgY29kZS48QlI+Ci08ST5Ob3RlOiBGZWVsIGZyZWUgdG8gY29weSwgc3RlYWwsIG1vZGlmeSwgZGVzdHJveSB3aGF0IHlvdSB3aWxsLi4uPC9JPjxCUj48QlI+Ci08SFI+Ci0KLTxIMj4gUHJvZ3JhbXMgYW5kIFV0aWxpdGllcyA8L0gyPgotPFVMPgotPExJPjxBIGhyZWY9Im1ha2VtYWtlLmh0bWwiPiA8ST4gQXV0b21hdGljCi1NYWtlZmlsZSBVdGlsaXR5OiA8L0k+PC9BPiBUaGlzIGdlbmVyYXRlcyBhIE1ha2VmaWxlIGFuZCB1cGRhdGVzIGl0IGFjY29yZGluZwotdG8gdGhlIGZpbGVzIGN1cnJlbnRseSBpbiB5b3VyIGRpcmVjdG9yeS4KLVRha2UgYSBnYW5kZXIgYXQgdGhlIHNvdXJjZSBoZXJlOiA8QQotaHJlZj0ibWFrZW1ha2UuYyI+IDxJPiBtYWtlbWFrZS5jIAotIDwvST48L0E+IAotCi08QlI+PEJSPgotPC9MST48TEk+PEEgaHJlZj0ibWFpbHNvcnQucGwiID4gPEk+Ci1tYWlsIGZpbGUgc29ydGVyOiAgPC9JPiA8L0E+IAotVGhpcyB1dGlsaXR5IHBhcnNlcyBhIG1haWwgZmlsZSBhbmQgY3JlYXRlcyBhbm90aGVyIG1haWwgZmlsZSBjb250YWluaW5nIG9ubHkKLXRoZSBtZXNzYWdlcyBzcGVjaWZpZWQgYnkgcGFyYW1hdGVycy4gIEZvciBleGFtcGxlLCBwYXJzZSBhIG1haWwgYXJjaGl2ZSBmaWxlCi0ob2xkLW1haWwtSmFuLTIwMDApIGFuZCBleHRyYWN0IGFsbCBvZiB0aGUgbWVzc2FnZXMgZnJvbSBkYXZla0B5b3VybW9tLmNvbSBvcgotd2l0aCB0aGUgc3ViamVjdCBNYXJpbGxpb24uICBUaGlzIGd1eSB3YXMgd2hpcHBlZCB1cCBpbiBQZXJsLgotPEJSPjxCUj4KLQotPC9MST48TEk+PEEgaHJlZj0iZWxlY3Ryb25pY05vdGVzLmh0bWwiID4gPEk+Ci1FbGVjdHJvbmljIE5vdGVzOiAgPC9JPiA8L0E+IFRoaXMgaXMgYW4gb3JpZ2luYWwgaWRlYSAoZ2FzcCEpIHRoYXQgSSBkZXZlbG9wZWQgd2hpY2ggaXMgYQotc3lzdGVtIGZvciBrZWVwaW5nIGxpdHRsZSByZW1pbmRlcnMgdG8geW91cnNlbGYgZHVyaW5nIHRoZSBkYXkgYW5kIGhhdmluZyB0aGVtCi1zZW50IHRvIHlvdSBhbGwgaW4gb25lIGNvbnZlbmllbnQgZmlsZSB2aWEgZW1haWwgYXQgdGhlIGVuZCBvZiB0aGUgZGF5LiAgCi08QlI+PEJSPgotCi08L0xJPjxMST48QSBocmVmPSJoZWFkZXIuaHRtbCIgPiA8ST4gQy9DKysgSGVhZGVyIGZpbGUKLXRvIEltcGxlbWVudGF0aW9uIGZpbGUgY29udmVydGVyOiA8L0k+IDwvQT4KLVRoaXMgaXMgYSB2ZXJ5IHVzZWZ1bCB0b29sIHdyaXR0ZW4gaW4gQysrIHRoYXQgY29udmVydHMgLmggZmlsZXMgdG8gZW1wdHkKLWltcGxlbWVudGF0aW9uICguQykgZmlsZXMuICAKLTxCUj48QlI+Ci08L0xJPjxMST48QSBocmVmPSJtYXRyaXguaHRtbCIgPiA8ST4gTWF0cml4IE1hbmlwdWxhdGlvbgotUGFja2FnZTogPC9JPjwvQT4gVGhpcyBpcyBhIHBhY2thZ2UgdGhhdCBkb2VzIGFsbCBzb3J0cyBvZiBjb29sIG1hbmlwdWxhdGlvbnMKLXdpdGggbWF0cmljZXMsIHN1Y2ggYXMgR2F1c3NpYW4gRWxpbWluYXRpb24sIE5vcm1hbCBFcXVhdGlvbnMsIFZhbmRlcm1vbmRlCi1NYXRyaWNlcywgQ2hvbGVza3kgRmFjdG9yaXphdGlvbiwgRXJyb3IgQW5hbHlzaXMsIGFuZCBtb3JlIHN0dWZmIHRoYW4geW91IHdvdWxkCi1ldmVyIHdhbnQgdG8gZG8gd2l0aCBhIG1hdHJpeC4gIEl0IGlzIHdyaXR0ZW4gaW4gZ29vZCBvbCcgQy4KLQotPEJSID48QlIgID4KLTwvTEk+PExJPiAKLTxBIGhyZWY9Imxpc3AuaHRtbCIgPiA8ST5TZXQgT3BlcmF0aW9uczogPC9JPjwvQT4gPEk+PC9JPiBBIHByb2dyYW0gdGhhdCBwZXJmb3JtcyBzZXQKLW9wZXJhdGlvbnMgb24gYSBsaXN0LiAgVGhpcyBpcyB3cml0dGVuIGluIExpc3AsIG9mIGFsbCB0aGluZ3MuICBUaGVyZSdzIGFsc28KLXNvbWUgZXhhbXBsZXMgb2YgbXkgb3duIGludGVycHJldGF0aW9ucyBvZiBzb21lIExpc3AgZnVuY3Rpb25zLiBMaXNwIGlzIGEgZ29vZAotbGFuZ3VhZ2UgZm9yIEFJIGFuZCB0aGluZ3Mgb2YgdGhhdCBuYXR1cmUuICAKLUl0IHJlbGllcyBoZWF2aWx5IG9uIHJlY3Vyc2lvbiwgc28gaXQgdGFrZXMgYSBkaWZmZXJlbnQKLW1pbmRzZXQgdG8gcHJvZ3JhbSBpbiB0aGlzIGxhbmd1YWdlLiAgQnV0IHVzZWQgY29ycmVjdGx5IGFuZCBmb3IgaXRzIGludGVuZGVkCi1wdXJwb3NlLCBMaXNwIGlzIGEgdmVyeSB1bmlxdWUgYW5kIHBvd2VyZnVsIHByb2dyYW1taW5nIGxhbmd1YWdlLgotPEJSICAgPjxCUiAgICA+Ci0KLTwvTEk+PExJPiAKLTxBIGhyZWY9ImxvYy5odG1sIiA+IDxJPiBMaW5lcyBPZiBDb2RlIENvdW50ZXI6Ci08L0k+PC9BPjxJPjwvST4gIFRoaXMgaXMgaXMgTE9DIGNvdW50ZXIgdGhhdCBJIHdyb3RlIGluIFBlcmwgdGhhdCBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YKLXVuY29tbWVudGVkIGxpbmVzIG9mIGNvZGUgaW4gYSBwcm9ncmFtLiAgVGhpcyB3b3JrcyBmb3IgYW55IHByb2dyYW1taW5nCi1sYW5ndWFnZSBhcyB5b3UgY2FuIHN1cHBseSB0aGUgY29tbWVudCBjaGFyYWN0ZXIgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoaXMgaXMKLWFuIGV4dHJlbWVseSB1c2VmdWwgcHJvZ3JhbSBmb3IgdXNlIGluIHNvZnR3YXJlIG1ldHJpY3MuCi08QlIgYWJjPSJkZWYiPjxCUiBhYmM9ImRlZiIgPgotCi08L0xJPjxMST48QSBocmVmPSJsaW53aW4uaHRtbCI+IDxJPiBTaW1wbGUgKm5peCB0bwotd2luZG93cyB0ZXh0IGNvbnZlcnRlciA8L0k+PC9BPiBUaGlzIHRha2VzIGZpbGVzIHdyaXR0ZW4gaW4gTGludXggKGFuZCBpbiB2aSBvcgotICAgICAgICBhbiBlZGl0b3Igd2l0aCBhdXRvbWF0aWMgbGluZSBicmVha3MgYWZ0ZXIgZXZlcnkgODAgb3Igc28gY2hhcnMpIGFuZAotZm9ybWF0cyBpdCBzbyBpdCB3aWxsIGRpc3BsYXkgcHJvcGVybHkgaW4gV2luZG93cyBlbnZpcm9ubWVudCBzaG91bGQgeW91IGJlCi1mb3JjZWQgdG8gZG8gc28uICAKLVBlcnVzZSAocGVydXNlLCBtaW5kIHlvdS4gIEkgZG9uJ3Qgd2FudCB0byBzZWUgYW55IDxJPmJyb3dzaW5nPC9JPikgdGhlIHNvdXJjZSBoZXJlOiA8QQotaHJlZj0ibGlud2luLmMiPiA8ST4gbGlud2luLmMgCi0gPC9JPjwvQT4gCi08QlIgYWJjID0gImRlZiI+PEJSIGFiYyAgPSAgImRlZiI+Ci0KLQotPC9MST48TEk+PEI+IFJlZ3Jlc3Npb24gYW5kIFN0YW5kYXJkIERldmlhdGlvbjogPC9CPiAKLUEgbWF0aCBjbGFzcyB3cml0dGVuIGluIEphdmEgdXNpbmcgT2JqZWN0IE9yaWVudGVkIGRlc2lnbiBwcmluY2lwbGVzLiAgVGhlIG1haW4KLWFzcGVjdHMgb2YgdGhlIHByb2dyYW0gYXJlIGZvciBmaWd1cmluZyBvdXQgU3RhbmRhcmQgRGV2aWF0aW9uIGFuZCB0aGUKLVJlZ3Jlc3Npb24sIHdoZW4geW91IGlucHV0IGEgc2V0IG9mIHggYW5kIHkgdmFsdWVzLiAgUmVncmVzc2lvbiBjYWxjdWxhdGlvbnMKLWFyZSBvZnRlbiB1c2VkIGluIFNvZnR3YXJlIE1ldHJpY3MgdG8gdG8gaGVscCBpbiBlc3RpbWF0aW5nIGxlbmd0aCBvZiBjb2RlLCBhbmQKLXRpbWUgc3BlbnQgb24gdGhlIHByb2plY3QuPEJSPgotCi08QSBocmVmPSJSZWdyZXNzaW9uQ2FsYy5odG1sIiA+IAotPEk+IFJlZ3Jlc3Npb25DYWxjLmphdmEgPC9JPiA8L0E+ICBUaGlzIGlzIHRoZSBtYWluIGNsYXNzIHRoYXQgZG9lcyB0aGUKLWNhbGN1bGF0aW9ucy4gIEl0IGNhbGN1bGF0ZXMgQjEsIEIwLCBhbmQgcl4yLCB3aGljaCBhcmUgYWxsIHBhcmFtZXRlcnMgb2YKLVJlZ3Jlc3Npb24uCi08QlIgYWJjPSAiZGVmIj4KLTxBIGhyZWY9Ik1hdGhDbGFzcy5odG1sIiA+IAotPEk+IE1hdGhDbGFzcy5qYXZhIDwvST4gIDwvQT4gVGhpcyBpcyBzaW1wbHkgYSBzbWFsbCBjbGFzcyB3aGljaCBjYWxjdWxhdGVzIHRoZQotbWVhbiBhbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBhIHZlY3RvciBvZiBudW1iZXJzLiAgVGhpcyBpcyB1c2VkIGJ5IHRoZQotUmVncmVzc2lvbkNhbGMgY2xhc3MgaW4gaXRzIGNhbGN1bGF0aW9ucy4KLTxCUiBhYmMgPSJkZWYiPgotPEEgaHJlZj0iUmVncmVzc2lvbi5odG1sIiA+IAotPEk+IFJlZ3Jlc3Npb24uamF2YSA8L0k+ICA8L0E+IFRoaXMgaXMgYmFzaWNhbGx5IHRoZSBtYWluIHJvdXRpbmUsIG9yIHdoZXJlIHRoZQotcHJvZ3JhbSBzdGFydHMuICBJdCBwdXRzIGFsbCBvZiB0aGUgaW5wdXQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGludG8gdHdvCi1zZXBhcmF0ZSB2ZWN0b3JzIGZvciB0aGUgeCBhbmQgeSB2YWx1ZXMuPEJSPjxCUj4KLQotQW4gZXhhbXBsZSBvZiB0aGUgdXNhZ2Ugb2YgdGhpcyBwcm9ncmFtIHdvdWxkIGJlOiAgPEJSPgotSWYgeW91IGhhZCBhIGhpc3Rvcnkgb2YgZGF0YSBvbiB5b3VyIGVzdGltYXRlZCBMaW5lcyBPZiBDb2RlIChMT0MpIHBlciBjbGFzcywKLWFzIHdlbGwgYXMgdGhlIGFjdHVhbCBMT0MgcGVyIGNsYXNzLCB5b3UgY291bGQgcHV0IHRoZXNlIGluIHRoZSBmb3JtdWxhIGFuZAotZmluZCBvdXQgdGhlIFJlZ3Jlc3Npb24gb2YgdGhlIGRhdGEgKG9yIGhvdyBmYXIgYXdheSBlYWNoIHBvaW50IGlzIGZyb20gdGhlCi1mdW5jdGlvbiBsaW5lLikgIAotCi1Zb3Ugd291bGQgaW5wdXQgdGhlIGRhdGEgZm9yIHRoZSBlc3RpbWF0ZWQgTE9DLCBzZXBhcmF0ZWQgYnkgYSBjb21tYSwgYW5kCi1mb2xsb3dlZCBieSB0aGUgYWN0dWFsIExPQy4gIFRoZSByZXN1bHQgd291bGQgYmUgdGhlIHJlZ3Jlc3Npb24gY2FsY3VsYXRpb24uCi08UFJFPgotJWphdmEgUmVncmVzc2lvbiAxMzAgNjUwIDk5IDE1MCAsIDE4NiA2OTkgMTMyIDI3MiAKLQotWCBEYXRhID0gWyAxMzAuMCA2NTAuMCA5OS4wIDE1MC4wIF0KLVkgRGF0YSA9IFsgMTg2LjAgNjk5LjAgMTMyLjAgMjcyLjAgXQotTiA9IDQKLUJldGEwID0gNzIuNjkwNTAzMDc4MDM2MQotQmV0YTEgPSAwLjk3MDEwNDk0NDMwMzA2NjcKLXJTcXVhcmVkID0gMjIxMi41MDQ2OTc2NzM2ODkKLTwvUFJFPgotCi08L0xJPjwvVUw+Ci0KLTxIUj4KLTxIMj4gS25vd2xlZGdlIDwvSDI+Ci08VUw+Ci08TEk+PEEgaHJlZj0idmltLmh0bWwiPiA8ST4gRXNwb3VzaW5nIG15IGxvdmUKLWZvciB2aW0hIDwvST48L0E+IHZpbSBqdXN0IHJvY2tzLCBva2F5LiAgUmVhbGx5LiAgSWYgSSBoYWQgdG8gY2hvb3NlIGJldHdlZW4sCi1saWtlLCBzZXgsIG9yIHVzaW5nIHZpbS0tbGV0J3MganVzdCBzYXkgSSdkIGJlIG9uZSBtYXN0ZXJmdWwtZWRpdGluZyBtb25rLiAKLTxCUj48QlI+Ci0KLQotPC9MST48TEk+Ci08QSBocmVmPSJNQlItTElMTy50eHQiPiAKLTxJPiBMb3N0IExJTE8/ICBSZWNvdmVyLjwvST4gIDwvQT4gSWYgeW91IGhhdmUgTGludXggaW5zdGFsbGVkIGluIGEgbXVsdGktYm9vdAotZW52aXJvbm1lbnQsIGFuZCB5b3Ugb3ZlcndyaXRlIHlvdXIgTUJSLCB5b3UgY2FuIGxvc2UgTElMTy4gIEkgcmVpbnN0YWxsZWQKLVdpbmRvd3MgKGhleSwgSSBuZWVkZWQgdG8gcGxheSBGaW5hbCBGYW50YXN5IFZJSUkhKSBhbmQgY291bGRuJ3QgYm9vdCBpbnRvCi1MaW51eC4gIEhlcmUncyBob3cgSSByZWNvdmVyZWQuCi08QlI+PEJSPgotCi0KLQotPC9MST48L1VMPjxCT0RZPjwvQk9EWT4KLTwvSFRNTD48SFRNTD4KLTwvSFRNTD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9jbGVhbnVwLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9jbGVhbnVwLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOTdhMDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvY2xlYW51cC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLTxodG1sPgotPEhFQUQ+Ci0gICA8TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIiAvPgotICAgPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNb3ppbGxhLzQuNzIgW2VuXSAoV2luZG93cyBOVCA1LjA7IFUpIFtOZXRzY2FwZV0iIC8+Ci08VElUTEU+PC9USVRMRT4KLTwvSEVBRD4KLQotVGhpcyBpcyBhIHBhZ2Ugb2Ygc29tZSBvZiB0aGUgdGVjaG5pY2FsIHN0dWZmIHRoYXQgSSd2ZSB3cml0dGVuIHVzaW5nIHZhcmlvdXMKLXByb2dyYW1taW5nIGxhbmd1YWdlcy4gIENsaWNrIG9uIHRoZSBsaW5rcyB0byBsZWFybiBtb3JlIGFib3V0IHRoZSBwcm9qZWN0cyBvcgotdG8gc2VlIHRoZSBzb3VyY2UgY29kZS48QlI+Ci08ST5Ob3RlOiBGZWVsIGZyZWUgdG8gY29weSwgc3RlYWwsIG1vZGlmeSwgZGVzdHJveSB3aGF0IHlvdSB3aWxsLi4uPC9JPjxCUj48QlI+Ci08SFI+Ci0KLTxIMj4gUHJvZ3JhbXMgYW5kIFV0aWxpdGllcyA8L0gyPgotPFVMPgotPExJPjxBIGhyZWY9Im1ha2VtYWtlLmh0bWwiPiA8ST4gQXV0b21hdGljCi1NYWtlZmlsZSBVdGlsaXR5OiA8L0k+PC9BPiBUaGlzIGdlbmVyYXRlcyBhIE1ha2VmaWxlIGFuZCB1cGRhdGVzIGl0IGFjY29yZGluZwotdG8gdGhlIGZpbGVzIGN1cnJlbnRseSBpbiB5b3VyIGRpcmVjdG9yeS4KLVRha2UgYSBnYW5kZXIgYXQgdGhlIHNvdXJjZSBoZXJlOiA8QQotaHJlZj0ibWFrZW1ha2UuYyI+IDxJPiBtYWtlbWFrZS5jIAotIDwvST48L0E+IAotCi08YnI+PEJSPgotPC9MST48TEk+PEEgaHJlZj0ibWFpbHNvcnQucGwiID4gPEk+Ci1tYWlsIGZpbGUgc29ydGVyOiAgPC9JPiA8L0E+IAotVGhpcyB1dGlsaXR5IHBhcnNlcyBhIG1haWwgZmlsZSBhbmQgY3JlYXRlcyBhbm90aGVyIG1haWwgZmlsZSBjb250YWluaW5nIG9ubHkKLXRoZSBtZXNzYWdlcyBzcGVjaWZpZWQgYnkgcGFyYW1hdGVycy4gIEZvciBleGFtcGxlLCBwYXJzZSBhIG1haWwgYXJjaGl2ZSBmaWxlCi0ob2xkLW1haWwtSmFuLTIwMDApIGFuZCBleHRyYWN0IGFsbCBvZiB0aGUgbWVzc2FnZXMgZnJvbSBkYXZla0B5b3VybW9tLmNvbSBvcgotd2l0aCB0aGUgc3ViamVjdCBNYXJpbGxpb24uICBUaGlzIGd1eSB3YXMgd2hpcHBlZCB1cCBpbiBQZXJsLgotPEJSPjxicj4KLQotPC9MST48TEk+PEEgaHJlZj0iZWxlY3Ryb25pY05vdGVzLmh0bWwiID4gPEk+Ci1FbGVjdHJvbmljIE5vdGVzOiAgPC9JPiA8L0E+IFRoaXMgaXMgYW4gb3JpZ2luYWwgaWRlYSAoZ2FzcCEpIHRoYXQgSSBkZXZlbG9wZWQgd2hpY2ggaXMgYQotc3lzdGVtIGZvciBrZWVwaW5nIGxpdHRsZSByZW1pbmRlcnMgdG8geW91cnNlbGYgZHVyaW5nIHRoZSBkYXkgYW5kIGhhdmluZyB0aGVtCi1zZW50IHRvIHlvdSBhbGwgaW4gb25lIGNvbnZlbmllbnQgZmlsZSB2aWEgZW1haWwgYXQgdGhlIGVuZCBvZiB0aGUgZGF5LiAgCi08YnI+PGJyPgotCi08L0xJPjxMST48QSBocmVmPSJoZWFkZXIuaHRtbCIgPiA8ST4gQy9DKysgSGVhZGVyIGZpbGUKLXRvIEltcGxlbWVudGF0aW9uIGZpbGUgY29udmVydGVyOiA8L0k+IDwvQT4KLVRoaXMgaXMgYSB2ZXJ5IHVzZWZ1bCB0b29sIHdyaXR0ZW4gaW4gQysrIHRoYXQgY29udmVydHMgLmggZmlsZXMgdG8gZW1wdHkKLWltcGxlbWVudGF0aW9uICguQykgZmlsZXMuICAKLTxCUj48QlI+Ci08L0xJPjxMST48QSBocmVmPSJtYXRyaXguaHRtbCIgPiA8ST4gTWF0cml4IE1hbmlwdWxhdGlvbgotUGFja2FnZTogPC9JPjwvQT4gVGhpcyBpcyBhIHBhY2thZ2UgdGhhdCBkb2VzIGFsbCBzb3J0cyBvZiBjb29sIG1hbmlwdWxhdGlvbnMKLXdpdGggbWF0cmljZXMsIHN1Y2ggYXMgR2F1c3NpYW4gRWxpbWluYXRpb24sIE5vcm1hbCBFcXVhdGlvbnMsIFZhbmRlcm1vbmRlCi1NYXRyaWNlcywgQ2hvbGVza3kgRmFjdG9yaXphdGlvbiwgRXJyb3IgQW5hbHlzaXMsIGFuZCBtb3JlIHN0dWZmIHRoYW4geW91IHdvdWxkCi1ldmVyIHdhbnQgdG8gZG8gd2l0aCBhIG1hdHJpeC4gIEl0IGlzIHdyaXR0ZW4gaW4gZ29vZCBvbCcgQy4KLQotPEJSID48QlIgID4KLTwvTEk+PExJPiAKLTxBIGhyZWY9Imxpc3AuaHRtbCIgPiA8ST5TZXQgT3BlcmF0aW9uczogPC9JPjwvQT4gPEk+PC9JPiBBIHByb2dyYW0gdGhhdCBwZXJmb3JtcyBzZXQKLW9wZXJhdGlvbnMgb24gYSBsaXN0LiAgVGhpcyBpcyB3cml0dGVuIGluIExpc3AsIG9mIGFsbCB0aGluZ3MuICBUaGVyZSdzIGFsc28KLXNvbWUgZXhhbXBsZXMgb2YgbXkgb3duIGludGVycHJldGF0aW9ucyBvZiBzb21lIExpc3AgZnVuY3Rpb25zLiBMaXNwIGlzIGEgZ29vZAotbGFuZ3VhZ2UgZm9yIEFJIGFuZCB0aGluZ3Mgb2YgdGhhdCBuYXR1cmUuICAKLUl0IHJlbGllcyBoZWF2aWx5IG9uIHJlY3Vyc2lvbiwgc28gaXQgdGFrZXMgYSBkaWZmZXJlbnQKLW1pbmRzZXQgdG8gcHJvZ3JhbSBpbiB0aGlzIGxhbmd1YWdlLiAgQnV0IHVzZWQgY29ycmVjdGx5IGFuZCBmb3IgaXRzIGludGVuZGVkCi1wdXJwb3NlLCBMaXNwIGlzIGEgdmVyeSB1bmlxdWUgYW5kIHBvd2VyZnVsIHByb2dyYW1taW5nIGxhbmd1YWdlLgotPEJSICAgPjxCUiAgICA+Ci0KLTwvTEk+PExJPiAKLTxBIGhyZWY9ImxvYy5odG1sIiA+IDxJPiBMaW5lcyBPZiBDb2RlIENvdW50ZXI6Ci08L0k+PC9BPjxJPjwvST4gIFRoaXMgaXMgaXMgTE9DIGNvdW50ZXIgdGhhdCBJIHdyb3RlIGluIFBlcmwgdGhhdCBjYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YKLXVuY29tbWVudGVkIGxpbmVzIG9mIGNvZGUgaW4gYSBwcm9ncmFtLiAgVGhpcyB3b3JrcyBmb3IgYW55IHByb2dyYW1taW5nCi1sYW5ndWFnZSBhcyB5b3UgY2FuIHN1cHBseSB0aGUgY29tbWVudCBjaGFyYWN0ZXIgb24gdGhlIGNvbW1hbmQgbGluZS4gIFRoaXMgaXMKLWFuIGV4dHJlbWVseSB1c2VmdWwgcHJvZ3JhbSBmb3IgdXNlIGluIHNvZnR3YXJlIG1ldHJpY3MuCi08QlIgYWJjPSJkZWYiPjxCUiBhYmM9ImRlZiIgPgotCi08L0xJPjxMST48QSBocmVmPSJsaW53aW4uaHRtbCI+IDxJPiBTaW1wbGUgKm5peCB0bwotd2luZG93cyB0ZXh0IGNvbnZlcnRlciA8L0k+PC9BPiBUaGlzIHRha2VzIGZpbGVzIHdyaXR0ZW4gaW4gTGludXggKGFuZCBpbiB2aSBvcgotICAgICAgICBhbiBlZGl0b3Igd2l0aCBhdXRvbWF0aWMgbGluZSBicmVha3MgYWZ0ZXIgZXZlcnkgODAgb3Igc28gY2hhcnMpIGFuZAotZm9ybWF0cyBpdCBzbyBpdCB3aWxsIGRpc3BsYXkgcHJvcGVybHkgaW4gV2luZG93cyBlbnZpcm9ubWVudCBzaG91bGQgeW91IGJlCi1mb3JjZWQgdG8gZG8gc28uICAKLVBlcnVzZSAocGVydXNlLCBtaW5kIHlvdS4gIEkgZG9uJ3Qgd2FudCB0byBzZWUgYW55IDxJPmJyb3dzaW5nPC9JPikgdGhlIHNvdXJjZSBoZXJlOiA8QQotaHJlZj0ibGlud2luLmMiPiA8ST4gbGlud2luLmMgCi0gPC9JPjwvQT4gCi08QlIgYWJjID0gImRlZiI+PEJSIGFiYyAgPSAgImRlZiI+Ci0KLQotPC9MST48TEk+PEI+IFJlZ3Jlc3Npb24gYW5kIFN0YW5kYXJkIERldmlhdGlvbjogPC9CPiAKLUEgbWF0aCBjbGFzcyB3cml0dGVuIGluIEphdmEgdXNpbmcgT2JqZWN0IE9yaWVudGVkIGRlc2lnbiBwcmluY2lwbGVzLiAgVGhlIG1haW4KLWFzcGVjdHMgb2YgdGhlIHByb2dyYW0gYXJlIGZvciBmaWd1cmluZyBvdXQgU3RhbmRhcmQgRGV2aWF0aW9uIGFuZCB0aGUKLVJlZ3Jlc3Npb24sIHdoZW4geW91IGlucHV0IGEgc2V0IG9mIHggYW5kIHkgdmFsdWVzLiAgUmVncmVzc2lvbiBjYWxjdWxhdGlvbnMKLWFyZSBvZnRlbiB1c2VkIGluIFNvZnR3YXJlIE1ldHJpY3MgdG8gdG8gaGVscCBpbiBlc3RpbWF0aW5nIGxlbmd0aCBvZiBjb2RlLCBhbmQKLXRpbWUgc3BlbnQgb24gdGhlIHByb2plY3QuPEJSPgotCi08QSBocmVmPSJSZWdyZXNzaW9uQ2FsYy5odG1sIiA+IAotPEk+IFJlZ3Jlc3Npb25DYWxjLmphdmEgPC9JPiA8L0E+ICBUaGlzIGlzIHRoZSBtYWluIGNsYXNzIHRoYXQgZG9lcyB0aGUKLWNhbGN1bGF0aW9ucy4gIEl0IGNhbGN1bGF0ZXMgQjEsIEIwLCBhbmQgcl4yLCB3aGljaCBhcmUgYWxsIHBhcmFtZXRlcnMgb2YKLVJlZ3Jlc3Npb24uCi08QlIgYWJjPSAiZGVmIj4KLTxBIGhyZWY9Ik1hdGhDbGFzcy5odG1sIiA+IAotPEk+IE1hdGhDbGFzcy5qYXZhIDwvST4gIDwvQT4gVGhpcyBpcyBzaW1wbHkgYSBzbWFsbCBjbGFzcyB3aGljaCBjYWxjdWxhdGVzIHRoZQotbWVhbiBhbmQgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBhIHZlY3RvciBvZiBudW1iZXJzLiAgVGhpcyBpcyB1c2VkIGJ5IHRoZQotUmVncmVzc2lvbkNhbGMgY2xhc3MgaW4gaXRzIGNhbGN1bGF0aW9ucy4KLTxCUiBhYmMgPSJkZWYiPgotPEEgaHJlZj0iUmVncmVzc2lvbi5odG1sIiA+IAotPEk+IFJlZ3Jlc3Npb24uamF2YSA8L0k+ICA8L0E+IFRoaXMgaXMgYmFzaWNhbGx5IHRoZSBtYWluIHJvdXRpbmUsIG9yIHdoZXJlIHRoZQotcHJvZ3JhbSBzdGFydHMuICBJdCBwdXRzIGFsbCBvZiB0aGUgaW5wdXQgZnJvbSB0aGUgY29tbWFuZCBsaW5lIGludG8gdHdvCi1zZXBhcmF0ZSB2ZWN0b3JzIGZvciB0aGUgeCBhbmQgeSB2YWx1ZXMuPEJSPjxCUj4KLQotQW4gZXhhbXBsZSBvZiB0aGUgdXNhZ2Ugb2YgdGhpcyBwcm9ncmFtIHdvdWxkIGJlOiAgPEJSPgotSWYgeW91IGhhZCBhIGhpc3Rvcnkgb2YgZGF0YSBvbiB5b3VyIGVzdGltYXRlZCBMaW5lcyBPZiBDb2RlIChMT0MpIHBlciBjbGFzcywKLWFzIHdlbGwgYXMgdGhlIGFjdHVhbCBMT0MgcGVyIGNsYXNzLCB5b3UgY291bGQgcHV0IHRoZXNlIGluIHRoZSBmb3JtdWxhIGFuZAotZmluZCBvdXQgdGhlIFJlZ3Jlc3Npb24gb2YgdGhlIGRhdGEgKG9yIGhvdyBmYXIgYXdheSBlYWNoIHBvaW50IGlzIGZyb20gdGhlCi1mdW5jdGlvbiBsaW5lLikgIAotCi1Zb3Ugd291bGQgaW5wdXQgdGhlIGRhdGEgZm9yIHRoZSBlc3RpbWF0ZWQgTE9DLCBzZXBhcmF0ZWQgYnkgYSBjb21tYSwgYW5kCi1mb2xsb3dlZCBieSB0aGUgYWN0dWFsIExPQy4gIFRoZSByZXN1bHQgd291bGQgYmUgdGhlIHJlZ3Jlc3Npb24gY2FsY3VsYXRpb24uCi08UFJFPgotJWphdmEgUmVncmVzc2lvbiAxMzAgNjUwIDk5IDE1MCAsIDE4NiA2OTkgMTMyIDI3MiAKLQotWCBEYXRhID0gWyAxMzAuMCA2NTAuMCA5OS4wIDE1MC4wIF0KLVkgRGF0YSA9IFsgMTg2LjAgNjk5LjAgMTMyLjAgMjcyLjAgXQotTiA9IDQKLUJldGEwID0gNzIuNjkwNTAzMDc4MDM2MQotQmV0YTEgPSAwLjk3MDEwNDk0NDMwMzA2NjcKLXJTcXVhcmVkID0gMjIxMi41MDQ2OTc2NzM2ODkKLTwvUFJFPgotCi08L0xJPjwvVUw+Ci0KLTxIUj4KLTxIMj4gS25vd2xlZGdlIDwvSDI+Ci08VUw+Ci08TEk+PEEgaHJlZj0idmltLmh0bWwiPiA8ST4gRXNwb3VzaW5nIG15IGxvdmUKLWZvciB2aW0hIDwvST48L0E+IHZpbSBqdXN0IHJvY2tzLCBva2F5LiAgUmVhbGx5LiAgSWYgSSBoYWQgdG8gY2hvb3NlIGJldHdlZW4sCi1saWtlLCBzZXgsIG9yIHVzaW5nIHZpbS0tbGV0J3MganVzdCBzYXkgSSdkIGJlIG9uZSBtYXN0ZXJmdWwtZWRpdGluZyBtb25rLiAKLTxCUj48QlI+Ci0KLQotPC9MST48TEk+Ci08QSBocmVmPSJNQlItTElMTy50eHQiPiAKLTxJPiBMb3N0IExJTE8/ICBSZWNvdmVyLjwvST4gIDwvQT4gSWYgeW91IGhhdmUgTGludXggaW5zdGFsbGVkIGluIGEgbXVsdGktYm9vdAotZW52aXJvbm1lbnQsIGFuZCB5b3Ugb3ZlcndyaXRlIHlvdXIgTUJSLCB5b3UgY2FuIGxvc2UgTElMTy4gIEkgcmVpbnN0YWxsZWQKLVdpbmRvd3MgKGhleSwgSSBuZWVkZWQgdG8gcGxheSBGaW5hbCBGYW50YXN5IFZJSUkhKSBhbmQgY291bGRuJ3QgYm9vdCBpbnRvCi1MaW51eC4gIEhlcmUncyBob3cgSSByZWNvdmVyZWQuCi08QlI+PEJSPgotCi0KLQotPC9MST48L1VMPjwvYm9keT4KLTxodG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvZW1wdHkueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvZW1wdHkueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2VtcHR5LnhtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbmxpbmVDb21tZW50cy5hZnRlckRlZmF1bHRGb3JtYXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW5saW5lQ29tbWVudHMuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTMyMmQ0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbmxpbmVDb21tZW50cy5hZnRlckRlZmF1bHRGb3JtYXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotPHJvb3Q+Ci0JPGRlc2M+V2FybWVkIGxlZWsgc2FsYWQ8L2Rlc2M+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPGRlc2M+V2FybWVkIGxlZWsgc2FsYWQ8L2Rlc2M+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPgotCTxwcmljZSB1bml0cz0idXNkIj42Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IC0tPjwvcHJpY2U+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiPgotCQk8bnVtYmVyIC8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPC9wcmljZT4KLQk8cHJpY2UgdW5pdHM9InVzZCI+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8L3ByaWNlPgotCTxwcmljZSB1bml0cz0idXNkIj4KLQkJPG51bWJlciAvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTwvcHJpY2U+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+PC9wcmljZT4KLQk8cHJpY2UgdW5pdHM9InVzZCIgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCBhbmQgZm9sbG93ZWQgYnkgdGV4dCAtLT4KLQkJZG9sbGFycwotCTwvcHJpY2U+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiIHVuaXRzPSJ1c2QiPgotCQk8bnVtYmVyIC8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JCTx1bml0IC8+Ci0JPC9wcmljZT4KLQk8cHJpY2U+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQkJPHVuaXQgLz4KLQk8L3ByaWNlPgotCTxwcmljZT4KLQkJPG51bWJlciAvPgotCQk8IS0tIGNvbW1lbnQgb24gYSBuZXcgbGluZSAtLT4KLQkJPHVuaXQgLz4KLQk8L3ByaWNlPgotCTxwcmljZT48IS0tIGlubGluZSBjb21tZW50IC0tPjwvcHJpY2U+Ci0JPHRoPgotCQk8Yj5GYWhyZW5oZWl0PCEtLSB0ZXN0aW5nIC0tPjwvYj4KLQk8L3RoPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLmFmdGVyU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRyc0Zvcm1hdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbmxpbmVDb21tZW50cy5hZnRlclNwbGl0TGluZXNTcGxpdE11bHRpQXR0cnNGb3JtYXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmRkYWY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2lubGluZUNvbW1lbnRzLmFmdGVyU3BsaXRMaW5lc1NwbGl0TXVsdGlBdHRyc0Zvcm1hdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi08cm9vdD4KLQk8ZGVzYz5XYXJtZWQgbGVlayBzYWxhZDwvZGVzYz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8ZGVzYz5XYXJtZWQgbGVlayBzYWxhZDwvZGVzYz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+PC9wcmljZT4KLQk8cHJpY2UgdW5pdHM9InVzZCI+Ci0JCTxudW1iZXIgLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT4KLQk8L3ByaWNlPgotCTxwcmljZSB1bml0cz0idXNkIj4KLQkJPG51bWJlciAvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCTwvcHJpY2U+Ci0JPHByaWNlIHVuaXRzPSJ1c2QiPgotCQk8bnVtYmVyIC8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JPC9wcmljZT4KLQk8cHJpY2UKLQkJdW5pdHM9InVzZCIKLQkJdW5pdHM9InVzZCI+Ci0JCTYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+Ci0JPC9wcmljZT4KLQk8cHJpY2UKLQkJdW5pdHM9InVzZCIKLQkJdW5pdHM9InVzZCI+Ci0JCTYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgYW5kIGZvbGxvd2VkIGJ5IHRleHQgLS0+Ci0JCWRvbGxhcnMKLQk8L3ByaWNlPgotCTxwcmljZQotCQl1bml0cz0idXNkIgotCQl1bml0cz0idXNkIj4KLQkJPG51bWJlciAvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPgotCQk8dW5pdCAvPgotCTwvcHJpY2U+Ci0JPHByaWNlPgotCQk8bnVtYmVyIC8+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci0JCTx1bml0IC8+Ci0JPC9wcmljZT4KLQk8cHJpY2U+Ci0JCTxudW1iZXIgLz4KLQkJPCEtLSBjb21tZW50IG9uIGEgbmV3IGxpbmUgLS0+Ci0JCTx1bml0IC8+Ci0JPC9wcmljZT4KLQk8cHJpY2U+PCEtLSBpbmxpbmUgY29tbWVudCAtLT48L3ByaWNlPgotCTx0aD4KLQkJPGI+RmFocmVuaGVpdDwhLS0gdGVzdGluZyAtLT48L2I+Ci0JPC90aD4KLTwvcm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbmxpbmVDb21tZW50cy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbmxpbmVDb21tZW50cy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYTExYmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW5saW5lQ29tbWVudHMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPHJvb3Q+PGRlc2M+V2FybWVkIGxlZWsgc2FsYWQ8L2Rlc2M+PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+Ci08ZGVzYz5XYXJtZWQgbGVlayBzYWxhZDwvZGVzYz4gICA8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+Ci08cHJpY2UgdW5pdHM9InVzZCI+Ni45NTwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGV4dCAtLT48L3ByaWNlPgotPHByaWNlIHVuaXRzPSJ1c2QiPjxudW1iZXIvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPjwvcHJpY2U+Ci08cHJpY2UgdW5pdHM9InVzZCI+PG51bWJlci8+ICAgPCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0YWcgLS0+PC9wcmljZT4KLTxwcmljZSB1bml0cz0idXNkIj4gICA8bnVtYmVyLz48IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRhZyAtLT48L3ByaWNlPgotPHByaWNlIHVuaXRzPSJ1c2QiIHVuaXRzPSJ1c2QiPjYuOTU8IS0tIGlubGluZSBjb21tZW50IGFmdGVyIHRleHQgLS0+PC9wcmljZT4KLTxwcmljZSB1bml0cz0idXNkIiB1bml0cz0idXNkIj42Ljk1PCEtLSBpbmxpbmUgY29tbWVudCBhZnRlciB0ZXh0IGFuZCBmb2xsb3dlZCBieSB0ZXh0IC0tPmRvbGxhcnM8L3ByaWNlPgotPHByaWNlIHVuaXRzPSJ1c2QiIHVuaXRzPSJ1c2QiPjxudW1iZXIvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPjx1bml0Lz48L3ByaWNlPgotPHByaWNlPjxudW1iZXIvPjwhLS0gaW5saW5lIGNvbW1lbnQgYWZ0ZXIgdGFnIC0tPjx1bml0Lz48L3ByaWNlPgotPHByaWNlPjxudW1iZXIvPgotPCEtLSBjb21tZW50IG9uIGEgbmV3IGxpbmUgLS0+PHVuaXQvPjwvcHJpY2U+Ci08cHJpY2U+PCEtLSBpbmxpbmUgY29tbWVudCAtLT48L3ByaWNlPgotPHRoPjxiPkZhaHJlbmhlaXQgPCEtLSB0ZXN0aW5nIC0tPjwvYj48L3RoPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2ludm9pY2UuYWZ0ZXJDbGVhbnVwSW5zZXJ0VGFncy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9pbnZvaWNlLmFmdGVyQ2xlYW51cEluc2VydFRhZ3MueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMTJjOTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2ludm9pY2UuYWZ0ZXJDbGVhbnVwSW5zZXJ0VGFncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIEludm9pY2UgUFVCTElDICJJbnZvaWNlSWQiICJJbnZvaWNlLmR0ZCIgPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0xMjM0NT4KLSAgICA8RGF0ZT4KLSAgICAgIDxNb250aD5KdWx5PC9Nb250aD4KLSAgICAgIDxEYXk+MTU8L0RheT4KLSAgICAgIDxZZWFyPjIwMDEKLSAgICA8L1llYXI+PC9EYXRlPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0vPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0gICAvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0vPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICAvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciBuYW1lPUNyYWlnICAgIHBob25lID0gICAgIDQxNi00NDgtNDQxNCAvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICBYNTczOSBuYW1lICAgIHBob25lID0gICAgIDQxNi00NDgtNDQxNCAvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICBYNTczOSBuYW1lICAgPSBDcmFpZyAgICBwaG9uZS8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyIG5hbWUgcGhvbmUvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICBYNTczOSBuYW1lPSJDcmFpZyBTYWx0ZXIiIHBob25lPTQxNi00NDgtNDQxND4KLSAgICAgIDxBZGRyZXNzPgotICAgICAgICA8c3RyZWV0MT5JQk08L3N0cmVldDE+Ci0gICAgICAgIDxzdHJlZXQyPjExNTAgRWdsaW50b24gQXZlIEVhc3Q8L3N0cmVldDI+Ci0gICAgICAgIDxjaXR5PlRvcm9udG88L2NpdHk+Ci0gICAgICAgIDxzdGF0ZT5PbnRhcmlvPC9zdGF0ZT4KLSAgICAgICAgPHppcD5NM0MgMUg3PC96aXA+Ci0gICAgICAgIDxjb3VudHJ5PkNhbmFkYQotICA8L2NvdW50cnk+PC9BZGRyZXNzPjwvQmlsbFRvPjwvSGVhZGVyPgotICA8SXRlbSBkaXNjb3VudD1wcm9tb3Rpb24gcHJpY2U9NTc+Ci0gICAgPGRlc2NyaXB0aW9uPkEgd2VkZGluZyByaW5nPC9kZXNjcmlwdGlvbj48L0l0ZW0+PC9JbnZvaWNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2ludm9pY2UuYWZ0ZXJDbGVhbnVwSW5zZXJ0VGFnc1F1b3RlQXR0cnMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW52b2ljZS5hZnRlckNsZWFudXBJbnNlcnRUYWdzUXVvdGVBdHRycy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1NzgxMmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW52b2ljZS5hZnRlckNsZWFudXBJbnNlcnRUYWdzUXVvdGVBdHRycy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIEludm9pY2UgUFVCTElDICJJbnZvaWNlSWQiICJJbnZvaWNlLmR0ZCIgPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0iMTIzNDUiPgotICAgIDxEYXRlPgotICAgICAgPE1vbnRoPkp1bHk8L01vbnRoPgotICAgICAgPERheT4xNTwvRGF5PgotICAgICAgPFllYXI+MjAwMQotICAgIDwvWWVhcj48L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJjdXN0TnVtYmVyIi8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSAgICJjdXN0TnVtYmVyIi8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSJjdXN0TnVtYmVyIi8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgICJjdXN0TnVtYmVyIi8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJjdXN0TnVtYmVyIiBuYW1lPSJDcmFpZyIgICAgcGhvbmUgPSAgICAgIjQxNi00NDgtNDQxNCIgLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgIlg1NzM5IiBuYW1lPSJuYW1lIiAgICBwaG9uZSA9ICAgICAiNDE2LTQ0OC00NDE0IiAvPgotICAgIDxCaWxsVG8gY3VzdE51bWJlciAgID0gICAiWDU3MzkiIG5hbWUgICA9ICJDcmFpZyIgICAgcGhvbmU9InBob25lIi8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSJjdXN0TnVtYmVyIiBuYW1lPSJuYW1lIiBwaG9uZT0icGhvbmUiLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgICA9ICAgIlg1NzM5IiBuYW1lPSJDcmFpZyBTYWx0ZXIiIHBob25lPSI0MTYtNDQ4LTQ0MTQiPgotICAgICAgPEFkZHJlc3M+Ci0gICAgICAgIDxzdHJlZXQxPklCTTwvc3RyZWV0MT4KLSAgICAgICAgPHN0cmVldDI+MTE1MCBFZ2xpbnRvbiBBdmUgRWFzdDwvc3RyZWV0Mj4KLSAgICAgICAgPGNpdHk+VG9yb250bzwvY2l0eT4KLSAgICAgICAgPHN0YXRlPk9udGFyaW88L3N0YXRlPgotICAgICAgICA8emlwPk0zQyAxSDc8L3ppcD4KLSAgICAgICAgPGNvdW50cnk+Q2FuYWRhCi0gIDwvY291bnRyeT48L0FkZHJlc3M+PC9CaWxsVG8+PC9IZWFkZXI+Ci0gIDxJdGVtIGRpc2NvdW50PSJwcm9tb3Rpb24iIHByaWNlPSI1NyI+Ci0gICAgPGRlc2NyaXB0aW9uPkEgd2VkZGluZyByaW5nPC9kZXNjcmlwdGlvbj48L0l0ZW0+PC9JbnZvaWNlPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2ludm9pY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW52b2ljZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4YTI2YjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvaW52b2ljZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIEludm9pY2UgUFVCTElDICJJbnZvaWNlSWQiICJJbnZvaWNlLmR0ZCIgPgotPEludm9pY2U+Ci0gIDxIZWFkZXIgaW52b2ljZU51bWJlcj0xMjM0NT4KLSAgICA8RGF0ZT4KLSAgICAgIDxNb250aD5KdWx5PC9Nb250aD4KLSAgICAgIDxEYXk+MTU8L0RheT4KLSAgICAgIDxZZWFyPjIwMDEKLSAgICA8L0RhdGU+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPS8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyPSAgIC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPS8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgIC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyIG5hbWU9Q3JhaWcgICAgcGhvbmUgPSAgICAgNDE2LTQ0OC00NDE0IC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgIFg1NzM5IG5hbWUgICAgcGhvbmUgPSAgICAgNDE2LTQ0OC00NDE0IC8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgIFg1NzM5IG5hbWUgICA9IENyYWlnICAgIHBob25lLz4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXIgbmFtZSBwaG9uZS8+Ci0gICAgPEJpbGxUbyBjdXN0TnVtYmVyICAgPSAgIFg1NzM5IG5hbWU9IkNyYWlnIFNhbHRlciIgcGhvbmU9NDE2LTQ0OC00NDE0PgotICAgICAgPEFkZHJlc3M+Ci0gICAgICAgIDxzdHJlZXQxPklCTTwvc3RyZWV0MT4KLSAgICAgICAgPHN0cmVldDI+MTE1MCBFZ2xpbnRvbiBBdmUgRWFzdDwvc3RyZWV0Mj4KLSAgICAgICAgPGNpdHk+VG9yb250bzwvY2l0eT4KLSAgICAgICAgPHN0YXRlPk9udGFyaW88L3N0YXRlPgotICAgICAgICA8emlwPk0zQyAxSDc8L3ppcD4KLSAgICAgICAgPGNvdW50cnk+Q2FuYWRhCi0gIDwvSGVhZGVyPgotICA8SXRlbSBkaXNjb3VudD1wcm9tb3Rpb24gcHJpY2U9NTc+Ci0gICAgPGRlc2NyaXB0aW9uPkEgd2VkZGluZyByaW5nClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvbG9naW4uYWZ0ZXJDbGVhbnVwLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2xvZ2luLmFmdGVyQ2xlYW51cC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlOTA2YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvbG9naW4uYWZ0ZXJDbGVhbnVwLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTxUSVRMRT5Mb2dpbjwvVElUTEU+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPC9IRUFEPg0KLTxCT0RZIGJnY29sb3I9IiNmZmZmY2MiPg0KLTxTQ1JJUFQ+DQotICAgICAgZnVuY3Rpb24gc3VibWl0Rm9ybShkZXN0KXsNCi0gICAgICAgICBkb2N1bWVudC5teUZvcm0uYWN0aW9uID0gZGVzdA0KLSAgICAgICAgIGRvY3VtZW50Lm15Rm9ybS5zdWJtaXQoKQ0KLSAgICAgIH0NCi0gICAgICA8L1NDUklQVD4NCi08Q0VOVEVSPg0KLTxIMT5EYXRhYmFzZSBDb25uZWN0aXZpdHk8L0gxPg0KLTxIUj4NCi08L0NFTlRFUj4NCi08UD5FbnRlciB0aGUgdXNlcm5hbWUgJmFtcDsgcGFzc3dvcmQgdG8gY29ubmVjdCB0byB0aGUgZGF0YWJhc2UuPEJSPg0KLVRoaXMgdXNlcm5hbWUgJmFtcDsgcGFzc3dvcmQgc2hvdWxkIGJlIHRoZSBvbmUgdXNlZCB3aGlsZSBjcmVhdGluZyB0aGUNCi1kYXRhYmFzZS48L1A+DQotPCUgaWYoc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoImVycm9yX21lc3NhZ2UiKSAhPSBudWxsKSB7ICU+DQotPFA+KiBJbmNvcnJlY3QgTG9naW4gb3IgUGFzc3dvcmQ8L1A+DQotPCUgIHNlc3Npb24ucmVtb3ZlQXR0cmlidXRlKCJlcnJvcl9tZXNzYWdlIik7DQotICAgICAgfSAgJT4NCi08Rk9STSBuYW1lPSJteUZvcm0iIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIuLi9Mb2dpbi9Mb2dvblNlcnZsZXQiPjxJTlBVVA0KLQl0eXBlPSJoaWRkZW4iIG5hbWU9ImNvbW1hbmQiDQotCXZhbHVlPSc8JT1zZXNzaW9uLmdldEF0dHJpYnV0ZSgiZmluYWxfcGFnZSIpICU+Jz4gPElOUFVUIHR5cGU9ImhpZGRlbiINCi0JbmFtZT0icHJldmlvdXNfcGFnZSIgdmFsdWU9IkxvZ2luL0xvZ2luLmpzcCI+IDxBDQotCWhyZWY9ImphdmFzY3JpcHQ6c3VibWl0Rm9ybSgnLi4vTG9naW4vTG9nb25TZXJ2bGV0JykiPk9LPC9BPg0KLTxUQUJMRSBib3JkZXI9IjAiPg0KLQk8VEJPRFk+DQotCQk8VFI+DQotCQkJPFREPjxGT05UIGNvbG9yPSIjOTkzMzMzIj4gdXNlcm5hbWU6IDwvRk9OVD48L1REPg0KLQkJCTxURD48SU5QVVQgbmFtZT0idXNlcklEIiB0eXBlPSJ0ZXh0IiBzaXplPSIzMCIgbWF4bGVuZ3RoPSI0MCI+PC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFREPjxGT05UIGNvbG9yPSIjOTkzMzMzIj4gcGFzc3dvcmQ6IDwvRk9OVD48L1REPg0KLQkJCTxURD48SU5QVVQgbmFtZT0icGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiBzaXplPSIzMCIgbWF4bGVuZ3RoPSI0MCI+PC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFREPjxGT05UIGNvbG9yPSIjOTkzMzMzIj4gZHJpdmVybmFtZTogPC9GT05UPjwvVEQ+DQotCQkJPFREPjxJTlBVVCBuYW1lPSJkcml2ZXIiIHR5cGU9InRleHQiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIg0KLQkJCQl2YWx1ZT0iQ09NLmlibS5kYjIuamRiYy5hcHAuREIyRHJpdmVyIj48L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEQ+PEZPTlQgY29sb3I9IiM5OTMzMzMiPiB1cmw6IDwvRk9OVD48L1REPg0KLQkJCTxURD48SU5QVVQgbmFtZT0idXJsIiB0eXBlPSJ0ZXh0IiBzaXplPSIzMCIgbWF4bGVuZ3RoPSI0MCINCi0JCQkJdmFsdWU9ImpkYmM6ZGIyOldTU0FNUExFIj48L1REPg0KLQkJPC9UUj4NCi0JPC9UQk9EWT4NCi08L1RBQkxFPg0KLTwvRk9STT4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2xvZ2luLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL2xvZ2luLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM5YTY3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9sb2dpbi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08VElUTEU+TG9naW48L1RJVExFPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTwvSEVBRD4NCi08Qk9EWSBiZ2NvbG9yPSIjZmZmZmNjIj4NCi08U0NSSVBUPg0KLSAgICAgIGZ1bmN0aW9uIHN1Ym1pdEZvcm0oZGVzdCl7DQotICAgICAgICAgZG9jdW1lbnQubXlGb3JtLmFjdGlvbiA9IGRlc3QNCi0gICAgICAgICBkb2N1bWVudC5teUZvcm0uc3VibWl0KCkNCi0gICAgICB9DQotICAgICAgPC9TQ1JJUFQ+DQotPENFTlRFUj4NCi08SDE+RGF0YWJhc2UgQ29ubmVjdGl2aXR5PC9IMT4NCi08SFI+DQotPC9DRU5URVI+DQotPFA+RW50ZXIgdGhlIHVzZXJuYW1lICZhbXA7IHBhc3N3b3JkIHRvIGNvbm5lY3QgdG8gdGhlIGRhdGFiYXNlLjxCUj4NCi1UaGlzIHVzZXJuYW1lICZhbXA7IHBhc3N3b3JkIHNob3VsZCBiZSB0aGUgb25lIHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhlIGRhdGFiYXNlLjwvUD4NCi08JSBpZihzZXNzaW9uLmdldEF0dHJpYnV0ZSgiZXJyb3JfbWVzc2FnZSIpICE9IG51bGwpIHsgJT4NCi08UD4qIEluY29ycmVjdCBMb2dpbiBvciBQYXNzd29yZDwvUD4NCi08JSAgc2Vzc2lvbi5yZW1vdmVBdHRyaWJ1dGUoImVycm9yX21lc3NhZ2UiKTsNCi0gICAgICB9ICAlPg0KLTxGT1JNIG5hbWU9Im15Rm9ybSIgbWV0aG9kPSJQT1NUIiBhY3Rpb249Ii4uL0xvZ2luL0xvZ29uU2VydmxldCI+PElOUFVUIHR5cGU9ImhpZGRlbiIgbmFtZT0iY29tbWFuZCIgdmFsdWU9JzwlPXNlc3Npb24uZ2V0QXR0cmlidXRlKCJmaW5hbF9wYWdlIikgJT4nPiA8SU5QVVQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwcmV2aW91c19wYWdlIiB2YWx1ZT0iTG9naW4vTG9naW4uanNwIj4gPEEgaHJlZj0iamF2YXNjcmlwdDpzdWJtaXRGb3JtKCcuLi9Mb2dpbi9Mb2dvblNlcnZsZXQnKSI+T0s8L0E+DQotPFRBQkxFIGJvcmRlcj0iMCI+DQotCTxUQk9EWT4NCi0JCTxUUj4NCi0JCQk8VEQ+PEZPTlQgY29sb3I9IiM5OTMzMzMiPiB1c2VybmFtZTogPC9GT05UPjwvVEQ+DQotCQkJPFREPjxJTlBVVCBuYW1lPSJ1c2VySUQiIHR5cGU9InRleHQiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIj48L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEQ+PEZPTlQgY29sb3I9IiM5OTMzMzMiPiBwYXNzd29yZDogPC9GT05UPjwvVEQ+DQotCQkJPFREPjxJTlBVVCBuYW1lPSJwYXNzd29yZCIgdHlwZT0icGFzc3dvcmQiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIj48L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEQ+PEZPTlQgY29sb3I9IiM5OTMzMzMiPiBkcml2ZXJuYW1lOiA8L0ZPTlQ+PC9URD4NCi0JCQk8VEQ+PElOUFVUIG5hbWU9ImRyaXZlciIgdHlwZT0idGV4dCIgc2l6ZT0iMzAiIG1heGxlbmd0aD0iNDAiIHZhbHVlPSJDT00uaWJtLmRiMi5qZGJjLmFwcC5EQjJEcml2ZXIiPjwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxURD48Rk9OVCBjb2xvcj0iIzk5MzMzMyI+IHVybDogPC9GT05UPjwvVEQ+DQotCQkJPFREPjxJTlBVVCBuYW1lPSJ1cmwiIHR5cGU9InRleHQiIHNpemU9IjMwIiBtYXhsZW5ndGg9IjQwIiB2YWx1ZT0iamRiYzpkYjI6V1NTQU1QTEUiPjwvVEQ+DQotCQk8L1RSPg0KLQk8L1RCT0RZPg0KLTwvVEFCTEU+DQotPC9GT1JNPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvb25lQ2hhci54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9vbmVDaGFyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmU2NWVmZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9vbmVDaGFyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9vbmVTcGFjZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9vbmVTcGFjZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MTllY2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvb25lU3BhY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyQ29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyQ29tcHJlc3NFbXB0eUVsZW1lbnRUYWdzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJhOWM3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlckNvbXByZXNzRW1wdHlFbGVtZW50VGFncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08WE1JIHhtaS52ZXJzaW9uPSIxLjAiIHRpbWVzdGFtcD0iVHVlIE5vdiAyOCAwODoxOToyMSBFU1QgMjAwMCI+Ci0KLQk8WE1JLmhlYWRlcj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlcj5YTUkgVG9vbGtpdDwvWE1JLmV4cG9ydGVyPgotCi0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiAvPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiAvPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSIgLz4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSIgLz4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSI+Ci0JCQkJCTEuMDUKLQkJCQk8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPgotCQkJCQkxLjA1Ci0JCQkJPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkubWV0YW1vZGVsIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiIC8+Ci0JPC9YTUkuaGVhZGVyPgotCi0JPFhNSS5jb250ZW50PgotCQk8TW9kZWxfTWFuYWdlbWVudC5QYWNrYWdlIHhtaS5pZD0iXzEiIHhtaS51dWlkPSJOYW1lOmVqYiI+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC5uYW1lPgotCQkJCWVqYgotCQkJPC9Gb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC52aXNpYmlsaXR5IHhtaS52YWx1ZT0icHVibGljIiAvPgotCQkJPFhNSS5leHRlbnNpb24geG1pLmV4dGVuZGVyPSJJWFQiIHhtaS5leHRlbmRlcklEPSIiPgotCQkJCTxpeHRzIHM9IklETCI+Ci0JCQkJCTxpeHR0diB0PSJ1dWlkIgotCQkJCQkJdj0iRENFOmQ4YTI1NjYwLTg4MjYtMTFlMS0wMDAwLTAwNWQ5ZTZhZGVjNDoxIiAvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlIj4KLQkJCQkJPGl4dHR2IHQ9InF1aWQiIHY9IjM3ODBFMjcyMDMyRCIgLz4KLQkJCQkJPGl4dHR2IHQ9ImlzX3VuaXQiIHY9IlRSVUUiIC8+Ci0JCQkJCTxpeHR0diB0PSJmaWxlX25hbWUiCi0JCQkJCQl2PSImIzM0OyRFQ0xJUFNFX1JFU09VUkNFU1xcZVRvb2xzIEVKQiBsaWJyYXJpZXNcXGVqYnNjaGVtYS5jYXQmIzM0OyIgLz4KLQkJCQkJPGl4dHR2IHQ9ImlzX2xvYWRlZCIgdj0iVFJVRSIgLz4KLQkJCQk8L2l4dHM+Ci0JCQkJPGl4dHMgcz0iUm9zZVBldGFsIj4KLQkJCQkJPGl4dHR2IHQ9ImNoYXJTZXQiIHY9IjAiIC8+Ci0JCQkJCTxpeHR0diB0PSJ2ZXJzaW9uIiB2PSI0MyIgLz4KLQkJCQkJPGl4dHR2IHQ9Il93cml0dGVuIiB2PSImIzM0O1Jvc2UgNi41LjkyMzIuMTAmIzM0OyIgLz4KLQkJCQk8L2l4dHM+Ci0JCQk8L1hNSS5leHRlbnNpb24+Ci0JCTwvTW9kZWxfTWFuYWdlbWVudC5QYWNrYWdlPgotCTwvWE1JLmNvbnRlbnQ+Ci0KLTwvWE1JPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlckRlZmF1bHRGb3JtYXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDY2YmEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyRGVmYXVsdEZvcm1hdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08WE1JIHhtaS52ZXJzaW9uPSIxLjAiIHRpbWVzdGFtcD0iVHVlIE5vdiAyOCAwODoxOToyMSBFU1QgMjAwMCI+Ci0KLQk8WE1JLmhlYWRlcj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlcj5YTUkgVG9vbGtpdDwvWE1JLmV4cG9ydGVyPgotCi0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSI+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkubWV0YW1vZGVsIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiIC8+Ci0JPC9YTUkuaGVhZGVyPgotCi0JPFhNSS5jb250ZW50PgotCQk8TW9kZWxfTWFuYWdlbWVudC5QYWNrYWdlIHhtaS5pZD0iXzEiIHhtaS51dWlkPSJOYW1lOmVqYiI+Ci0JCQk8Rm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC5uYW1lPmVqYjwvRm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC5uYW1lPgotCQkJPEZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQudmlzaWJpbGl0eSB4bWkudmFsdWU9InB1YmxpYyIgLz4KLQkJCTxYTUkuZXh0ZW5zaW9uIHhtaS5leHRlbmRlcj0iSVhUIiB4bWkuZXh0ZW5kZXJJRD0iIj4KLQkJCQk8aXh0cyBzPSJJREwiPgotCQkJCQk8aXh0dHYgdD0idXVpZCIgdj0iRENFOmQ4YTI1NjYwLTg4MjYtMTFlMS0wMDAwLTAwNWQ5ZTZhZGVjNDoxIiAvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlIj4KLQkJCQkJPGl4dHR2IHQ9InF1aWQiIHY9IjM3ODBFMjcyMDMyRCIgLz4KLQkJCQkJPGl4dHR2IHQ9ImlzX3VuaXQiIHY9IlRSVUUiIC8+Ci0JCQkJCTxpeHR0diB0PSJmaWxlX25hbWUiIHY9IiYjMzQ7JEVDTElQU0VfUkVTT1VSQ0VTXFxlVG9vbHMgRUpCIGxpYnJhcmllc1xcZWpic2NoZW1hLmNhdCYjMzQ7IiAvPgotCQkJCQk8aXh0dHYgdD0iaXNfbG9hZGVkIiB2PSJUUlVFIiAvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlUGV0YWwiPgotCQkJCQk8aXh0dHYgdD0iY2hhclNldCIgdj0iMCIgLz4KLQkJCQkJPGl4dHR2IHQ9InZlcnNpb24iIHY9IjQzIiAvPgotCQkJCQk8aXh0dHYgdD0iX3dyaXR0ZW4iIHY9IiYjMzQ7Um9zZSA2LjUuOTIzMi4xMCYjMzQ7IiAvPgotCQkJCTwvaXh0cz4KLQkJCTwvWE1JLmV4dGVuc2lvbj4KLQkJPC9Nb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2U+Ci0JPC9YTUkuY29udGVudD4KLQotPC9YTUk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJTcGxpdExpbmVzRm9ybWF0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLmFmdGVyU3BsaXRMaW5lc0Zvcm1hdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3MDhmNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJTcGxpdExpbmVzRm9ybWF0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxYTUkgeG1pLnZlcnNpb249IjEuMCIgdGltZXN0YW1wPSJUdWUgTm92IDI4IDA4OjE5OjIxIEVTVCAyMDAwIj4KLQotCTxYTUkuaGVhZGVyPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyPlhNSSBUb29sa2l0PC9YTUkuZXhwb3J0ZXI+Ci0KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24+MS4wNTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWU9IlVNTCIgeG1pLnZlcnNpb249IjEuMSI+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIj48L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lPSJVTUwiIHhtaS52ZXJzaW9uPSIxLjEiPgotCQkJCQkxLjA1Ci0JCQkJPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIj4KLQkJCQkJMS4wNQotCQkJCTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLm1ldGFtb2RlbCB4bWkubmFtZT0iVU1MIiB4bWkudmVyc2lvbj0iMS4xIiAvPgotCTwvWE1JLmhlYWRlcj4KLQotCTxYTUkuY29udGVudD4KLQkJPE1vZGVsX01hbmFnZW1lbnQuUGFja2FnZSB4bWkuaWQ9Il8xIiB4bWkudXVpZD0iTmFtZTplamIiPgotCQkJPEZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQubmFtZT4KLQkJCQllamIKLQkJCTwvRm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC5uYW1lPgotCQkJPEZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQudmlzaWJpbGl0eSB4bWkudmFsdWU9InB1YmxpYyIgLz4KLQkJCTxYTUkuZXh0ZW5zaW9uIHhtaS5leHRlbmRlcj0iSVhUIiB4bWkuZXh0ZW5kZXJJRD0iIj4KLQkJCQk8aXh0cyBzPSJJREwiPgotCQkJCQk8aXh0dHYgdD0idXVpZCIKLQkJCQkJCXY9IkRDRTpkOGEyNTY2MC04ODI2LTExZTEtMDAwMC0wMDVkOWU2YWRlYzQ6MSIgLz4KLQkJCQk8L2l4dHM+Ci0JCQkJPGl4dHMgcz0iUm9zZSI+Ci0JCQkJCTxpeHR0diB0PSJxdWlkIiB2PSIzNzgwRTI3MjAzMkQiIC8+Ci0JCQkJCTxpeHR0diB0PSJpc191bml0IiB2PSJUUlVFIiAvPgotCQkJCQk8aXh0dHYgdD0iZmlsZV9uYW1lIgotCQkJCQkJdj0iJiMzNDskRUNMSVBTRV9SRVNPVVJDRVNcXGVUb29scyBFSkIgbGlicmFyaWVzXFxlamJzY2hlbWEuY2F0JiMzNDsiIC8+Ci0JCQkJCTxpeHR0diB0PSJpc19sb2FkZWQiIHY9IlRSVUUiIC8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2VQZXRhbCI+Ci0JCQkJCTxpeHR0diB0PSJjaGFyU2V0IiB2PSIwIiAvPgotCQkJCQk8aXh0dHYgdD0idmVyc2lvbiIgdj0iNDMiIC8+Ci0JCQkJCTxpeHR0diB0PSJfd3JpdHRlbiIgdj0iJiMzNDtSb3NlIDYuNS45MjMyLjEwJiMzNDsiIC8+Ci0JCQkJPC9peHRzPgotCQkJPC9YTUkuZXh0ZW5zaW9uPgotCQk8L01vZGVsX01hbmFnZW1lbnQuUGFja2FnZT4KLQk8L1hNSS5jb250ZW50PgotCi08L1hNST4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlclNwbGl0TGluZXNTcGxpdE11bHRpQXR0cnNGb3JtYXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwuYWZ0ZXJTcGxpdExpbmVzU3BsaXRNdWx0aUF0dHJzRm9ybWF0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU1YmJmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zbWFsbC5hZnRlclNwbGl0TGluZXNTcGxpdE11bHRpQXR0cnNGb3JtYXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxYTUkKLQl4bWkudmVyc2lvbj0iMS4wIgotCXRpbWVzdGFtcD0iVHVlIE5vdiAyOCAwODoxOToyMSBFU1QgMjAwMCI+Ci0KLQk8WE1JLmhlYWRlcj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlcj5YTUkgVG9vbGtpdDwvWE1JLmV4cG9ydGVyPgotCi0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4xLjA1PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjEuMDU8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uCi0JCQkJCXhtaS5uYW1lPSJVTUwiCi0JCQkJCXhtaS52ZXJzaW9uPSIxLjEiPgotCQkJCTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24KLQkJCQkJeG1pLm5hbWU9IlVNTCIKLQkJCQkJeG1pLnZlcnNpb249IjEuMSI+Ci0JCQkJPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPgotCQkJPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCQk8WE1JLmV4cG9ydGVyVmVyc2lvbgotCQkJCQl4bWkubmFtZT0iVU1MIgotCQkJCQl4bWkudmVyc2lvbj0iMS4xIj4KLQkJCQkJMS4wNQotCQkJCTwvWE1JLmV4cG9ydGVyVmVyc2lvbj4KLQkJCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQkJPFhNSS5leHBvcnRlclZlcnNpb24KLQkJCQkJeG1pLm5hbWU9IlVNTCIKLQkJCQkJeG1pLnZlcnNpb249IjEuMSI+Ci0JCQkJCTEuMDUKLQkJCQk8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCQk8L1hNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5tZXRhbW9kZWwKLQkJCQl4bWkubmFtZT0iVU1MIgotCQkJCXhtaS52ZXJzaW9uPSIxLjEiIC8+Ci0JPC9YTUkuaGVhZGVyPgotCi0JPFhNSS5jb250ZW50PgotCQk8TW9kZWxfTWFuYWdlbWVudC5QYWNrYWdlCi0JCQl4bWkuaWQ9Il8xIgotCQkJeG1pLnV1aWQ9Ik5hbWU6ZWpiIj4KLQkJCTxGb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+Ci0JCQkJZWpiCi0JCQk8L0ZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQubmFtZT4KLQkJCTxGb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50LnZpc2liaWxpdHkgeG1pLnZhbHVlPSJwdWJsaWMiIC8+Ci0JCQk8WE1JLmV4dGVuc2lvbgotCQkJCXhtaS5leHRlbmRlcj0iSVhUIgotCQkJCXhtaS5leHRlbmRlcklEPSIiPgotCQkJCTxpeHRzIHM9IklETCI+Ci0JCQkJCTxpeHR0dgotCQkJCQkJdD0idXVpZCIKLQkJCQkJCXY9IkRDRTpkOGEyNTY2MC04ODI2LTExZTEtMDAwMC0wMDVkOWU2YWRlYzQ6MSIgLz4KLQkJCQk8L2l4dHM+Ci0JCQkJPGl4dHMgcz0iUm9zZSI+Ci0JCQkJCTxpeHR0dgotCQkJCQkJdD0icXVpZCIKLQkJCQkJCXY9IjM3ODBFMjcyMDMyRCIgLz4KLQkJCQkJPGl4dHR2Ci0JCQkJCQl0PSJpc191bml0IgotCQkJCQkJdj0iVFJVRSIgLz4KLQkJCQkJPGl4dHR2Ci0JCQkJCQl0PSJmaWxlX25hbWUiCi0JCQkJCQl2PSImIzM0OyRFQ0xJUFNFX1JFU09VUkNFU1xcZVRvb2xzIEVKQiBsaWJyYXJpZXNcXGVqYnNjaGVtYS5jYXQmIzM0OyIgLz4KLQkJCQkJPGl4dHR2Ci0JCQkJCQl0PSJpc19sb2FkZWQiCi0JCQkJCQl2PSJUUlVFIiAvPgotCQkJCTwvaXh0cz4KLQkJCQk8aXh0cyBzPSJSb3NlUGV0YWwiPgotCQkJCQk8aXh0dHYKLQkJCQkJCXQ9ImNoYXJTZXQiCi0JCQkJCQl2PSIwIiAvPgotCQkJCQk8aXh0dHYKLQkJCQkJCXQ9InZlcnNpb24iCi0JCQkJCQl2PSI0MyIgLz4KLQkJCQkJPGl4dHR2Ci0JCQkJCQl0PSJfd3JpdHRlbiIKLQkJCQkJCXY9IiYjMzQ7Um9zZSA2LjUuOTIzMi4xMCYjMzQ7IiAvPgotCQkJCTwvaXh0cz4KLQkJCTwvWE1JLmV4dGVuc2lvbj4KLQkJPC9Nb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2U+Ci0JPC9YTUkuY29udGVudD4KLQotPC9YTUk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc21hbGwueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mjk1ZDVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NtYWxsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxYTUkgeG1pLnZlcnNpb249IjEuMCIgdGltZXN0YW1wPSJUdWUgTm92IDI4IDA4OjE5OjIxIEVTVCAyMDAwIj4KLQotCTxYTUkuaGVhZGVyPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyPgotCQkJWE1JIFRvb2xraXQKLQkJCTwvWE1JLmV4cG9ydGVyPgotCQkJCi0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj4gICAgMS4wNSAgICA8L1hNSS5leHBvcnRlclZlcnNpb24+Ci0JCTwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5leHBvcnRlclZlcnNpb24+IDwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24+ICAgIDEuMDUgICAgPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uPiAgICAxLjA1ICAgIDwvWE1JLmV4cG9ydGVyVmVyc2lvbj4gPC9YTUkuZG9jdW1lbnRhdGlvbj4KLQkJPFhNSS5kb2N1bWVudGF0aW9uPgotCQkJPFhNSS5leHBvcnRlclZlcnNpb24geG1pLm5hbWUgPQkiVU1MIiB4bWkudmVyc2lvbiA9ICIxLjEiPjwvWE1JLmV4cG9ydGVyVmVyc2lvbj48L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZSA9CSJVTUwiIHhtaS52ZXJzaW9uID0gIjEuMSI+PC9YTUkuZXhwb3J0ZXJWZXJzaW9uPiA8L1hNSS5kb2N1bWVudGF0aW9uPgotCQk8WE1JLmRvY3VtZW50YXRpb24+Ci0JCQk8WE1JLmV4cG9ydGVyVmVyc2lvbiB4bWkubmFtZSA9CSJVTUwiIHhtaS52ZXJzaW9uID0gIjEuMSI+ICAgIDEuMDUgICAgPC9YTUkuZXhwb3J0ZXJWZXJzaW9uPjwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkuZG9jdW1lbnRhdGlvbj4KLQkJCTxYTUkuZXhwb3J0ZXJWZXJzaW9uIHhtaS5uYW1lID0JIlVNTCIgeG1pLnZlcnNpb24gPSAiMS4xIj4gICAgMS4wNSAgICA8L1hNSS5leHBvcnRlclZlcnNpb24+IDwvWE1JLmRvY3VtZW50YXRpb24+Ci0JCTxYTUkubWV0YW1vZGVsIHhtaS5uYW1lICAgID0JCQkiVU1MIiB4bWkudmVyc2lvbgotCQk9Ci0JCSIxLjEiIC8+Ci0JPC9YTUkuaGVhZGVyPgotCi0JPFhNSS5jb250ZW50PgotCQk8TW9kZWxfTWFuYWdlbWVudC5QYWNrYWdlCi0JCQl4bWkuaWQ9Il8xIgkJCQkJeG1pLnV1aWQ9Ik5hbWU6ZWpiIj4KLQkJCTxGb3VuZGF0aW9uLkNvcmUuTW9kZWxFbGVtZW50Lm5hbWU+ZWpiICAgIDwvRm91bmRhdGlvbi5Db3JlLk1vZGVsRWxlbWVudC5uYW1lPgotCQkJPEZvdW5kYXRpb24uQ29yZS5Nb2RlbEVsZW1lbnQudmlzaWJpbGl0eSB4bWkudmFsdWU9InB1YmxpYyIvPgotCQkJPFhNSS5leHRlbnNpb24geG1pLmV4dGVuZGVyPSJJWFQiIHhtaS5leHRlbmRlcklEPSIiPgotCQkJCTxpeHRzIHM9IklETCI+Ci0JCQkJCTxpeHR0diB0PSJ1dWlkIiB2PSJEQ0U6ZDhhMjU2NjAtODgyNi0xMWUxLTAwMDAtMDA1ZDllNmFkZWM0OjEiCi0JCQkJCS8+Ci0JCQkJPC9peHRzPgotCQkJCTxpeHRzIHM9IlJvc2UiPgotCQkJCQk8aXh0dHYKLQkJCQkJCXQ9InF1aWQiCi0JCQkJCQl2PSIzNzgwRTI3MjAzMkQiCi0JCQkJCQkvPgotCQkJCQk8aXh0dHYKLQkJCQkJdD0iaXNfdW5pdCIKLQkJCQkJdj0iVFJVRSIKLQkJCQkJLz4KLQkJCQkJPGl4dHR2IHQ9ImZpbGVfbmFtZSIKLQkJCQkJCXY9IiYjMzQ7JEVDTElQU0VfUkVTT1VSQ0VTXFxlVG9vbHMgRUpCIGxpYnJhcmllc1xcZWpic2NoZW1hLmNhdCYjMzQ7IgotCQkJCQkJCQkJLz4KLQkJCQkJPGl4dHR2IHQ9ImlzX2xvYWRlZCIgdj0iVFJVRSIgLz4KLQkJCQk8L2l4dHM+Ci0JCQkJPGl4dHMgcz0iUm9zZVBldGFsIj4KLQkJCQkJPGl4dHR2IHQ9ImNoYXJTZXQiIHY9IjAiIC8+Ci0JCQkJCQkJPGl4dHR2IHQ9InZlcnNpb24iIHY9IjQzIiAvPgotCTxpeHR0diB0PSJfd3JpdHRlbiIgdj0iJiMzNDtSb3NlIDYuNS45MjMyLjEwJiMzNDsiIC8+PC9peHRzPjwvWE1JLmV4dGVuc2lvbj4KLQkJPC9Nb2RlbF9NYW5hZ2VtZW50LlBhY2thZ2U+Ci0JPC9YTUkuY29udGVudD4KLQotPC9YTUk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3BhY2VzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NwYWNlcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxYWQyZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3BhY2VzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLSAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NwYWNlc0FuZENoYXJzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3NwYWNlc0FuZENoYXJzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWMwNGViNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zcGFjZXNBbmRDaGFycy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0gICBhYmMgICAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jbGVhbnVwZm9ybWF0L3Rlc3RmaWxlcy9zdWJzY3JpcHRpb24uYWZ0ZXJDbGVhbnVwLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3N1YnNjcmlwdGlvbi5hZnRlckNsZWFudXAuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzU3ZmQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3N1YnNjcmlwdGlvbi5hZnRlckNsZWFudXAuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLTwlQCBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7Y2hhcnNldD1VVEYtOCIgbGFuZ3VhZ2U9ImphdmEiJT4NCi08JUAgdGFnbGliIHVyaT0iL1dFQi1JTkYvYXBwLnRsZCIgcHJlZml4PSJhcHAiJT4NCi08JUAgdGFnbGliIHVyaT0iL1dFQi1JTkYvc3RydXRzLWJlYW4udGxkIiBwcmVmaXg9ImJlYW4iJT4NCi08JUAgdGFnbGliIHVyaT0iL1dFQi1JTkYvc3RydXRzLWh0bWwudGxkIiBwcmVmaXg9Imh0bWwiJT4NCi08JUAgdGFnbGliIHVyaT0iL1dFQi1JTkYvc3RydXRzLWxvZ2ljLnRsZCIgcHJlZml4PSJsb2dpYyIlPg0KLTxhcHA6Y2hlY2tMb2dvbiAvPg0KLQ0KLTwlLS0gSW4gcmVhbCBsaWZlLCB0aGVzZSB3b3VsZCBiZSBsb2FkZWQgZnJvbSBhIGRhdGFiYXNlIC0tJT4NCi08JQ0KLSAgamF2YS51dGlsLkFycmF5TGlzdCBsaXN0ID0gbmV3IGphdmEudXRpbC5BcnJheUxpc3QoKTsNCi0gIGxpc3QuYWRkKG5ldyBvcmcuYXBhY2hlLnN0cnV0cy51dGlsLkxhYmVsVmFsdWVCZWFuKCJJTUFQIFByb3RvY29sIiwgImltYXAiKSk7DQotICBsaXN0LmFkZChuZXcgb3JnLmFwYWNoZS5zdHJ1dHMudXRpbC5MYWJlbFZhbHVlQmVhbigiUE9QMyBQcm90b2NvbCIsICJwb3AzIikpOw0KLSAgcGFnZUNvbnRleHQuc2V0QXR0cmlidXRlKCJzZXJ2ZXJUeXBlcyIsIGxpc3QpOw0KLSU+DQotDQotPGh0bWw6aHRtbD4NCi08SEVBRD4NCi08bG9naWM6ZXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSIgcHJvcGVydHk9ImFjdGlvbiIgc2NvcGU9InJlcXVlc3QiDQotCXZhbHVlPSJDcmVhdGUiPg0KLQk8VElUTEU+PGJlYW46bWVzc2FnZSBrZXk9InN1YnNjcmlwdGlvbi50aXRsZS5jcmVhdGUiIC8+PC9USVRMRT4NCi08L2xvZ2ljOmVxdWFsPg0KLTxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIiBzY29wZT0icmVxdWVzdCINCi0JdmFsdWU9IkRlbGV0ZSI+DQotCTxUSVRMRT48YmVhbjptZXNzYWdlIGtleT0ic3Vic2NyaXB0aW9uLnRpdGxlLmRlbGV0ZSIgLz48L1RJVExFPg0KLTwvbG9naWM6ZXF1YWw+DQotPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iIHNjb3BlPSJyZXF1ZXN0Ig0KLQl2YWx1ZT0iRWRpdCI+DQotCTxUSVRMRT48YmVhbjptZXNzYWdlIGtleT0ic3Vic2NyaXB0aW9uLnRpdGxlLmVkaXQiIC8+PC9USVRMRT4NCi08L2xvZ2ljOmVxdWFsPg0KLTxodG1sOmJhc2UgLz4NCi08L0hFQUQ+DQotPEJPRFkgYmdjb2xvcj0id2hpdGUiPg0KLQ0KLTxodG1sOmVycm9ycyAvPg0KLQ0KLTxodG1sOmZvcm0gYWN0aW9uPSIvc2F2ZVN1YnNjcmlwdGlvbiIgZm9jdXM9Imhvc3QiPg0KLQk8aHRtbDpoaWRkZW4gcHJvcGVydHk9ImFjdGlvbiIgLz4NCi0JPFRBQkxFIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPg0KLQ0KLQkJPFRSPg0KLQkJCTxUSCBhbGlnbj0icmlnaHQiPjxiZWFuOm1lc3NhZ2Uga2V5PSJwcm9tcHQudXNlcm5hbWUiIC8+OjwvVEg+DQotCQkJPFREIGFsaWduPSJsZWZ0Ij48YmVhbjp3cml0ZSBuYW1lPSJ1c2VyIiBwcm9wZXJ0eT0idXNlcm5hbWUiDQotCQkJCWZpbHRlcj0idHJ1ZSIgLz48L1REPg0KLQkJPC9UUj4NCi0NCi0JCTxUUj4NCi0JCQk8VEggYWxpZ249InJpZ2h0Ij48YmVhbjptZXNzYWdlIGtleT0icHJvbXB0Lm1haWxIb3N0bmFtZSIgLz46PC9USD4NCi0JCQk8VEQgYWxpZ249ImxlZnQiPjxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIg0KLQkJCQlwcm9wZXJ0eT0iYWN0aW9uIiBzY29wZT0icmVxdWVzdCIgdmFsdWU9IkNyZWF0ZSI+DQotCQkJCTxodG1sOnRleHQgcHJvcGVydHk9Imhvc3QiIHNpemU9IjUwIiAvPg0KLQkJCTwvbG9naWM6ZXF1YWw+IDxsb2dpYzpub3RFcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIg0KLQkJCQlwcm9wZXJ0eT0iYWN0aW9uIiBzY29wZT0icmVxdWVzdCIgdmFsdWU9IkNyZWF0ZSI+DQotCQkJCTxodG1sOmhpZGRlbiBwcm9wZXJ0eT0iaG9zdCIgd3JpdGU9InRydWUiIC8+DQotCQkJPC9sb2dpYzpub3RFcXVhbD48L1REPg0KLQkJPC9UUj4NCi0NCi0JCTxUUj4NCi0JCQk8VEggYWxpZ249InJpZ2h0Ij48YmVhbjptZXNzYWdlIGtleT0icHJvbXB0Lm1haWxVc2VybmFtZSIgLz46PC9USD4NCi0JCQk8VEQgYWxpZ249ImxlZnQiPjxodG1sOnRleHQgcHJvcGVydHk9InVzZXJuYW1lIiBzaXplPSI1MCIgLz48L1REPg0KLQkJPC9UUj4NCi0NCi0JCTxUUj4NCi0JCQk8VEggYWxpZ249InJpZ2h0Ij48YmVhbjptZXNzYWdlIGtleT0icHJvbXB0Lm1haWxQYXNzd29yZCIgLz46PC9USD4NCi0JCQk8VEQgYWxpZ249ImxlZnQiPjxodG1sOnBhc3N3b3JkIHByb3BlcnR5PSJwYXNzd29yZCIgc2l6ZT0iNTAiIC8+PC9URD4NCi0JCTwvVFI+DQotDQotCQk8VFI+DQotCQkJPFRIIGFsaWduPSJyaWdodCI+PGJlYW46bWVzc2FnZSBrZXk9InByb21wdC5tYWlsU2VydmVyVHlwZSIgLz46PC9USD4NCi0JCQk8VEQgYWxpZ249ImxlZnQiPjxodG1sOnNlbGVjdCBwcm9wZXJ0eT0idHlwZSI+DQotCQkJCTxodG1sOm9wdGlvbnMgY29sbGVjdGlvbj0ic2VydmVyVHlwZXMiIHByb3BlcnR5PSJ2YWx1ZSINCi0JCQkJCWxhYmVsUHJvcGVydHk9ImxhYmVsIiAvPg0KLQkJCTwvaHRtbDpzZWxlY3Q+PC9URD4NCi0JCTwvVFI+DQotDQotCQk8VFI+DQotCQkJPFRIIGFsaWduPSJyaWdodCI+PGJlYW46bWVzc2FnZSBrZXk9InByb21wdC5hdXRvQ29ubmVjdCIgLz46PC9USD4NCi0JCQk8VEQgYWxpZ249ImxlZnQiPjxodG1sOmNoZWNrYm94IHByb3BlcnR5PSJhdXRvQ29ubmVjdCIgLz48L1REPg0KLQkJPC9UUj4NCi0NCi0JCTxUUj4NCi0JCQk8VEQgYWxpZ249InJpZ2h0Ij48bG9naWM6ZXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSINCi0JCQkJcHJvcGVydHk9ImFjdGlvbiIgc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJDcmVhdGUiPg0KLQkJCQk8aHRtbDpzdWJtaXQ+DQotCQkJCQk8YmVhbjptZXNzYWdlIGtleT0iYnV0dG9uLnNhdmUiIC8+DQotCQkJCTwvaHRtbDpzdWJtaXQ+DQotCQkJPC9sb2dpYzplcXVhbD4gPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iDQotCQkJCXNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iRGVsZXRlIj4NCi0JCQkJPGh0bWw6c3VibWl0Pg0KLQkJCQkJPGJlYW46bWVzc2FnZSBrZXk9ImJ1dHRvbi5jb25maXJtIiAvPg0KLQkJCQk8L2h0bWw6c3VibWl0Pg0KLQkJCTwvbG9naWM6ZXF1YWw+IDxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIg0KLQkJCQlzY29wZT0icmVxdWVzdCIgdmFsdWU9IkVkaXQiPg0KLQkJCQk8aHRtbDpzdWJtaXQ+DQotCQkJCQk8YmVhbjptZXNzYWdlIGtleT0iYnV0dG9uLnNhdmUiIC8+DQotCQkJCTwvaHRtbDpzdWJtaXQ+DQotCQkJPC9sb2dpYzplcXVhbD48L1REPg0KLQkJCTxURCBhbGlnbj0ibGVmdCI+PGxvZ2ljOm5vdEVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iDQotCQkJCXByb3BlcnR5PSJhY3Rpb24iIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iRGVsZXRlIj4NCi0JCQkJPGh0bWw6cmVzZXQ+DQotCQkJCQk8YmVhbjptZXNzYWdlIGtleT0iYnV0dG9uLnJlc2V0IiAvPg0KLQkJCQk8L2h0bWw6cmVzZXQ+DQotCQkJPC9sb2dpYzpub3RFcXVhbD4gJm5ic3A7IDxodG1sOmNhbmNlbD4NCi0JCQkJPGJlYW46bWVzc2FnZSBrZXk9ImJ1dHRvbi5jYW5jZWwiIC8+DQotCQkJPC9odG1sOmNhbmNlbD48L1REPg0KLQkJPC9UUj4NCi0NCi0JPC9UQUJMRT4NCi0NCi08L2h0bWw6Zm9ybT4NCi0NCi08L0JPRFk+DQotPC9odG1sOmh0bWw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3Vic2NyaXB0aW9uLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3N1YnNjcmlwdGlvbi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwYmYzZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvc3Vic2NyaXB0aW9uLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sO2NoYXJzZXQ9VVRGLTgiIGxhbmd1YWdlPSJqYXZhIiAlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9hcHAudGxkIiAgICBwcmVmaXg9ImFwcCIgJT4NCi08JUAgdGFnbGliIHVyaT0iL1dFQi1JTkYvc3RydXRzLWJlYW4udGxkIiBwcmVmaXg9ImJlYW4iICU+DQotPCVAIHRhZ2xpYiB1cmk9Ii9XRUItSU5GL3N0cnV0cy1odG1sLnRsZCIgcHJlZml4PSJodG1sIiAlPg0KLTwlQCB0YWdsaWIgdXJpPSIvV0VCLUlORi9zdHJ1dHMtbG9naWMudGxkIiBwcmVmaXg9ImxvZ2ljIiAlPg0KLTxhcHA6Y2hlY2tMb2dvbi8+DQotDQotPCUtLSBJbiByZWFsIGxpZmUsIHRoZXNlIHdvdWxkIGJlIGxvYWRlZCBmcm9tIGEgZGF0YWJhc2UgLS0lPg0KLTwlDQotICBqYXZhLnV0aWwuQXJyYXlMaXN0IGxpc3QgPSBuZXcgamF2YS51dGlsLkFycmF5TGlzdCgpOw0KLSAgbGlzdC5hZGQobmV3IG9yZy5hcGFjaGUuc3RydXRzLnV0aWwuTGFiZWxWYWx1ZUJlYW4oIklNQVAgUHJvdG9jb2wiLCAiaW1hcCIpKTsNCi0gIGxpc3QuYWRkKG5ldyBvcmcuYXBhY2hlLnN0cnV0cy51dGlsLkxhYmVsVmFsdWVCZWFuKCJQT1AzIFByb3RvY29sIiwgInBvcDMiKSk7DQotICBwYWdlQ29udGV4dC5zZXRBdHRyaWJ1dGUoInNlcnZlclR5cGVzIiwgbGlzdCk7DQotJT4NCi0NCi08aHRtbDpodG1sPg0KLTxoZWFkPg0KLTxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIg0KLSAgICAgICAgICAgIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iQ3JlYXRlIj4NCi0gIDx0aXRsZT48YmVhbjptZXNzYWdlIGtleT0ic3Vic2NyaXB0aW9uLnRpdGxlLmNyZWF0ZSIvPjwvdGl0bGU+DQotPC9sb2dpYzplcXVhbD4NCi08bG9naWM6ZXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSIgcHJvcGVydHk9ImFjdGlvbiINCi0gICAgICAgICAgICBzY29wZT0icmVxdWVzdCIgdmFsdWU9IkRlbGV0ZSI+DQotICA8dGl0bGU+PGJlYW46bWVzc2FnZSBrZXk9InN1YnNjcmlwdGlvbi50aXRsZS5kZWxldGUiLz48L3RpdGxlPg0KLTwvbG9naWM6ZXF1YWw+DQotPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iDQotICAgICAgICAgICAgc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJFZGl0Ij4NCi0gIDx0aXRsZT48YmVhbjptZXNzYWdlIGtleT0ic3Vic2NyaXB0aW9uLnRpdGxlLmVkaXQiLz48L3RpdGxlPg0KLTwvbG9naWM6ZXF1YWw+DQotPGh0bWw6YmFzZS8+DQotPC9oZWFkPg0KLTxib2R5IGJnY29sb3I9IndoaXRlIj4NCi0NCi08aHRtbDplcnJvcnMvPg0KLQ0KLTxodG1sOmZvcm0gYWN0aW9uPSIvc2F2ZVN1YnNjcmlwdGlvbiIgZm9jdXM9Imhvc3QiPg0KLTxodG1sOmhpZGRlbiBwcm9wZXJ0eT0iYWN0aW9uIi8+DQotPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiPg0KLQ0KLSAgPHRyPg0KLSAgICA8dGggYWxpZ249InJpZ2h0Ij4NCi0gICAgICA8YmVhbjptZXNzYWdlIGtleT0icHJvbXB0LnVzZXJuYW1lIi8+Og0KLSAgICA8L3RoPg0KLSAgICA8dGQgYWxpZ249ImxlZnQiPg0KLSAgICAgICAgPGJlYW46d3JpdGUgbmFtZT0idXNlciIgcHJvcGVydHk9InVzZXJuYW1lIiBmaWx0ZXI9InRydWUiLz4NCi0gICAgPC90ZD4NCi0gIDwvdHI+DQotDQotICA8dHI+DQotICAgIDx0aCBhbGlnbj0icmlnaHQiPg0KLSAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJwcm9tcHQubWFpbEhvc3RuYW1lIi8+Og0KLSAgICA8L3RoPg0KLSAgICA8dGQgYWxpZ249ImxlZnQiPg0KLSAgICAgIDxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIg0KLSAgICAgICAgICAgICAgICAgIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iQ3JlYXRlIj4NCi0gICAgICAgIDxodG1sOnRleHQgcHJvcGVydHk9Imhvc3QiIHNpemU9IjUwIi8+DQotICAgICAgPC9sb2dpYzplcXVhbD4NCi0gICAgICA8bG9naWM6bm90RXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSIgcHJvcGVydHk9ImFjdGlvbiINCi0gICAgICAgICAgICAgICAgICAgICBzY29wZT0icmVxdWVzdCIgdmFsdWU9IkNyZWF0ZSI+DQotICAgICAgICA8aHRtbDpoaWRkZW4gcHJvcGVydHk9Imhvc3QiIHdyaXRlPSJ0cnVlIi8+DQotICAgICAgPC9sb2dpYzpub3RFcXVhbD4NCi0gICAgPC90ZD4NCi0gIDwvdHI+DQotDQotICA8dHI+DQotICAgIDx0aCBhbGlnbj0icmlnaHQiPg0KLSAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJwcm9tcHQubWFpbFVzZXJuYW1lIi8+Og0KLSAgICA8L3RoPg0KLSAgICA8dGQgYWxpZ249ImxlZnQiPg0KLSAgICAgIDxodG1sOnRleHQgcHJvcGVydHk9InVzZXJuYW1lIiBzaXplPSI1MCIvPg0KLSAgICA8L3RkPg0KLSAgPC90cj4NCi0NCi0gIDx0cj4NCi0gICAgPHRoIGFsaWduPSJyaWdodCI+DQotICAgICAgPGJlYW46bWVzc2FnZSBrZXk9InByb21wdC5tYWlsUGFzc3dvcmQiLz46DQotICAgIDwvdGg+DQotICAgIDx0ZCBhbGlnbj0ibGVmdCI+DQotICAgICAgPGh0bWw6cGFzc3dvcmQgcHJvcGVydHk9InBhc3N3b3JkIiBzaXplPSI1MCIvPg0KLSAgICA8L3RkPg0KLSAgPC90cj4NCi0NCi0gIDx0cj4NCi0gICAgPHRoIGFsaWduPSJyaWdodCI+DQotICAgICAgPGJlYW46bWVzc2FnZSBrZXk9InByb21wdC5tYWlsU2VydmVyVHlwZSIvPjoNCi0gICAgPC90aD4NCi0gICAgPHRkIGFsaWduPSJsZWZ0Ij4NCi0gICAgICA8aHRtbDpzZWxlY3QgcHJvcGVydHk9InR5cGUiPg0KLSAgICAgICAgPGh0bWw6b3B0aW9ucyBjb2xsZWN0aW9uPSJzZXJ2ZXJUeXBlcyIgcHJvcGVydHk9InZhbHVlIg0KLSAgICAgICAgICAgICAgICAgICBsYWJlbFByb3BlcnR5PSJsYWJlbCIvPg0KLSAgICAgIDwvaHRtbDpzZWxlY3Q+DQotICAgIDwvdGQ+DQotICA8L3RyPg0KLQ0KLSAgPHRyPg0KLSAgICA8dGggYWxpZ249InJpZ2h0Ij4NCi0gICAgICA8YmVhbjptZXNzYWdlIGtleT0icHJvbXB0LmF1dG9Db25uZWN0Ii8+Og0KLSAgICA8L3RoPg0KLSAgICA8dGQgYWxpZ249ImxlZnQiPg0KLSAgICAgIDxodG1sOmNoZWNrYm94IHByb3BlcnR5PSJhdXRvQ29ubmVjdCIvPg0KLSAgICA8L3RkPg0KLSAgPC90cj4NCi0NCi0gIDx0cj4NCi0gICAgPHRkIGFsaWduPSJyaWdodCI+DQotICAgICAgPGxvZ2ljOmVxdWFsIG5hbWU9InN1YnNjcmlwdGlvbkZvcm0iIHByb3BlcnR5PSJhY3Rpb24iDQotICAgICAgICAgICAgICAgICAgc2NvcGU9InJlcXVlc3QiIHZhbHVlPSJDcmVhdGUiPg0KLSAgICAgICAgPGh0bWw6c3VibWl0Pg0KLSAgICAgICAgICA8YmVhbjptZXNzYWdlIGtleT0iYnV0dG9uLnNhdmUiLz4NCi0gICAgICAgIDwvaHRtbDpzdWJtaXQ+DQotICAgICAgPC9sb2dpYzplcXVhbD4NCi0gICAgICA8bG9naWM6ZXF1YWwgbmFtZT0ic3Vic2NyaXB0aW9uRm9ybSIgcHJvcGVydHk9ImFjdGlvbiINCi0gICAgICAgICAgICAgICAgICBzY29wZT0icmVxdWVzdCIgdmFsdWU9IkRlbGV0ZSI+DQotICAgICAgICA8aHRtbDpzdWJtaXQ+DQotICAgICAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24uY29uZmlybSIvPg0KLSAgICAgICAgPC9odG1sOnN1Ym1pdD4NCi0gICAgICA8L2xvZ2ljOmVxdWFsPg0KLSAgICAgIDxsb2dpYzplcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIg0KLSAgICAgICAgICAgICAgICAgIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iRWRpdCI+DQotICAgICAgICA8aHRtbDpzdWJtaXQ+DQotICAgICAgICAgIDxiZWFuOm1lc3NhZ2Uga2V5PSJidXR0b24uc2F2ZSIvPg0KLSAgICAgICAgPC9odG1sOnN1Ym1pdD4NCi0gICAgICA8L2xvZ2ljOmVxdWFsPg0KLSAgICA8L3RkPg0KLSAgICA8dGQgYWxpZ249ImxlZnQiPg0KLSAgICAgIDxsb2dpYzpub3RFcXVhbCBuYW1lPSJzdWJzY3JpcHRpb25Gb3JtIiBwcm9wZXJ0eT0iYWN0aW9uIg0KLSAgICAgICAgICAgICAgICAgICAgIHNjb3BlPSJyZXF1ZXN0IiB2YWx1ZT0iRGVsZXRlIj4NCi0gICAgICAgIDxodG1sOnJlc2V0Pg0KLSAgICAgICAgICA8YmVhbjptZXNzYWdlIGtleT0iYnV0dG9uLnJlc2V0Ii8+DQotICAgICAgICA8L2h0bWw6cmVzZXQ+DQotICAgICAgPC9sb2dpYzpub3RFcXVhbD4NCi0gICAgICAmbmJzcDsNCi0gICAgICA8aHRtbDpjYW5jZWw+DQotICAgICAgICA8YmVhbjptZXNzYWdlIGtleT0iYnV0dG9uLmNhbmNlbCIvPg0KLSAgICAgIDwvaHRtbDpjYW5jZWw+DQotICAgIDwvdGQ+DQotICA8L3RyPg0KLQ0KLTwvdGFibGU+DQotDQotPC9odG1sOmZvcm0+DQotDQotPC9ib2R5Pg0KLTwvaHRtbDpodG1sPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3RhZ09wZW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFnT3Blbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1ZmE3ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFnT3Blbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFnT3BlblRhZ0Nsb3NlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3RhZ09wZW5UYWdDbG9zZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ODdlNDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFnT3BlblRhZ0Nsb3NlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFncy5hZnRlckRlZmF1bHRGb3JtYXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFncy5hZnRlckRlZmF1bHRGb3JtYXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjkyMzVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3RhZ3MuYWZ0ZXJEZWZhdWx0Rm9ybWF0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTx0YWc+Ci0JPHRhZz48L3RhZz4KLQk8dGFnPjwvdGFnPgotCTx0YWc+PC90YWc+Ci0JPHRhZz48L3RhZz4KLQk8dGFnPgotCQk8dGFnPjwvdGFnPgotCQk8dGFnPjwvdGFnPgotCQk8dGFnPjwvdGFnPgotCQk8dGFnPjwvdGFnPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NsZWFudXBmb3JtYXQvdGVzdGZpbGVzL3RhZ3MueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFncy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmYTk0OWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY2xlYW51cGZvcm1hdC90ZXN0ZmlsZXMvdGFncy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08dGFnPgotPHRhZz48L3RhZz4KLTx0YWc+PC90YWcgPgotPHRhZz4gPC90YWc+Ci08dGFnPiA8L3RhZyA+Ci08dGFnID4KLTx0YWcgPjwvdGFnPgotPHRhZyA+PC90YWcgPgotPHRhZyA+IDwvdGFnPgotPHRhZyA+IDwvdGFnID4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jb250ZW50dHlwZWlkZW50aWZpZXIvY29udGVudHNwZWNpZmljL051bGxTdHJlYW0uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnR0eXBlaWRlbnRpZmllci9jb250ZW50c3BlY2lmaWMvTnVsbFN0cmVhbS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzE2ZjgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnR0eXBlaWRlbnRpZmllci9jb250ZW50c3BlY2lmaWMvTnVsbFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jb250ZW50dHlwZWlkZW50aWZpZXIuY29udGVudHNwZWNpZmljOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi0KLXB1YmxpYyBjbGFzcyBOdWxsU3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0gewotCi0JLyogKG5vbi1KYXZhZG9jKQotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZWFkKCkKLQkgKi8KLQlwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gLTE7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9UZXN0Q29udGVudFR5cGVIYW5kbGVycy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvY29udGVudHR5cGVpZGVudGlmaWVyL2NvbnRlbnRzcGVjaWZpYy9UZXN0Q29udGVudFR5cGVIYW5kbGVycy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmU0ODc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnR0eXBlaWRlbnRpZmllci9jb250ZW50c3BlY2lmaWMvVGVzdENvbnRlbnRUeXBlSGFuZGxlcnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5jb250ZW50dHlwZWlkZW50aWZpZXIuY29udGVudHNwZWNpZmljOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci0KLS8qKgotICogVGhpcyBjbGFzcyBpcyB0byB0ZXN0IHZlcnkgYmFzaWNzIG9mIGNvbnRlbnQgdHlwZSBoYW5kbGVycy4KLSAqIAotICogSXQgdGVzdHMgdGhhdAotICogCi0gKiBCVlQ6IGNvbnRlbnQgcmVnaXN0cnkgY2FuIGJlIC8gaXMgY3JlYXRlZCA1IGV4cGVjdGVkIGNvbnRlbnRUeXBlSWRlbnRpZmllcnMKLSAqIGNhbiBiZSBjcmVhdGVkL2ZvdW5kIGJhc2VkIG9uIGlkLiB0aGVyZSBpcyBvbmUgYW5kIG9ubHkgb25lIGRlZmF1bHQgY29udGVudAotICogdHlwZSBoYW5kbGVyLgotICogCi0gKiAKLSAqIAotICogIAotICovCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRUeXBlSGFuZGxlcnMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RDb250ZW50VHlwZUhhbmRsZXJzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgc3RhdGljIElDb250ZW50VHlwZU1hbmFnZXIgZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpIHsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpOwotCQlyZXR1cm4gcmVnaXN0cnk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0aW9uKCkgewotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmVyIHJlZ2lzdHJ5IG11c3QgZXhpc3QiLCByZWdpc3RyeSAhPSBudWxsKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlJQ29udGVudFR5cGVbXSBhbGxUeXBlcyA9IHJlZ2lzdHJ5LmdldEFsbENvbnRlbnRUeXBlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbihhbGxUeXBlc1tpXSk7Ci0KLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxFeGlzdHMoKSB7Ci0JCVN0cmluZyBpZCA9IENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9TU0VYTUw7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0Q29udGVudFR5cGUoaWQpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciAiICsgaWQgKyAiIGRvZXMgbm90IGhhdmUgY3VzdG9tIFhNTCB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUxFeGlzdHMoKSB7Ci0JCVN0cmluZyBpZCA9IENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTDsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIgPSByZWdpc3RyeS5nZXRDb250ZW50VHlwZShpZCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmaWVyICIgKyBpZCArICIgZG9lcyBub3QgaGF2ZSBIVE1MIHR5cGUgIiwgaWRlbnRpZmllciAhPSBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRXhpc3RzKCkgewotCQlTdHJpbmcgaWQgPSBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllciA9IHJlZ2lzdHJ5LmdldENvbnRlbnRUeXBlKGlkKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZpZXIgIiArIGlkICsgIiBkb2VzIG5vdCBoYXZlIEpTUCB0eXBlICIsIGlkZW50aWZpZXIgIT0gbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU0V4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUzsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIgPSByZWdpc3RyeS5nZXRDb250ZW50VHlwZShpZCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmaWVyICIgKyBpZCArICIgZG9lcyBub3QgaGF2ZSBDU1MgdHlwZSAiLCBpZGVudGlmaWVyICE9IG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REVERFeGlzdHMoKSB7Ci0JCVN0cmluZyBpZCA9ICJvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuZHRkc291cmNlIjsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIgPSByZWdpc3RyeS5nZXRDb250ZW50VHlwZShpZCk7Ci0JCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpZGVudGlmaWVyICIgKyBpZCArICIgZG9lcyBub3QgaGF2ZSBEVEQgdHlwZSAiLCBpZGVudGlmaWVyICE9IG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxFeGlzdHNCeUZpbGVFeHRlbnNpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC54bWwiOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllciA9IHJlZ2lzdHJ5LmdldERlc2NyaXB0aW9uRm9yKG5ldyBOdWxsU3RyZWFtKCksIGZpbGVuYW1lLCBJQ29udGVudERlc2NyaXB0aW9uLkFMTCkuZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZpZXIgZm9yICIgKyBmaWxlbmFtZSArICIgZG9lcyBub3QgaGF2ZSBYTUwgdHlwZSAiLCBpZGVudGlmaWVyICE9IG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MRXhpc3RzQnlGaWxlRXh0ZW5zaW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3QuaHRtbCI7Ci0JCUlDb250ZW50VHlwZU1hbmFnZXIgcmVnaXN0cnkgPSBnZXRDb250ZW50VHlwZVJlZ2lzdHJ5KCk7Ci0JCUlDb250ZW50VHlwZSBpZGVudGlmaWVyID0gcmVnaXN0cnkuZ2V0RGVzY3JpcHRpb25Gb3IobmV3IE51bGxTdHJlYW0oKSwgZmlsZW5hbWUsIElDb250ZW50RGVzY3JpcHRpb24uQUxMKS5nZXRDb250ZW50VHlwZSgpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmllciBmb3IgIiArIGZpbGVuYW1lICsgIiBkb2VzIG5vdCBoYXZlIEhUTUwgdHlwZSAiLCBpZGVudGlmaWVyICE9IG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BFeGlzdHNCeUZpbGVFeHRlbnNpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC5qc3AiOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllciA9IHJlZ2lzdHJ5LmdldERlc2NyaXB0aW9uRm9yKG5ldyBOdWxsU3RyZWFtKCksIGZpbGVuYW1lLCBJQ29udGVudERlc2NyaXB0aW9uLkFMTCkuZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZpZXIgZm9yICIgKyBmaWxlbmFtZSArICIgZG9lcyBub3QgaGF2ZSBKU1AgdHlwZSAiLCBpZGVudGlmaWVyICE9IG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDU1NFeGlzdHNCeUZpbGVFeHRlbnNpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC5jc3MiOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllciA9IHJlZ2lzdHJ5LmdldERlc2NyaXB0aW9uRm9yKG5ldyBOdWxsU3RyZWFtKCksIGZpbGVuYW1lLCBJQ29udGVudERlc2NyaXB0aW9uLkFMTCkuZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZpZXIgZm9yICIgKyBmaWxlbmFtZSArICIgZG9lcyBub3QgaGF2ZSBDU1MgdHlwZSAiLCBpZGVudGlmaWVyICE9IG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REVERFeGlzdHNCeUZpbGVFeHRlbnNpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC5kdGQiOwotCQlJQ29udGVudFR5cGVNYW5hZ2VyIHJlZ2lzdHJ5ID0gZ2V0Q29udGVudFR5cGVSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllciA9IHJlZ2lzdHJ5LmdldERlc2NyaXB0aW9uRm9yKG5ldyBOdWxsU3RyZWFtKCksIGZpbGVuYW1lLCBJQ29udGVudERlc2NyaXB0aW9uLkFMTCkuZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCB0eXBlIGlkZW50aWZpZXIgZm9yICIgKyBmaWxlbmFtZSArICIgZG9lcyBub3QgaGF2ZSBEVEQgdHlwZSAiLCBpZGVudGlmaWVyICE9IG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNdWx0aXBsZURlZmluaXRpb25zKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGlkID0gQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUzsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3QuY3NzIjsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IGdldENvbnRlbnRUeXBlUmVnaXN0cnkoKTsKLQkJSUNvbnRlbnRUeXBlIGlkZW50aWZpZXIxID0gcmVnaXN0cnkuZ2V0Q29udGVudFR5cGUoaWQpOwotCQlJQ29udGVudFR5cGUgaWRlbnRpZmllcjIgPSByZWdpc3RyeS5nZXREZXNjcmlwdGlvbkZvcihuZXcgTnVsbFN0cmVhbSgpLCBmaWxlbmFtZSwgSUNvbnRlbnREZXNjcmlwdGlvbi5BTEwpLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydFRydWUoIm11bGl0cGxlIGNvbnRlbnQgdHlwZSBpZGVudGlmaWVycyBuZWVkIHRvIGJlIGVxdWFsIChidXQgbm90IHNhbWUgaW5zdGFuY2UpICIsIGlkZW50aWZpZXIxLmVxdWFscyhpZGVudGlmaWVyMikpOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnR0eXBlaWRlbnRpZmllci9jb250ZW50c3BlY2lmaWMvVGVzdE1vZGVsSGFuZGxlcnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2NvbnRlbnR0eXBlaWRlbnRpZmllci9jb250ZW50c3BlY2lmaWMvVGVzdE1vZGVsSGFuZGxlcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDIwZmZiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9jb250ZW50dHlwZWlkZW50aWZpZXIvY29udGVudHNwZWNpZmljL1Rlc3RNb2RlbEhhbmRsZXJzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuY29udGVudHR5cGVpZGVudGlmaWVyLmNvbnRlbnRzcGVjaWZpYzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsubW9kZWxoYW5kbGVyLklNb2RlbEhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5Nb2RlbEhhbmRsZXJSZWdpc3RyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLQotcHVibGljIGNsYXNzIFRlc3RNb2RlbEhhbmRsZXJzIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIE1vZGVsSGFuZGxlclJlZ2lzdHJ5IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCkgewotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IE1vZGVsSGFuZGxlclJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7Ci0JCXJldHVybiByZWdpc3RyeTsKLQl9Ci0KLQlwdWJsaWMgVGVzdE1vZGVsSGFuZGxlcnMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0aW9uKCkgewotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgbXVzdCBleGlzdCIsIHJlZ2lzdHJ5ICE9IG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDU1NFeGlzdHMoKSB7Ci0JCVN0cmluZyBpZCA9IENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1M7ICAKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSByZWdpc3RyeS5nZXRIYW5kbGVyRm9yQ29udGVudFR5cGVJZChpZCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgZG9lcyBub3QgaGF2ZSBDU1MgdHlwZSAiLCBoYW5kbGVyICE9IG51bGwgJiYgaGFuZGxlci5nZXRBc3NvY2lhdGVkQ29udGVudFR5cGVJZCgpLmVxdWFscyhpZCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDU1NFeGlzdHNGcm9tRmlsZW5hbWUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC5jc3MiOwotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3IoZmlsZW5hbWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgQ1NTIHR5cGUgIiwgaGFuZGxlciAhPSBudWxsICYmIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKS5lcXVhbHMoQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUykpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REVERFeGlzdHMoKSB7Ci0JCVN0cmluZyBpZCA9ICJvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuZHRkc291cmNlIjsgCi0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0SGFuZGxlckZvckNvbnRlbnRUeXBlSWQoaWQpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgRFREIHR5cGUgIiwgaGFuZGxlciAhPSBudWxsICYmIGhhbmRsZXIuZ2V0QXNzb2NpYXRlZENvbnRlbnRUeXBlSWQoKS5lcXVhbHMoaWQpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RFRERXhpc3RzRnJvbUZpbGVuYW1lKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gInRlc3QuZHRkIjsKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSByZWdpc3RyeS5nZXRIYW5kbGVyRm9yKGZpbGVuYW1lLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFuZGxlciByZWdpc3RyeSBkb2VzIG5vdCBoYXZlIERURCB0eXBlICIsIGhhbmRsZXIgIT0gbnVsbCAmJiBoYW5kbGVyLmdldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKCkuZXF1YWxzKCJvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuZHRkc291cmNlIikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MRXhpc3RzKCkgewotCQlTdHJpbmcgaWQgPSBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUw7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0SGFuZGxlckZvckNvbnRlbnRUeXBlSWQoaWQpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBoYW5kbGVyIHJlZ2lzdHJ5IGRvZXMgbm90IGhhdmUgSFRNTCB0eXBlICIsIGhhbmRsZXIgIT0gbnVsbCAmJiBoYW5kbGVyLmdldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKCkuZXF1YWxzKGlkKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEhUTUxFeGlzdHNGcm9tRmlsZW5hbWUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC5odG1sIjsKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSByZWdpc3RyeS5nZXRIYW5kbGVyRm9yKGZpbGVuYW1lLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFuZGxlciByZWdpc3RyeSBkb2VzIG5vdCBoYXZlIEhUTUwgdHlwZSAiLCBoYW5kbGVyICE9IG51bGwgJiYgaGFuZGxlci5nZXRBc3NvY2lhdGVkQ29udGVudFR5cGVJZCgpLmVxdWFscyhDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRXhpc3RzKCkgewotCQlTdHJpbmcgaWQgPSBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQOwotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3JDb250ZW50VHlwZUlkKGlkKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgaGFuZGxlciByZWdpc3RyeSBkb2VzIG5vdCBoYXZlIEpTUCB0eXBlICIsIGhhbmRsZXIgIT0gbnVsbCAmJiBoYW5kbGVyLmdldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKCkuZXF1YWxzKGlkKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUEV4aXN0c0Zyb21GaWxlbmFtZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0LmpzcCI7Ci0JCU1vZGVsSGFuZGxlclJlZ2lzdHJ5IHJlZ2lzdHJ5ID0gZ2V0TW9kZWxIYW5kbGVyUmVnaXN0cnkoKTsKLQkJSU1vZGVsSGFuZGxlciBoYW5kbGVyID0gcmVnaXN0cnkuZ2V0SGFuZGxlckZvcihmaWxlbmFtZSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgZG9lcyBub3QgaGF2ZSBKU1AgdHlwZSAiLCBoYW5kbGVyICE9IG51bGwgJiYgaGFuZGxlci5nZXRBc3NvY2lhdGVkQ29udGVudFR5cGVJZCgpLmVxdWFscyhDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTEV4aXN0cygpIHsKLQkJU3RyaW5nIGlkID0gQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTDsKLQkJTW9kZWxIYW5kbGVyUmVnaXN0cnkgcmVnaXN0cnkgPSBnZXRNb2RlbEhhbmRsZXJSZWdpc3RyeSgpOwotCQlJTW9kZWxIYW5kbGVyIGhhbmRsZXIgPSByZWdpc3RyeS5nZXRIYW5kbGVyRm9yQ29udGVudFR5cGVJZChpZCk7Ci0JCWFzc2VydEVxdWFscygibW9kZWwgaGFuZGxlciByZWdpc3RyeSBkb2VzIG5vdCBoYXZlIFhNTCB0eXBlICIsIGlkLCBoYW5kbGVyLmdldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxFeGlzdHNGcm9tRmlsZW5hbWUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidGVzdC54bWwiOwotCQlNb2RlbEhhbmRsZXJSZWdpc3RyeSByZWdpc3RyeSA9IGdldE1vZGVsSGFuZGxlclJlZ2lzdHJ5KCk7Ci0JCUlNb2RlbEhhbmRsZXIgaGFuZGxlciA9IHJlZ2lzdHJ5LmdldEhhbmRsZXJGb3IoZmlsZW5hbWUsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoIm1vZGVsIGhhbmRsZXIgcmVnaXN0cnkgZG9lcyBub3QgaGF2ZSBYTUwgdHlwZSAiLCBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBoYW5kbGVyLmdldEFzc29jaWF0ZWRDb250ZW50VHlwZUlkKCkpOwotCX0KLQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvZG9tL1Rlc3RJbXBvcnRlZE5vZGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9kb20vVGVzdEltcG9ydGVkTm9kZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNkMjc0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9kb20vVGVzdEltcG9ydGVkTm9kZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuZG9tOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgVGVzdEltcG9ydGVkTm9kZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbXBvcnRlZENvbW1lbnRzKCkgewotCQlJRE9NTW9kZWwgb3JnTW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLgotCi0JCWNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcigib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIpOwotCQlJRE9NTW9kZWwgZm9yZWlnbk1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS4KLQotCQljcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiKTsKLQkJZm9yZWlnbk1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldCgiPCUtLSBhYmMgLS0lPiIpOwotCQlOb2RlIGNoaWxkID0gZm9yZWlnbk1vZGVsLmdldERvY3VtZW50KCkuZ2V0TGFzdENoaWxkKCk7Ci0JCS8vIGltcG9ydCBjb21tZW50IG5vZGUKLQkJY2hpbGQgPSBvcmdNb2RlbC5nZXREb2N1bWVudCgpLmltcG9ydE5vZGUoY2hpbGQsIHRydWUpOwotCQlvcmdNb2RlbC5nZXREb2N1bWVudCgpLmFwcGVuZENoaWxkKGNoaWxkKTsKLQkJLy8gY3JlYXRlIHRleHQgbm9kZSBhbmQgaW5zZXJ0IGl0IGFmdGVyIGNvbW1lbnQgbm9kZQotCQljaGlsZCA9IG9yZ01vZGVsLmdldERvY3VtZW50KCkuY3JlYXRlVGV4dE5vZGUoImFiYyIpOwotCQlvcmdNb2RlbC5nZXREb2N1bWVudCgpLmFwcGVuZENoaWxkKGNoaWxkKTsKLQkJU3RyaW5nIHRleHQgPSBvcmdNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKCJkb2N1bWVudCB0ZXh0IHdhcyBub3QgZXhwZWN0ZWQiLCAiPCUtLSBhYmMgLS0lPmFiYyIsIHRleHQpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvZG9tL1Rlc3RPcnBoYW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL2RvbS9UZXN0T3JwaGFuLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0NDM3NDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvZG9tL1Rlc3RPcnBoYW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5kb207Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LkF0dHJJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotLyoqCi0gKiBUaGlzIHRlc3Qgd2lsbCBjYXVzZSBhICJyZWdpb24gbWFuYWdlbWVudCBlcnJvciIgdG8gYmUgdGhyb3duIGluIERPTSBwYXJzZXIKLSAqIChhbmQgaXRzIHN1YnNlcXVlbnQgJ2hhbmRsZVJlZnJlc2gnIHRvIGJlIGNhbGxlZCkuIFRoaXMgaXMgIm5vcm1hbCIgaW4gdGhpcwotICogZXJyb3IgY2FzZSwgb2YgYXBwZW5kaW5nIGFuIGpzcCBlbGVtZW50IHRvIGFuIGh0bWwgZG9jdW1lbnQuIFRoaXMKLSAqIGVycm9yL2V4Y2VwdGlvbiBpcyBub3Qgbm9ybWFsbHkgcHJpbnRlZCBvdXQsIGJ1dCBpcyBpZiAnZGVidWcnIGlzIHR1cm5lZCBvbi4KLSAqLwotCi1wdWJsaWMgY2xhc3MgVGVzdE9ycGhhbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBmQ2F0ZWdvcnkgPSAidW5pdHRlc3RzIjsKLQotCXB1YmxpYyBUZXN0T3JwaGFuKFN0cmluZyBuYW1lKSB7Ci0KLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJpdmF0ZSBEb2N1bWVudCBnZXRKU1BEb2MoKSB7Ci0JCUlET01Nb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJRG9jdW1lbnQgZG9jID0gc3RydWN0dXJlZE1vZGVsLmdldERvY3VtZW50KCk7Ci0JCXJldHVybiBkb2M7Ci0JfQotCi0JcHJpdmF0ZSBEb2N1bWVudCBnZXRIVE1MRG9jKCkgewotCi0JCUlET01Nb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlEb2N1bWVudCBkb2MgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJcmV0dXJuIGRvYzsKLQl9Ci0KLQlwcml2YXRlIEVsZW1lbnQgbWFrZUVsZW1lbnQoRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQotCQlFbGVtZW50IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTUciKTsKLQkJZWxlbWVudC5zZXRBdHRyaWJ1dGUoInNyYyIsICI8YmVhbjptZXNzYWdlIC8+Iik7Ci0JCXJldHVybiBlbGVtZW50OwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25PcnBoYW5JbkhUTUxEb2MoKSB7Ci0KLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgInRlc3ROb25PcnBoYW5JbkhUTUxEb2MiKTsKLQkJRG9jdW1lbnQgZG9jID0gZ2V0SFRNTERvYygpOwotCQlFbGVtZW50IGVsZW1lbnQgPSBtYWtlRWxlbWVudChkb2MpOwotCQlBdHRySW1wbCBhdHRyID0gKEF0dHJJbXBsKSBlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoInNyYyIpOwotCQlTdHJpbmcgYXR0clZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiYXR0clZhbHVlOiAiICsgYXR0clZhbHVlKTsKLQkJZG9jLmFwcGVuZENoaWxkKGVsZW1lbnQpOwotCQlib29sZWFuIGlzSnNwVmFsdWUgPSBhdHRyLmhhc05lc3RlZFZhbHVlKCk7Ci0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJpc0pzcFZhbHVlOiAiICsgaXNKc3BWYWx1ZSk7Ci0JCWFzc2VydEZhbHNlKGlzSnNwVmFsdWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25PcnBoYW5JbkpTUERvYygpIHsKLQotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAidGVzdE5vbk9ycGhhbkluSlNQRG9jIik7Ci0JCURvY3VtZW50IGRvYyA9IGdldEpTUERvYygpOwotCQlFbGVtZW50IGVsZW1lbnQgPSBtYWtlRWxlbWVudChkb2MpOwotCQlBdHRySW1wbCBhdHRyID0gKEF0dHJJbXBsKSBlbGVtZW50LmdldEF0dHJpYnV0ZU5vZGUoInNyYyIpOwotCQlTdHJpbmcgYXR0clZhbHVlID0gYXR0ci5nZXRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiYXR0clZhbHVlOiAiICsgYXR0clZhbHVlKTsKLQkJZG9jLmFwcGVuZENoaWxkKGVsZW1lbnQpOwotCQlib29sZWFuIGlzSnNwVmFsdWUgPSBhdHRyLmhhc05lc3RlZFZhbHVlKCk7Ci0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJpc0pzcFZhbHVlOiAiICsgaXNKc3BWYWx1ZSk7Ci0JCWFzc2VydFRydWUoaXNKc3BWYWx1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbk9ycGhhbkluQm90aCgpIHsKLQotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAidGVzdE5vbk9ycGhhbkluQm90aCIpOwotCQlEb2N1bWVudCBqc3BEb2MgPSBnZXRKU1BEb2MoKTsKLQkJRWxlbWVudCBjb21tb25FbGVtZW50ID0gbWFrZUVsZW1lbnQoanNwRG9jKTsKLQkJQXR0ckltcGwgYXR0ciA9IChBdHRySW1wbCkgY29tbW9uRWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKCJzcmMiKTsKLQkJU3RyaW5nIGF0dHJWYWx1ZSA9IGF0dHIuZ2V0VmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImF0dHJWYWx1ZTogIiArIGF0dHJWYWx1ZSk7Ci0JCWpzcERvYy5hcHBlbmRDaGlsZChjb21tb25FbGVtZW50KTsKLQkJYm9vbGVhbiBpc0pzcFZhbHVlID0gYXR0ci5oYXNOZXN0ZWRWYWx1ZSgpOwotCQlMb2dnZXIudHJhY2UoZkNhdGVnb3J5LCAiaXNKc3BWYWx1ZTogIiArIGlzSnNwVmFsdWUpOwotCQlhc3NlcnRUcnVlKGlzSnNwVmFsdWUpOwotCQlEb2N1bWVudCBodG1sRG9jID0gZ2V0SFRNTERvYygpOwotCQkvLyB0aGlzIHRlc3Qgd2lsbCBjYXVzZSBhICJyZWdpb24gbWFuYWdlbWVudCBlcnJvciIgdG8gYmUKLQkJLy8gdGhyb3duIGluIHBhcnNlciAoYW5kIGl0cyBzdWJzZXF1ZW50ICdoYW5kbGVSZWZyZXNoJykuCi0JCS8vIHRoaXMgaXMgIm5vcm1hbCIgaW4gdGhpcyBlcnJvciBjYXNlLCBvZiBhcHBlbmRpbmcgYW4ganNwCi0JCS8vIGVsZW1lbnQgdG8gYW4gaHRtbCBkb2N1bWVudC4gVGhpcyBlcnJvci9leGNlcHRpb24gaXMgbm90Ci0JCS8vIG5vcm1hbGx5IHByaW50ZWQgb3V0LCBidXQgaXMgaWYgJ2RlYnVnJyBpcyB0dXJuZWQgb24uCi0JCWh0bWxEb2MuYXBwZW5kQ2hpbGQoY29tbW9uRWxlbWVudCk7Ci0JCWlzSnNwVmFsdWUgPSBhdHRyLmhhc05lc3RlZFZhbHVlKCk7Ci0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJpc0pzcFZhbHVlOiAiICsgaXNKc3BWYWx1ZSk7Ci0JCWFzc2VydEZhbHNlKGlzSnNwVmFsdWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25PcnBoYW5JbkJvdGhSZXZlcnNlZE9yZGVyKCkgewotCi0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJ0ZXN0Tm9uT3JwaGFuSW5Cb3RoUmV2ZXJzZWRPcmRlciIpOwotCQlEb2N1bWVudCBodG1sRG9jID0gZ2V0SFRNTERvYygpOwotCQlFbGVtZW50IGNvbW1vbkVsZW1lbnQgPSBtYWtlRWxlbWVudChodG1sRG9jKTsKLQkJQXR0ckltcGwgYXR0ciA9IChBdHRySW1wbCkgY29tbW9uRWxlbWVudC5nZXRBdHRyaWJ1dGVOb2RlKCJzcmMiKTsKLQkJU3RyaW5nIGF0dHJWYWx1ZSA9IGF0dHIuZ2V0VmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImF0dHJWYWx1ZTogIiArIGF0dHJWYWx1ZSk7Ci0JCWh0bWxEb2MuYXBwZW5kQ2hpbGQoY29tbW9uRWxlbWVudCk7Ci0JCWJvb2xlYW4gaXNKc3BWYWx1ZSA9IGF0dHIuaGFzTmVzdGVkVmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImlzSnNwVmFsdWU6ICIgKyBpc0pzcFZhbHVlKTsKLQkJYXNzZXJ0RmFsc2UoaXNKc3BWYWx1ZSk7Ci0JCURvY3VtZW50IGpzcERvYyA9IGdldEpTUERvYygpOwotCQkvLyB0aGlzIGxpdHRsZSB0ZXN0IHNob3dzIGl0cyBpbXBvcnRhbnQgdG8KLQkJLy8gYWN0dWFsbHkgY3JlYXRlIHRoZSBlbGVtZW50IHdpdGggdGhlIHJpZ2h0IGtpbmQgb2YKLQkJLy8gZG9jdW1lbnQsIG5vdCBqdXN0IGFwcGVuZC4KLQkJLy8gKGFuZCwgYXBwZW5kIGlzIG5lZWRlZCB0b28sIGFzIGNhbiBiZSBzZWVuIGJ5Ci0JCS8vIGNvbW1lbnRpbmcgb3V0IG9uZSBvciB0aGUgb3RoZXIgb2YgdGhlIGZvbGxvd2luZwotCQkvLyB0d28gbGluZXMuCi0JCWNvbW1vbkVsZW1lbnQgPSBtYWtlRWxlbWVudChqc3BEb2MpOwotCQlqc3BEb2MuYXBwZW5kQ2hpbGQoY29tbW9uRWxlbWVudCk7Ci0JCS8vCi0JCWF0dHIgPSAoQXR0ckltcGwpIGNvbW1vbkVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZSgic3JjIik7Ci0JCWF0dHJWYWx1ZSA9IGF0dHIuZ2V0VmFsdWUoKTsKLQkJTG9nZ2VyLnRyYWNlKGZDYXRlZ29yeSwgImF0dHJWYWx1ZTogIiArIGF0dHJWYWx1ZSk7Ci0JCWlzSnNwVmFsdWUgPSBhdHRyLmhhc05lc3RlZFZhbHVlKCk7Ci0JCUxvZ2dlci50cmFjZShmQ2F0ZWdvcnksICJpc0pzcFZhbHVlOiAiICsgaXNKc3BWYWx1ZSk7Ci0JCWFzc2VydFRydWUoaXNKc3BWYWx1ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgZG9Cb3RoVGVzdHMoKSB7Ci0KLQkJdGVzdE5vbk9ycGhhbkluSFRNTERvYygpOwotCQl0ZXN0Tm9uT3JwaGFuSW5KU1BEb2MoKTsKLQkJdGVzdE5vbk9ycGhhbkluQm90aCgpOwotCQl0ZXN0Tm9uT3JwaGFuSW5Cb3RoUmV2ZXJzZWRPcmRlcigpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxBZGFwdGVycy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsQWRhcHRlcnMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzI4OTk2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxBZGFwdGVycy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zc2Vtb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgVGVzdE1vZGVsQWRhcHRlcnMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCi0JcHVibGljIHZvaWQgdGVzdEpTUE1vZGVsKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBnZXRNb2RlbE1hbmFnZXIoKTsKLQkJSURPTU1vZGVsIHN0cnVjdHVyZWRNb2RlbCA9IChJRE9NTW9kZWwpIG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCXRyeSB7Ci0JCQlib29sZWFuIHRlc3QgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0SWQoKS5lcXVhbHMoSU1vZGVsTWFuYWdlci5VTk1BTkFHRURfTU9ERUwpOwotCQkJYXNzZXJ0VHJ1ZSh0ZXN0KTsKLQkJCU1vZGVsUXVlcnlBZGFwdGVyIG1vZGVsUXVlcnlBZGFwdGVyID0gKE1vZGVsUXVlcnlBZGFwdGVyKSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0QWRhcHRlcihNb2RlbFF1ZXJ5QWRhcHRlci5jbGFzcyk7Ci0JCQlhc3NlcnROb3ROdWxsKCJpbml0aWFsIG1vZGVsUXVlcnlBZGFwdGVyIHNob3VsZCBub3QgYmUgbnVsbCIsIG1vZGVsUXVlcnlBZGFwdGVyKTsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgbmV3TW9kZWwgPSBzdHJ1Y3R1cmVkTW9kZWwubmV3SW5zdGFuY2UoKTsKLQkJCS8vIElET01Eb2N1bWVudCBuZXdEb2N1bWVudCA9ICgoSURPTU1vZGVsKQotCQkJLy8gbmV3TW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCQkvLyBJTm9kZU5vdGlmaWVyIG5vdGlmaWVyID0gbmV3RG9jdW1lbnQ7Ci0JCQlNb2RlbFF1ZXJ5QWRhcHRlciByZXN1bHQgPSAoTW9kZWxRdWVyeUFkYXB0ZXIpIG5ld01vZGVsLmdldEFkYXB0ZXIoTW9kZWxRdWVyeUFkYXB0ZXIuY2xhc3MpOwotCQkJYXNzZXJ0Tm90TnVsbCgibmV3SW5zdGFuY2UgbW9kZWxRdWVyeUFkYXB0ZXIgc2hvdWxkIG5vdCBiZSBudWxsIiwgcmVzdWx0KTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJLy8gZXZlbiB0aG91Z2ggbW9kZWwgaXMgdW5tYW5hZ2VkLCByZWxlYXNlIHN0aWxsIHJlcXVpcmVkLCBzaW5jZQotCQkJLy8gYWRhcHRlciBmYWN0b3JpZXMsIGV0Yy4sIG1heSBiZSBkZXBlbmRpbmcgb24gaXQuCi0JCQlzdHJ1Y3R1cmVkTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQkvLyBpZiBhYm92ZSBjb21wbGV0ZSdzIG5vcm1hbGx5ICh3aXRoIG5vIGV4Y2VwdGlvbnMpCi0JCQkvLyBjb25zaWRlciBwYXNzZWQuCi0JCQlhc3NlcnRUcnVlKHRydWUpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJTW9kZWxNYW5hZ2VyIGdldE1vZGVsTWFuYWdlcigpIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlyZXR1cm4gbW9kZWxNYW5hZ2VyOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbEluY2x1ZGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxJbmNsdWRlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTVlNDU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbEluY2x1ZGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnRsZC5wcm92aXNpb25hbC5UTERFbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSUpTUFRyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy50YWdsaWJpbmRleC5CdW5kbGVSZXNvdXJjZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5VXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudG1vZGVsLkNNTm9kZVdyYXBwZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0vKioKLSAqIFRlc3RzIGZvciBKU1AgaW5jbHVkZSBkaXJlY3RpdmVzCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0TW9kZWxJbmNsdWRlcyBleHRlbmRzIFRlc3RDYXNlIHsKLQlTdHJpbmcgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbnVsbDsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIik7Ci0JCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCVN5c3RlbS5zZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIiwgInRydWUiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQlpZiAod3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlICE9IG51bGwpCi0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsIHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgdGhlIGN1c3RvbSB0YWcgY29udGVudCBtb2RlbCB3aGVuIHNpbmdsZSBsaW5lIGZyYWdtZW50cyBhcmUgdXNlZAotCSAqIHdpdGhvdXQgdHJhaWxpbmcgd2hpdGUgc3BhY2UKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50TW9kZWxTaW5nbGVMaW5lSW5jbHVkZWRGaWxlV2l0aE5vU3BhY2VzQnV0V2l0aFRhZ2xpYkluSW5jbHVkZSgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAicHJqMTE5NTc2X2EiOwotCi0JCUJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KHByb2plY3ROYW1lLCBudWxsLCBudWxsKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8iICsgcHJvamVjdE5hbWUsICIvIiArIHByb2plY3ROYW1lKTsKLQkJYXNzZXJ0VHJ1ZSgicHJvamVjdCBjb3VsZCBub3QgYmUgY3JlYXRlZCIsIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qZWN0TmFtZSkuZXhpc3RzKCkpOwotCi0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoIi9wcmoxMTk1NzZfYS9XZWJDb250ZW50L2JvZHkyLmpzcCIpKTsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCQlhc3NlcnRUcnVlKCJtb2RlbCBoYXMgbm8gY29udGVudCIsIG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldExlbmd0aCgpID4gMCk7Ci0KLQkJCUVsZW1lbnQgZWxlbWVudCA9IChFbGVtZW50KSBtb2RlbC5nZXRJbmRleGVkUmVnaW9uKDc1KTsKLQkJCUNNRWxlbWVudERlY2xhcmF0aW9uIGVkID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShtb2RlbCkuZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oZWxlbWVudCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJubyAoVExEKSBlbGVtZW50IGRlY2xhcmF0aW9uIGZvdW5kIGZvciAiICsgZWxlbWVudC5nZXROb2RlTmFtZSgpLCBlZCk7Ci0JCQlhc3NlcnRUcnVlKCJub3QgYSB3cmFwcGluZyBjb250ZW50IG1vZGVsIGVsZW1lbnQgZGVjbGFyYXRpb246ICIgKyBlZC5nZXROb2RlTmFtZSgpLCBlZCBpbnN0YW5jZW9mIENNTm9kZVdyYXBwZXIpOwotCQkJYXNzZXJ0VHJ1ZSgibm90IGEgdGFnbGliIGNvbnRlbnQgbW9kZWwgZWxlbWVudCBkZWNsYXJhdGlvbjogIiArIGVkLmdldE5vZGVOYW1lKCksICgoQ01Ob2RlV3JhcHBlcikgZWQpLmdldE9yaWdpbk5vZGUoKSBpbnN0YW5jZW9mIFRMREVsZW1lbnREZWNsYXJhdGlvbik7Ci0JCQlTdHJpbmcgdGFnQ2xhc3NOYW1lID0gKChUTERFbGVtZW50RGVjbGFyYXRpb24pICgoQ01Ob2RlV3JhcHBlcikgZWQpLmdldE9yaWdpbk5vZGUoKSkuZ2V0VGFnY2xhc3MoKTsKLQkJCWFzc2VydE5vdE51bGwoIm5vIHRhZyBjbGFzcyBuYW1lIGZvdW5kIiwgdGFnQ2xhc3NOYW1lKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVmVyaWZ5IGluY2x1ZGVkIGZpbGVzIGFyZSB0cmFuc2xhdGVkIHByb3Blcmx5IHdoZW4gdGhleSBjb250YWluIGEKLQkgKiBtdWx0aXBsZSBsaW5lcwotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFRyYW5zbGF0ZU11bHRpTGluZUluY2x1ZGVkRmlsZVdpdGhTcGFjZXNBbmRTY3JpcHRsZXRJbkluY2x1ZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHByb2plY3ROYW1lID0gInByajExOTU3Nl9jIjsKLQotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChwcm9qZWN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvIiArIHByb2plY3ROYW1lLCAiLyIgKyBwcm9qZWN0TmFtZSk7Ci0JCWFzc2VydFRydWUoInByb2plY3QgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpLmV4aXN0cygpKTsKLQotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKCIvIiArIHByb2plY3ROYW1lICsgIi9XZWJDb250ZW50L2JvZHkzLmpzcCIpKTsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCQlhc3NlcnRUcnVlKCJtb2RlbCBoYXMgbm8gY29udGVudCIsIG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldExlbmd0aCgpID4gMCk7Ci0KLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBKU1BUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5KCk7Ci0JCQltb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5hZGRGYWN0b3J5KGZhY3RvcnkpOwotCi0JCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJU3RyaW5nIHNvdXJjZSA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKS5nZXRKYXZhVGV4dCgpOwotCQkJYXNzZXJ0VHJ1ZSgic2NyaXB0bGV0IHdpdGggdmFyaWFibGUgZGVjbGFyYXRpb24gbm90IGZvdW5kXG4iICsgc291cmNlLCBzb3VyY2UuaW5kZXhPZigiamF2YS51dGlsLkRhdGUgaGVhZGVyRGF0ZSIpID4gLTEpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBWZXJpZnkgaW5jbHVkZWQgZmlsZXMgYXJlIHRyYW5zbGF0ZWQgcHJvcGVybHkgd2hlbiB0aGV5IGNvbnRhaW4gYQotCSAqIHNpbmdsZSBsaW5lIGFuZCBkb2N1bWVudCByZWdpb24gYW5kIG5vIHRyYWlsaW5nIHdoaXRlIHNwYWNlLgotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFRyYW5zbGF0ZVNpbmdsZUxpbmVJbmNsdWRlZEZpbGVXaXRoTm9TcGFjZXNCdXRTY3JpcHRsZXRJbkluY2x1ZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHByb2plY3ROYW1lID0gInByajExOTU3Nl9iIjsKLQotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdChwcm9qZWN0TmFtZSwgbnVsbCwgbnVsbCk7Ci0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvIiArIHByb2plY3ROYW1lLCAiLyIgKyBwcm9qZWN0TmFtZSk7Ci0JCWFzc2VydFRydWUoInByb2plY3QgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpLmV4aXN0cygpKTsKLQotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKCIvIiArIHByb2plY3ROYW1lICsgIi9XZWJDb250ZW50L2JvZHkzLmpzcCIpKTsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gKElET01Nb2RlbCkgU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCQlhc3NlcnRUcnVlKCJtb2RlbCBoYXMgbm8gY29udGVudCIsIG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldExlbmd0aCgpID4gMCk7Ci0KLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkgZmFjdG9yeSA9IG5ldyBKU1BUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5KCk7Ci0JCQltb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5hZGRGYWN0b3J5KGZhY3RvcnkpOwotCi0JCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIG1vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJU3RyaW5nIHNvdXJjZSA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKS5nZXRKYXZhVGV4dCgpOwotCQkJYXNzZXJ0VHJ1ZSgic2NyaXB0bGV0IHdpdGggdmFyaWFibGUgZGVjbGFyYXRpb24gbm90IGZvdW5kIiwgc291cmNlLmluZGV4T2YoImphdmEudXRpbC5EYXRlIGhlYWRlckRhdGUiKSA+IC0xKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbFJlbGVhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbFJlbGVhc2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWIxMzc2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxSZWxlYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIFRlc3RNb2RlbFJlbGVhc2UgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SlNQTW9kZWwoKSB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlET01Nb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSAoSURPTU1vZGVsKSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlib29sZWFuIHRlc3QgPSBzdHJ1Y3R1cmVkTW9kZWwuZ2V0SWQoKS5lcXVhbHMoSU1vZGVsTWFuYWdlci5VTk1BTkFHRURfTU9ERUwpOwotCQlhc3NlcnRUcnVlKHRlc3QpOwotCQkvLyBldmVuIHRob3VnaCBtb2RlbCBpcyB1bm1hbmFnZWQsIHJlbGVhc2Ugc3RpbGwgcmVxdWlyZWQsIHNpbmNlIAotCQkvLyBhZGFwdGVyIGZhY3RvcmllcywgZXRjLiwgbWF5IGJlIGRlcGVuZGluZyBvbiBpdC4gCi0JCXN0cnVjdHVyZWRNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJLy8gaWYgYWJvdmUgY29tcGxldGUncyBub3JtYWxseSAod2l0aCBubyBleGNlcHRpb25zKSAKLQkJLy8gY29uc2lkZXIgcGFzc2VkLiAKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci0KLQlwcml2YXRlIElNb2RlbE1hbmFnZXIgZ2V0TW9kZWxNYW5hZ2VyKCkgewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXJldHVybiBtb2RlbE1hbmFnZXI7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsV2l0aE5vRmlsZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsV2l0aE5vRmlsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODRiZWU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbFdpdGhOb0ZpbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy5KU1BDb3JlVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIFRlc3RNb2RlbFdpdGhOb0ZpbGUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQTW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBzdHJ1Y3R1cmVkTW9kZWwgPSAoSURPTU1vZGVsKSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYm9vbGVhbiB0ZXN0ID0gc3RydWN0dXJlZE1vZGVsLmdldElkKCkuZXF1YWxzKElNb2RlbE1hbmFnZXIuVU5NQU5BR0VEX01PREVMKTsKLQkJYXNzZXJ0VHJ1ZSh0ZXN0KTsKLQkJc3RydWN0dXJlZE1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlhc3NlcnRUcnVlKHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWcxMTYwNjZfMSgpIHsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IGNyZWF0ZVNpbXBsZVByb2plY3QoImJ1ZzExNjA2Nl8xIiwgbnVsbCwgbnVsbCk7Ci0KLQkJSUZpbGUgdGVzdEZpbGUgPSBwcm9qZWN0LmdldEZpbGUoIm5vbkV4aXN0YW50LmpzcCIpOwotCQlhc3NlcnRGYWxzZSgibm9uRXhpc3RhbnQuanNwIHRlc3QgZmlsZSBhbHJlYWR5IGV4aXN0cyAobm90IGEgY2xlYW4gd29ya3NwYWNlKT8iLCB0ZXN0RmlsZS5leGlzdHMoKSk7Ci0KLQkJLy8gR2V0IHRoZSBtb2RlbCBhbmQgc2V0IGEgcmVmZXJlbmNlIHRvIHRoYXQgdGFnIGxpYnJhcnkgaW50byBpdAotCQl0cnkgewotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KHRlc3RGaWxlLCBmYWxzZSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgbmV3IG1vZGVsIGZvciAiICsgdGVzdEZpbGUuZ2V0RnVsbFBhdGgoKSwgbW9kZWwpOwotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KCI8JUB0YWdsaWIgcHJlZml4PVwidGFnZGVwZW5kZW50XCIgdXJpPVwidGFnZGVwZW5kZW50XCI+XG48dGFnZGVwZW5kZW50OmNvZGU+IDw8PCA8L3RhZ2RlcGVuZGVudDpjb2RlPiIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMTE2MDY2XzIoKSB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0KLQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBjcmVhdGVTaW1wbGVQcm9qZWN0KCJidWcxMTYwNjZfMiIsIG51bGwsIG51bGwpOwotCQkvLyBDb3B5IGEgVExEIGludG8gdGhlIHByb2plY3QKLQkJSUZpbGUgdGxkID0gY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8xMTYwNjYvdGFnZGVwLnRsZCIsICIvYnVnMTE2MDY2XzIvdGFnZGVwLnRsZCIpOwotCQlhc3NlcnROb3ROdWxsKCJUTEQgZW50cnkgd2FzIG5vdCBjb3BpZWQgcHJvcGVybHkiLCB0bGQpOwotCQlhc3NlcnRUcnVlKCJUTEQgSUZpbGUgZG9lcyBub3QgZXhpc3QiLCB0bGQuZXhpc3RzKCkpOwotCi0JCUlGaWxlIHRlc3RGaWxlID0gcHJvamVjdC5nZXRGaWxlKCJub25FeGlzdGFudC5qc3AiKTsKLQkJYXNzZXJ0RmFsc2UoIm5vbkV4aXN0YW50LmpzcCB0ZXN0IGZpbGUgYWxyZWFkeSBleGlzdHMgKG5vdCBhIGNsZWFuIHdvcmtzcGFjZSk/IiwgdGVzdEZpbGUuZXhpc3RzKCkpOwotCi0JCS8vIEdldCB0aGUgbW9kZWwgYW5kIHNldCBhIHJlZmVyZW5jZSB0byB0aGF0IHRhZyBsaWJyYXJ5IGludG8gaXQKLQkJdHJ5IHsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE5ld01vZGVsRm9yRWRpdCh0ZXN0RmlsZSwgZmFsc2UpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgZ2V0IG5ldyBtb2RlbCBmb3IgIiArIHRlc3RGaWxlLmdldEZ1bGxQYXRoKCksIG1vZGVsKTsKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldCgiPCVAdGFnbGliIHByZWZpeD1cInRhZ2RlcGVuZGVudFwiIHVyaT1cInRhZ2RlcGVuZGVudFwiPlxuPHRhZ2RlcGVuZGVudDpjb2RlPiA8PDwgPC90YWdkZXBlbmRlbnQ6Y29kZT4iKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJRmlsZSBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKFN0cmluZyBlbnRyeW5hbWUsIFN0cmluZyBmdWxsUGF0aCkgewotCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJVVJMIGVudHJ5ID0gSlNQQ29yZVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShlbnRyeW5hbWUpOwotCQlpZiAoZW50cnkgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlieXRlW10gYiA9IG5ldyBieXRlWzIwNDhdOwotCQkJCUlucHV0U3RyZWFtIGlucHV0ID0gZW50cnkub3BlblN0cmVhbSgpOwotCQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQkJaW50IGkgPSAtMTsKLQkJCQl3aGlsZSAoKGkgPSBpbnB1dC5yZWFkKGIpKSA+IC0xKSB7Ci0JCQkJCW91dHB1dC53cml0ZShiLCAwLCBpKTsKLQkJCQl9Ci0JCQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmdWxsUGF0aCkpOwotCQkJCWlmIChmaWxlICE9IG51bGwpIHsKLQkJCQkJZmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQlwcml2YXRlIElQcm9qZWN0IGNyZWF0ZVNpbXBsZVByb2plY3QoU3RyaW5nIG5hbWUsIElQYXRoIGxvY2F0aW9uLCBTdHJpbmdbXSBuYXR1cmVJZHMpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24obmFtZSk7Ci0JCWlmIChsb2NhdGlvbiAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXRMb2NhdGlvbihsb2NhdGlvbik7Ci0JCX0KLQkJaWYgKG5hdHVyZUlkcyAhPSBudWxsKSB7Ci0JCQlkZXNjcmlwdGlvbi5zZXROYXR1cmVJZHMobmF0dXJlSWRzKTsKLQkJfQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KG5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9zb3VyY2UvSlNQVG9rZW5pemVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvc291cmNlL0pTUFRva2VuaXplclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE5YjZmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9zb3VyY2UvSlNQVG9rZW5pemVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnNvdXJjZTsKLQotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucGFyc2VyLmludGVybmFsLkpTUFRva2VuaXplcjsKLQotcHVibGljIGNsYXNzIEpTUFRva2VuaXplclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBKU1BUb2tlbml6ZXIgdG9rZW5pemVyID0gbnVsbDsKLQotCXByaXZhdGUgdm9pZCByZXNldChSZWFkZXIgaW4pIHsKLQkJdG9rZW5pemVyLnJlc2V0KGluKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcmVzZXQoU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCVJlYWRlciBmaWxlUmVhZGVyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWZpbGVSZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKSwgInV0ZjgiKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQl9Ci0JCWlmIChmaWxlUmVhZGVyID09IG51bGwpIHsKLQkJCWZhaWwoKTsKLQkJfQotCQlCdWZmZXJlZFJlYWRlciByZWFkZXIgPSBuZXcgQnVmZmVyZWRSZWFkZXIoZmlsZVJlYWRlcik7Ci0JCXJlc2V0KHJlYWRlcik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJdG9rZW5pemVyID0gbmV3IEpTUFRva2VuaXplcigpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCXRva2VuaXplciA9IG51bGw7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdDE0NDgwN19BdHRyTmFtZSgpIHsKLQkJU3RyaW5nIGlucHV0ID0gIiI7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgNDAwOyBpKyspIHsKLQkJCWlucHV0ID0gaW5wdXQgKz0gIjxhICI7Ci0JCX0KLQkJdHJ5IHsKLQkJCXJlc2V0KG5ldyBTdHJpbmdSZWFkZXIoaW5wdXQpKTsKLQkJCWFzc2VydFRydWUoImVtcHR5IGlucHV0IiwgdG9rZW5pemVyLmdldE5leHRUb2tlbigpICE9IG51bGwpOwotCQkJd2hpbGUgKHRva2VuaXplci5nZXROZXh0VG9rZW4oKSAhPSBudWxsKSB7Ci0JCQkJLy8gcmVhbGx5LCB3ZSBqdXN0IHdhbnQgdG8gbG9vcAotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3QxNDQ4MDdfQXR0clZhbHVlKCkgewotCQlTdHJpbmcgaW5wdXQgPSAiPGEgYj0iOwotCQlmb3IgKGludCBpID0gMDsgaSA8IDQwMDsgaSsrKSB7Ci0JCQlpbnB1dCA9IGlucHV0ICs9ICI8YSAiOwotCQl9Ci0JCXRyeSB7Ci0JCQlyZXNldChuZXcgU3RyaW5nUmVhZGVyKGlucHV0KSk7Ci0JCQlhc3NlcnRUcnVlKCJlbXB0eSBpbnB1dCIsIHRva2VuaXplci5nZXROZXh0VG9rZW4oKSAhPSBudWxsKTsKLQkJCXdoaWxlICh0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCkgIT0gbnVsbCkgewotCQkJCS8vIHJlYWxseSwgd2UganVzdCB3YW50IHRvIGxvb3AKLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MTQ0ODA3X0VxdWFscygpIHsKLQkJU3RyaW5nIGlucHV0ID0gIjxhIGIiOwotCQlmb3IgKGludCBpID0gMDsgaSA8IDQwMDsgaSsrKSB7Ci0JCQlpbnB1dCA9IGlucHV0ICs9ICI8YSAiOwotCQl9Ci0JCXRyeSB7Ci0JCQlyZXNldChuZXcgU3RyaW5nUmVhZGVyKGlucHV0KSk7Ci0JCQlhc3NlcnRUcnVlKCJlbXB0eSBpbnB1dCIsIHRva2VuaXplci5nZXROZXh0VG9rZW4oKSAhPSBudWxsKTsKLQkJCXdoaWxlICh0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCkgIT0gbnVsbCkgewotCQkJCS8vIHJlYWxseSwgd2UganVzdCB3YW50IHRvIGxvb3AKLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZmFpbChlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0Q29tbWVudCgpIHsKLQkJcmVzZXQoImpzcGNvbW1lbnQwMS5qc3AiKTsKLQkJdHJ5IHsKLQkJCWFzc2VydFRydWUoImVtcHR5IGlucHV0IiwgdG9rZW5pemVyLmdldE5leHRUb2tlbigpICE9IG51bGwpOwotCQkJd2hpbGUgKHRva2VuaXplci5nZXROZXh0VG9rZW4oKSAhPSBudWxsKSB7Ci0JCQkJLy8gcmVhbGx5LCB3ZSBqdXN0IHdhbnQgdG8gbG9vcAotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJY2F0Y2ggKFN0YWNrT3ZlcmZsb3dFcnJvciBlKSB7Ci0JCQlmYWlsKGUuZ2V0TWVzc2FnZSgpKTsKLQkJCXJldHVybjsKLQkJfQotCQkvLyBzdWNjZXNzIGlmIFN0YWNrT3ZlckZsb3dFcnJvciBkb2VzIG5vdCBvY2N1ciB3aXRoIHRva2VuaXplci4KLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy9zb3VyY2UvanNwY29tbWVudDAxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3NvdXJjZS9qc3Bjb21tZW50MDEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWE4YzA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3NvdXJjZS9qc3Bjb21tZW50MDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KLTwlLS0gYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhIC0tJT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3RhZ2xpYmluZGV4L0J1bmRsZVJlc291cmNlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdGFnbGliaW5kZXgvQnVuZGxlUmVzb3VyY2VVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4ZDI2NjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdGFnbGliaW5kZXgvQnVuZGxlUmVzb3VyY2VVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudGFnbGliaW5kZXg7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOwotaW1wb3J0IGphdmEudXRpbC5FbnVtZXJhdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGb2xkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMuSlNQQ29yZVRlc3RzUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgQnVuZGxlUmVzb3VyY2VVdGlsIHsKLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBfY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlFbnVtZXJhdGlvbiBlbnRyaWVzID0gSlNQQ29yZVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeVBhdGhzKHJvb3RFbnRyeSk7Ci0JCXdoaWxlIChlbnRyaWVzICE9IG51bGwgJiYgZW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJU3RyaW5nIGVudHJ5UGF0aCA9IGVudHJpZXMubmV4dEVsZW1lbnQoKS50b1N0cmluZygpOwotCQkJU3RyaW5nIHRhcmdldFBhdGggPSBuZXcgUGF0aChmdWxsVGFyZ2V0UGF0aCArICIvIiArIGVudHJ5UGF0aC5zdWJzdHJpbmcocm9vdEVudHJ5Lmxlbmd0aCgpKSkudG9TdHJpbmcoKTsKLQkJCWlmIChlbnRyeVBhdGguZW5kc1dpdGgoIi8iKSkgewotCQkJCUlGb2xkZXIgZm9sZGVyID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGb2xkZXIobmV3IFBhdGgodGFyZ2V0UGF0aCkpOwotCQkJCWlmICghZm9sZGVyLmV4aXN0cygpKSB7Ci0JCQkJCWZvbGRlci5jcmVhdGUodHJ1ZSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJfQotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCV9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKGVudHJ5UGF0aCwgdGFyZ2V0UGF0aCk7Ci0JCQl9Ci0JCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oZW50cnlQYXRoICsgIiAtPiAiICsgdGFyZ2V0UGF0aCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElGaWxlIF9jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKFN0cmluZyBlbnRyeW5hbWUsIFN0cmluZyBmdWxsUGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gbnVsbDsKLQkJVVJMIGVudHJ5ID0gSlNQQ29yZVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShlbnRyeW5hbWUpOwotCQlpZiAoZW50cnkgIT0gbnVsbCkgewotCQkJdHJ5IHsKLQkJCQlieXRlW10gYiA9IG5ldyBieXRlWzIwNDhdOwotCQkJCUlucHV0U3RyZWFtIGlucHV0ID0gZW50cnkub3BlblN0cmVhbSgpOwotCQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQkJaW50IGkgPSAtMTsKLQkJCQl3aGlsZSAoKGkgPSBpbnB1dC5yZWFkKGIpKSA+IC0xKSB7Ci0JCQkJCW91dHB1dC53cml0ZShiLCAwLCBpKTsKLQkJCQl9Ci0JCQkJZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmdWxsUGF0aCkpOwotCQkJCWlmIChmaWxlICE9IG51bGwpIHsKLQkJCQkJaWYgKCFmaWxlLmV4aXN0cygpKSB7Ci0JCQkJCQlmaWxlLmNyZWF0ZShuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJfQotCQkJCQllbHNlIHsKLQkJCQkJCWZpbGUuc2V0Q29udGVudHMobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG91dHB1dC50b0J5dGVBcnJheSgpKSwgdHJ1ZSwgZmFsc2UsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2Uocm9vdEVudHJ5LCBmdWxsVGFyZ2V0UGF0aCk7Ci0JCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmNoZWNrcG9pbnQodHJ1ZSk7Ci0JCQl9Ci0JCX07Ci0JCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5ydW4ocnVubmFibGUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgSUZpbGUgY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgZW50cnluYW1lLCBmaW5hbCBTdHJpbmcgZnVsbFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJZmluYWwgSUZpbGUgZmlsZVtdID0gbmV3IElGaWxlWzFdOwotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCWZpbGVbMF0gPSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShlbnRyeW5hbWUsIGZ1bGxQYXRoKTsKLQkJCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuY2hlY2twb2ludCh0cnVlKTsKLQkJCX0KLQkJfTsKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnJ1bihydW5uYWJsZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCXJldHVybiBmaWxlWzBdOwotCX0KLQotCS8qKgotCSAqIENyZWF0ZXMgYSBzaW1wbGUgcHJvamVjdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZSAtCi0JICogICAgICAgICAgICB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdAotCSAqIEBwYXJhbSBsb2NhdGlvbiAtCi0JICogICAgICAgICAgICB0aGUgbG9jYXRpb24gb2YgdGhlIHByb2plY3QsIG9yIG51bGwgaWYgdGhlIGRlZmF1bHQgb2YKLQkgKiAgICAgICAgICAgICIvbmFtZSIgd2l0aGluIHRoZSB3b3Jrc3BhY2UgaXMgdG8gYmUgdXNlZAotCSAqIEBwYXJhbSBuYXR1cmVJZHMgLQotCSAqICAgICAgICAgICAgYW4gYXJyYXkgb2YgbmF0dXJlcyBJRHMgdG8gc2V0IG9uIHRoZSBwcm9qZWN0LCBudWxsIGlmIG5vbmUKLQkgKiAgICAgICAgICAgIHNob3VsZCBiZSBzZXQKLQkgKiBAcmV0dXJuCi0JICovCi0JcHVibGljIHN0YXRpYyBJUHJvamVjdCBjcmVhdGVTaW1wbGVQcm9qZWN0KFN0cmluZyBuYW1lLCBJUGF0aCBsb2NhdGlvbiwgU3RyaW5nW10gbmF0dXJlSWRzKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOwotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TG9jYXRpb24obG9jYXRpb24pOwotCQl9Ci0JCWlmIChuYXR1cmVJZHMgIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCX0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBKQVZBX05BVFVSRV9JRCA9ICJvcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlIjsKLQkKLQkvKioKLQkgKiBBZGQgYSBsaWJyYXJ5IGVudHJ5IChsaWtlIGEgamFyKSB0byB0aGUgY2xhc3NwYXRoIG9mIGEgcHJvamVjdC4KLQkgKiBUaGUgamFyIG11c3QgYmUgaW4geW91ciBwb2plY3QuIFlvdSBjYW4gY29weSB0aGUgamFyIGludG8geW91ciB3b3Jrc3BhY2UgdXNpbmcKLQkgKiBjb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKFN0cmluZyBlbnRyeW5hbWUsIFN0cmluZyBmdWxsUGF0aCkKLQkgKiAKLQkgKiBAcGFyYW0gcHJvaiBhc3N1bWVkIGl0IGhhcyBqYXZhIG5hdHVyZQotCSAqIEBwYXJhbSBwYXRoVG9KYXIgcHJvamVjdCByZWxhdGl2ZSwgbm8gbGVhZGluZyBzbGFzaAotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBhZGRMaWJyYXJ5RW50cnkoSVByb2plY3QgcHJvaiwgU3RyaW5nIHBhdGhUb0phcikgewotCQkKLQkJSVBhdGggcHJvakxvY2F0aW9uID0gcHJvai5nZXRMb2NhdGlvbigpOwotCQlJUGF0aCBhYnNKYXJQYXRoID0gcHJvakxvY2F0aW9uLmFwcGVuZChwYXRoVG9KYXIpOwotCQkKLQkJSUphdmFQcm9qZWN0IGpQcm9qID0gSmF2YUNvcmUuY3JlYXRlKHByb2opOwotCQkKLQkJSUNsYXNzcGF0aEVudHJ5IHN0cnV0c0phckVudHJ5ID0gSmF2YUNvcmUubmV3TGlicmFyeUVudHJ5KGFic0phclBhdGgsIG51bGwsIG51bGwpOwotCQl0cnkgewotCQkJSUNsYXNzcGF0aEVudHJ5W10gY3VycmVudEVudHJpZXMgPSBqUHJvai5nZXRSYXdDbGFzc3BhdGgoKTsKLQkJCQotCQkJTGlzdCBsID0gbmV3IEFycmF5TGlzdCgpOwotCQkJbC5hZGRBbGwoQXJyYXlzLmFzTGlzdChjdXJyZW50RW50cmllcykpOwotCQkJbC5hZGQoc3RydXRzSmFyRW50cnkpOwotCQkJCi0JCQlJQ2xhc3NwYXRoRW50cnlbXSBuZXdFbnRyaWVzID0gKElDbGFzc3BhdGhFbnRyeVtdKWwudG9BcnJheShuZXcgSUNsYXNzcGF0aEVudHJ5W2wuc2l6ZSgpXSk7Ci0JCQlqUHJvai5zZXRSYXdDbGFzc3BhdGgobmV3RW50cmllcywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3RhZ2xpYmluZGV4L1Rlc3RJbmRleC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdGFnbGliaW5kZXgvVGVzdEluZGV4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyNGVlNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdGFnbGliaW5kZXgvVGVzdEluZGV4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy50YWdsaWJpbmRleDsKLQotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JQ2xhc3NwYXRoRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5jb3JlLkNsYXNzcGF0aEVudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50YWdsaWIuSUphclJlY29yZDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGFnbGliLklUYWdsaWJSZWNvcmQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRhZ2xpYi5JVVJMUmVjb3JkOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50YWdsaWIuVGFnbGliSW5kZXg7Ci0KLS8qKgotICogVGVzdHMgZm9yIHRoZSBUYWdsaWJJbmRleC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RJbmRleCBleHRlbmRzIFRlc3RDYXNlIHsKLQlTdHJpbmcgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbnVsbDsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCVN0cmluZyBub25pbnRlcmFjdGl2ZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIik7Ci0JCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCVN5c3RlbS5zZXRQcm9wZXJ0eSgid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIiwgInRydWUiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQlpZiAod3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlICE9IG51bGwpCi0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsIHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzExODI1MV9lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZyB1cmwgPSAiaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZTJfZm9yXzExODI1MS1lIjsKLQotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KCJidWdfMTE4MjUxLWUiLCBudWxsLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJSVRhZ2xpYlJlY29yZFtdIHJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1lIikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiB0YWdsaWIgcmVjb3JkcyBmb3VuZCBiZWZvcmUgdW5wYWNraW5nIiwgMCwgcmVjb3Jkcy5sZW5ndGgpOwotCi0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnXzExODI1MS1lIiwgIi9idWdfMTE4MjUxLWUiKTsKLQkJLy8gYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCi0JCS8vIGJ1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvdGxkL3NhbXBsZTJfZm9yXzExODI1MS1lLnRsZAotCQkvLyBidWdfMTE4MjUxLWUvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgotCQkvLyBidWdfMTE4MjUxLWUvV2ViQ29udGVudC90ZXN0MS5qc3AKLQkJLy8gYnVnXzExODI1MS1lLy5jbGFzc3BhdGgKLQkJLy8gYnVnXzExODI1MS1lLy5wcm9qZWN0Ci0JCUlUYWdsaWJSZWNvcmQgdGFnbGliUmVjb3JkID0gVGFnbGliSW5kZXgucmVzb2x2ZSgiL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L3Rlc3QxLmpzcCIsIHVybCwgZmFsc2UpOwotCQlhc3NlcnROb3ROdWxsKCJyZWNvcmQgZm91bmQgZm9yICIgKyB1cmwsIHRhZ2xpYlJlY29yZCk7Ci0KLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWUvV2ViQ29udGVudC8iKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIHVucGFja2luZyBidXQgYmVmb3JlIGNvcHlpbmciLCAyLCByZWNvcmRzLmxlbmd0aCk7Ci0KLQkJLyoKLQkJICogaW5jcmVhc2UgYnkgPGI+b25lPC9iPiBmb3IgdGhlIFVSTCB0byB0aGUgVExEIGluIHRoZSBqYXIgKG9uZQotCQkgKiBpbXBsaWNpdCBmb3IgdGhlIFRMRCBpbiB0aGUgamFyIGFzIGEgcmVzb3VyY2UgYW5kIGFub3RoZXIgaW1wbGljaXQKLQkJICogb3ZlcndyaXRpbmcgaXQgd2l0aCB0aGUgc2FtZSBVUkwgdG8gdGhlIFRMRCBpbiB0aGUgamFyIG9uIHRoZQotCQkgKiBjbGFzc3BhdGgpCi0JCSAqLwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLmphciIsICIvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi9zYW1wbGVfdGxkLmphciIpOwotCi0JCXVybCA9ICJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiI7Ci0JCXRhZ2xpYlJlY29yZCA9IFRhZ2xpYkluZGV4LnJlc29sdmUoIi9idWdfMTE4MjUxLWUvV2ViQ29udGVudC90ZXN0MS5qc3AiLCB1cmwsIGZhbHNlKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gcmVjb3JkIGZvdW5kIGZvciAiICsgdXJsLCB0YWdsaWJSZWNvcmQpOwotCi0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvIikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiB0YWdsaWIgcmVjb3JkcyBmb3VuZCBhZnRlciBjb3B5aW5nIiwgMywgcmVjb3Jkcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWcxMTgyNTFfZigpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KCJidWdfMTE4MjUxLWYiLCBudWxsLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJSVRhZ2xpYlJlY29yZFtdIHJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1mIikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiB0YWdsaWIgcmVjb3JkcyBmb3VuZCBiZWZvcmUgdW5wYWNraW5nIiwgMCwgcmVjb3Jkcy5sZW5ndGgpOwotCi0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnXzExODI1MS1mIiwgIi9idWdfMTE4MjUxLWYiKTsKLQkJLy8gYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCi0JCS8vIGJ1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvdGxkL3NhbXBsZTJfZm9yXzExODI1MS1lLnRsZAotCQkvLyBidWdfMTE4MjUxLWYvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgotCQkvLyBidWdfMTE4MjUxLWYvV2ViQ29udGVudC90ZXN0MS5qc3AKLQkJLy8gYnVnXzExODI1MS1mLy5jbGFzc3BhdGgKLQkJLy8gYnVnXzExODI1MS1mLy5wcm9qZWN0Ci0JCVN0cmluZyB1cmwgPSAiaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiOwotCQlJVGFnbGliUmVjb3JkIHRhZ2xpYlJlY29yZCA9IFRhZ2xpYkluZGV4LnJlc29sdmUoIi9idWdfMTE4MjUxLWYvV2ViQ29udGVudC90ZXN0MS5qc3AiLCB1cmwsIGZhbHNlKTsKLQkJYXNzZXJ0TnVsbCgicmVjb3JkIGZvdW5kIGZvciAiICsgdXJsLCB0YWdsaWJSZWNvcmQpOwotCi0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvIikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiB0YWdsaWIgcmVjb3JkcyBmb3VuZCBhZnRlciB1bnBhY2tpbmcgYnV0IGJlZm9yZSBjb3B5aW5nIiwgMywgcmVjb3Jkcy5sZW5ndGgpOwotCi0JCS8qCi0JCSAqIGluY3JlYXNlIGJ5IDxiPm9uZTwvYj4gZm9yIHRoZSBVUkwgdG8gdGhlIFRMRCBpbiB0aGUgamFyIChvbmUKLQkJICogaW1wbGljaXQgZm9yIHRoZSBUTEQgaW4gdGhlIGphciBhcyBhIHJlc291cmNlIGFuZCBhbm90aGVyIGltcGxpY2l0Ci0JCSAqIG92ZXJ3cml0aW5nIGl0IHdpdGggdGhlIHNhbWUgVVJMIHRvIHRoZSBUTEQgaW4gdGhlIGphciBvbiB0aGUKLQkJICogY2xhc3NwYXRoKQotCQkgKi8KLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnXzExODI1MS1zYW1wbGUvc2FtcGxlX3RsZC5qYXIiLCAiL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyIik7Ci0KLQkJdGFnbGliUmVjb3JkID0gVGFnbGliSW5kZXgucmVzb2x2ZSgiL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L3Rlc3QxLmpzcCIsIHVybCwgZmFsc2UpOwotCQlhc3NlcnROb3ROdWxsKCJubyByZWNvcmQgZm91bmQgZm9yICIgKyB1cmwsIHRhZ2xpYlJlY29yZCk7Ci0JCWFzc2VydFRydWUoInJlY29yZCBmb3VuZCB3YXMgd3JvbmcgdHlwZSIsIHRhZ2xpYlJlY29yZCBpbnN0YW5jZW9mIElVUkxSZWNvcmQpOwotCQlhc3NlcnROb3ROdWxsKCJyZWNvcmQgaGFzIG5vIGJhc2UgbG9jYXRpb24iLCAoKElVUkxSZWNvcmQpIHRhZ2xpYlJlY29yZCkuZ2V0QmFzZUxvY2F0aW9uKCkpOwotCQlhc3NlcnRFcXVhbHMoInJlY29yZCBoYXMgd3Jvbmcgc2hvcnQgbmFtZSIsICJzYW1wbGUiLCAoKElVUkxSZWNvcmQpIHRhZ2xpYlJlY29yZCkuZ2V0U2hvcnROYW1lKCkpOwotCQlhc3NlcnRFcXVhbHMoInJlY29yZCBoYXMgd3JvbmcgVVJJIiwgdXJsLCAoKElVUkxSZWNvcmQpIHRhZ2xpYlJlY29yZCkuZ2V0VVJJKCkpOwotCQlVUkwgcmVjb3JkVVJMID0gKChJVVJMUmVjb3JkKSB0YWdsaWJSZWNvcmQpLmdldFVSTCgpOwotCQlhc3NlcnROb3ROdWxsKCJyZWNvcmQgaGFzIG5vIFVSTCIsIHJlY29yZFVSTCk7Ci0JCWFzc2VydFRydWUoInJlY29yZCBoYXMgd3JvbmcgVVJMIiwgcmVjb3JkVVJMLnRvU3RyaW5nKCkubGVuZ3RoKCkgPiA0KTsKLQkJYXNzZXJ0RXF1YWxzKCJyZWNvcmQgaGFzIHdyb25nIFVSTCBwcm90b2NvbCIsICJqYXI6IiwgcmVjb3JkVVJMLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDQpKTsKLQkJYXNzZXJ0RXF1YWxzKCJyZWNvcmQgaGFzIHdyb25nIFVSTCIsICIvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIhL2ZvbGRlci9zYW1wbGVfZm9yXzExODI1MS50bGQiLCByZWNvcmRVUkwudG9TdHJpbmcoKS5zdWJzdHJpbmcocmVjb3JkVVJMLnRvU3RyaW5nKCkubGVuZ3RoKCkgLSA4MSkpOwotCi0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvIikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiB0YWdsaWIgcmVjb3JkcyBmb3VuZCBhZnRlciBjb3B5aW5nIiwgNCwgcmVjb3Jkcy5sZW5ndGgpOwotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50IikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiB0YWdsaWIgcmVjb3JkcyBmb3VuZCBhZnRlciBjb3B5aW5nIiwgNCwgcmVjb3Jkcy5sZW5ndGgpOwotCQlyZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIGNvcHlpbmciLCA0LCByZWNvcmRzLmxlbmd0aCk7Ci0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiB0YWdsaWIgcmVjb3JkcyBmb3VuZCBhZnRlciBjb3B5aW5nIiwgNCwgcmVjb3Jkcy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCdWcxMTgyNTFfZygpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJSVByb2plY3QgcHJvamVjdCA9IEJ1bmRsZVJlc291cmNlVXRpbC5jcmVhdGVTaW1wbGVQcm9qZWN0KCJidWdfMTE4MjUxLWciLCBudWxsLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJSVRhZ2xpYlJlY29yZFtdIHJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1nIikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiB0YWdsaWIgcmVjb3JkcyBmb3VuZCBiZWZvcmUgdW5wYWNraW5nIiwgMCwgcmVjb3Jkcy5sZW5ndGgpOwotCi0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnXzExODI1MS1nIiwgIi9idWdfMTE4MjUxLWciKTsKLQkJLy8gYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvd2ViLnhtbAotCQkvLyBidWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCi0JCS8vIGJ1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgotCQkvLyBidWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvdGVzdDEuanNwCi0JCS8vIGJ1Z18xMTgyNTEtZy8uY2xhc3NwYXRoCi0JCS8vIGJ1Z18xMTgyNTEtZy8ucHJvamVjdAotCQlTdHJpbmcgdXJsID0gImh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUtdGFnbGliIjsKLQkJSVRhZ2xpYlJlY29yZCB0YWdsaWJSZWNvcmQgPSBUYWdsaWJJbmRleC5yZXNvbHZlKCIvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L3Rlc3QxLmpzcCIsIHVybCwgZmFsc2UpOwotCQlhc3NlcnROdWxsKCJyZWNvcmQgZm91bmQgZm9yICIgKyB1cmwsIHRhZ2xpYlJlY29yZCk7Ci0KLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvIikpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiB0YWdsaWIgcmVjb3JkcyBmb3VuZCBhZnRlciB1bnBhY2tpbmcgYnV0IGJlZm9yZSBjb3B5aW5nIiwgMywgcmVjb3Jkcy5sZW5ndGgpOwotCi0JCS8qCi0JCSAqIGluY3JlYXNlIGJ5IDxiPm9uZTwvYj4gZm9yIHRoZSBVUkwgdG8gdGhlIFRMRCBpbiB0aGUgamFyIChvbmUKLQkJICogaW1wbGljaXQgZm9yIHRoZSBUTEQgaW4gdGhlIGphciBhcyBhIHJlc291cmNlIGFuZCBhbm90aGVyIGltcGxpY2l0Ci0JCSAqIG92ZXJ3cml0aW5nIGl0IHdpdGggdGhlIHNhbWUgVVJMIHRvIHRoZSBUTEQgaW4gdGhlIGphciBvbiB0aGUKLQkJICogY2xhc3NwYXRoKQotCQkgKi8KLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnXzExODI1MS1zYW1wbGUvc2FtcGxlX3RsZC5qYXIiLCAiL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIpOwotCi0JCXRhZ2xpYlJlY29yZCA9IFRhZ2xpYkluZGV4LnJlc29sdmUoIi9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvdGVzdDEuanNwIiwgdXJsLCBmYWxzZSk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHJlY29yZCBmb3VuZCBmb3IgIiArIHVybCwgdGFnbGliUmVjb3JkKTsKLQkJYXNzZXJ0VHJ1ZSgicmVjb3JkIGZvdW5kIHdhcyB3cm9uZyB0eXBlIiwgdGFnbGliUmVjb3JkIGluc3RhbmNlb2YgSVVSTFJlY29yZCk7Ci0JCWFzc2VydE5vdE51bGwoInJlY29yZCBoYXMgbm8gYmFzZSBsb2NhdGlvbiIsICgoSVVSTFJlY29yZCkgdGFnbGliUmVjb3JkKS5nZXRCYXNlTG9jYXRpb24oKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb3JkIGhhcyB3cm9uZyBzaG9ydCBuYW1lIiwgInNhbXBsZSIsICgoSVVSTFJlY29yZCkgdGFnbGliUmVjb3JkKS5nZXRTaG9ydE5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygicmVjb3JkIGhhcyB3cm9uZyBVUkkiLCB1cmwsICgoSVVSTFJlY29yZCkgdGFnbGliUmVjb3JkKS5nZXRVUkkoKSk7Ci0JCVVSTCByZWNvcmRVUkwgPSAoKElVUkxSZWNvcmQpIHRhZ2xpYlJlY29yZCkuZ2V0VVJMKCk7Ci0JCWFzc2VydE5vdE51bGwoInJlY29yZCBoYXMgbm8gVVJMIiwgcmVjb3JkVVJMKTsKLQkJYXNzZXJ0VHJ1ZSgicmVjb3JkIGhhcyB3cm9uZyBVUkwiLCByZWNvcmRVUkwudG9TdHJpbmcoKS5sZW5ndGgoKSA+IDQpOwotCQlhc3NlcnRFcXVhbHMoInJlY29yZCBoYXMgd3JvbmcgVVJMIHByb3RvY29sIiwgImphcjoiLCByZWNvcmRVUkwudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgNCkpOwotCQlhc3NlcnRFcXVhbHMoInJlY29yZCBoYXMgd3JvbmcgVVJMIiwgIi9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIhL2ZvbGRlci9zYW1wbGVfZm9yXzExODI1MS50bGQiLCByZWNvcmRVUkwudG9TdHJpbmcoKS5zdWJzdHJpbmcocmVjb3JkVVJMLnRvU3RyaW5nKCkubGVuZ3RoKCkgLSA4MikpOwotCi0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1nL1dlYiBDb250ZW50LyIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYWZ0ZXIgY29weWluZyIsIDQsIHJlY29yZHMubGVuZ3RoKTsKLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIGNvcHlpbmciLCA0LCByZWNvcmRzLmxlbmd0aCk7Ci0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYiKSk7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHRhZ2xpYiByZWNvcmRzIGZvdW5kIGFmdGVyIGNvcHlpbmciLCA0LCByZWNvcmRzLmxlbmd0aCk7Ci0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvd2ViLnhtbCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3cm9uZyBudW1iZXIgb2YgdGFnbGliIHJlY29yZHMgZm91bmQgYWZ0ZXIgY29weWluZyIsIDQsIHJlY29yZHMubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0XzE0ODcxN19hKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoImJ1Z18xNDg3MTciKTsKLQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkvLyBDcmVhdGUgbmV3IHByb2plY3QKLQkJCXByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCgiYnVnXzE0ODcxNyIsIG51bGwsIG51bGwpOwotCQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnXzE0ODcxNyIsICIvYnVnXzE0ODcxNyIpOwotCQl9Ci0KLQkJSUZpbGUgZmlsZSA9IHByb2plY3QuZ2V0RmlsZSgiL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvaW50ZXJuYWwuamFyIik7Ci0JCWFzc2VydFRydWUoZmlsZS5leGlzdHMoKSk7Ci0KLQkJU3RyaW5nIHVyaSA9ICJodHRwOi8vZXhhbXBsZS5jb20vZXh0ZXJuYWwtdXJpIjsKLQkJSVRhZ2xpYlJlY29yZCB0YWdsaWJSZWNvcmQgPSBUYWdsaWJJbmRleC5yZXNvbHZlKCIvYnVnXzE0ODcxNy9XZWJDb250ZW50LyIsIHVyaSwgZmFsc2UpOwotCQlhc3NlcnROb3ROdWxsKCJyZWNvcmQgbm90IGZvdW5kIGZvciAiICsgdXJpLCB0YWdsaWJSZWNvcmQpOwotCQlhc3NlcnRFcXVhbHMoSVRhZ2xpYlJlY29yZC5KQVIsIHRhZ2xpYlJlY29yZC5nZXRSZWNvcmRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHModXJpLCAoKElKYXJSZWNvcmQpIHRhZ2xpYlJlY29yZCkuZ2V0VVJJKCkpOwotCi0JCUlUYWdsaWJSZWNvcmQgdGFnbGliUmVjb3JkMiA9IG51bGw7Ci0JCUlUYWdsaWJSZWNvcmRbXSByZWNvcmRzID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL2J1Z18xNDg3MTcvV2ViQ29udGVudC8iKSk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcmVjb3Jkcy5sZW5ndGg7IGkrKykgewotCQkJaW50IHR5cGUgPSByZWNvcmRzW2ldLmdldFJlY29yZFR5cGUoKTsKLQkJCXN3aXRjaCAodHlwZSkgewotCQkJCWNhc2UgSVRhZ2xpYlJlY29yZC5KQVIgOiB7Ci0JCQkJCXRhZ2xpYlJlY29yZDIgPSByZWNvcmRzW2ldOwotCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgicmVjb3JkIG5vdCByZXR1cm5lZCBmb3IgIiArIHVyaSwgdGFnbGliUmVjb3JkMik7Ci0JCWFzc2VydEVxdWFscyhJVGFnbGliUmVjb3JkLkpBUiwgdGFnbGliUmVjb3JkMi5nZXRSZWNvcmRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHModXJpLCAoKElKYXJSZWNvcmQpIHRhZ2xpYlJlY29yZDIpLmdldFVSSSgpKTsKLQl9Ci0KLQkvKioKLQkgKiB0ZXN0IGNhY2hpbmcgZnJvbSBzZXNzaW9uLXRvLXNlc3Npb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q2FjaGluZzEoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJVGFnbGliSW5kZXguc2h1dGRvd24oKTsKLQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCgidGVzdGNhY2hlMSIsIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL3Rlc3RjYWNoZTEiLCAiL3Rlc3RjYWNoZTEiKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoIi90ZXN0ZmlsZXMvYnVnXzExODI1MS1zYW1wbGUvc2FtcGxlX3RsZC5qYXIiLCAiL3Rlc3RjYWNoZTEvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIpOwotCQlUYWdsaWJJbmRleC5zdGFydHVwKCk7Ci0KLQkJSVRhZ2xpYlJlY29yZFtdIHJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvdGVzdGNhY2hlMS9XZWJDb250ZW50IikpOwotCQlhc3NlcnRFcXVhbHMoInRvdGFsIElUYWdsaWJSZWNvcmQgY291bnQgZG9lc24ndCBtYXRjaCIsIDUsIHJlY29yZHMubGVuZ3RoKTsKLQotCQlUYWdsaWJJbmRleC5zaHV0ZG93bigpOwotCQlUYWdsaWJJbmRleC5zdGFydHVwKCk7Ci0JCUlUYWdsaWJSZWNvcmRbXSByZWNvcmRzMiA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygidG90YWwgSVRhZ2xpYlJlY29yZCBjb3VudCBkb2Vzbid0IG1hdGNoICgxc3QgcmVzdGFydCkiLCByZWNvcmRzLmxlbmd0aCwgcmVjb3JkczIubGVuZ3RoKTsKLQkJVGFnbGliSW5kZXguc2h1dGRvd24oKTsKLQkJVGFnbGliSW5kZXguc3RhcnR1cCgpOwotCQlyZWNvcmRzMiA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygidG90YWwgSVRhZ2xpYlJlY29yZCBjb3VudCBkb2Vzbid0IG1hdGNoICgybmQgcmVzdGFydCkiLCByZWNvcmRzLmxlbmd0aCwgcmVjb3JkczIubGVuZ3RoKTsKLQkJVGFnbGliSW5kZXguc2h1dGRvd24oKTsKLQkJVGFnbGliSW5kZXguc3RhcnR1cCgpOwotCQlyZWNvcmRzMiA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQiKSk7Ci0JCWFzc2VydEVxdWFscygidG90YWwgSVRhZ2xpYlJlY29yZCBjb3VudCBkb2Vzbid0IG1hdGNoICgzcmQgcmVzdGFydCkiLCByZWNvcmRzLmxlbmd0aCwgcmVjb3JkczIubGVuZ3RoKTsKLQl9Ci0KLQkvKioKLQkgKiB0ZXN0IGNhY2hpbmcgZnJvbSBzZXNzaW9uLXRvLXNlc3Npb24gd2l0aCBhbiBhZGRpdGlvbiBpbiBvbmUgc2Vzc2lvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDYWNoaW5nV2l0aEFkZGluZ0xpYnJhcnkoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gQ3JlYXRlIG5ldyBwcm9qZWN0Ci0JCUlQcm9qZWN0IHByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCgidGVzdGNhY2hlMiIsIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL3Rlc3RjYWNoZTIiLCAiL3Rlc3RjYWNoZTIiKTsKLQotCQlJVGFnbGliUmVjb3JkW10gcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQiKSk7Ci0JCVRhZ2xpYkluZGV4LnNodXRkb3duKCk7Ci0KLQkJVGFnbGliSW5kZXguc3RhcnR1cCgpOwotCQlJVGFnbGliUmVjb3JkW10gcmVjb3JkczIgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvdGVzdGNhY2hlMi9XZWJDb250ZW50IikpOwotCQlhc3NlcnRFcXVhbHMoInRvdGFsIElUYWdsaWJSZWNvcmQgY291bnQgZG9lc24ndCBtYXRjaCAoMXN0IHJlc3RhcnQpIiwgcmVjb3Jkcy5sZW5ndGgsIHJlY29yZHMyLmxlbmd0aCk7Ci0JCUJ1bmRsZVJlc291cmNlVXRpbC5jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL2J1Z18xMTgyNTEtc2FtcGxlL3NhbXBsZV90bGQuamFyIiwgIi90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIiKTsKLQkJcmVjb3JkczIgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvdGVzdGNhY2hlMi9XZWJDb250ZW50IikpOwotCQlhc3NlcnRFcXVhbHMoInRvdGFsIElUYWdsaWJSZWNvcmQgY291bnQgZG9lc24ndCBtYXRjaCAoMXN0IHJlc3RhcnQsIGFkZGVkIGphciBmaWxlKSIsIHJlY29yZHMubGVuZ3RoICsgMSwgcmVjb3JkczIubGVuZ3RoKTsKLQkJVGFnbGliSW5kZXguc2h1dGRvd24oKTsKLQotCQlUYWdsaWJJbmRleC5zdGFydHVwKCk7Ci0JCXJlY29yZHMyID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL3Rlc3RjYWNoZTIvV2ViQ29udGVudCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0b3RhbCBJVGFnbGliUmVjb3JkIGNvdW50IGRvZXNuJ3QgbWF0Y2ggKDJuZCByZXN0YXJ0KSIsIHJlY29yZHMubGVuZ3RoICsgMSwgcmVjb3JkczIubGVuZ3RoKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmFkZExpYnJhcnlFbnRyeShwcm9qZWN0LCAiV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIpOwotCQlUYWdsaWJJbmRleC5zaHV0ZG93bigpOwotCi0JCVRhZ2xpYkluZGV4LnN0YXJ0dXAoKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0b3RhbCBJVGFnbGliUmVjb3JkIGNvdW50IGRvZXNuJ3QgbWF0Y2ggKDNuZCByZXN0YXJ0KSIsIHJlY29yZHMubGVuZ3RoICsgMSwgcmVjb3JkczIubGVuZ3RoKTsKLQkJVGFnbGliSW5kZXguc2h1dGRvd24oKTsKLQotCQlUYWdsaWJJbmRleC5zdGFydHVwKCk7Ci0JCXJlY29yZHMyID0gVGFnbGliSW5kZXguZ2V0QXZhaWxhYmxlVGFnbGliUmVjb3JkcyhuZXcgUGF0aCgiL3Rlc3RjYWNoZTIvV2ViQ29udGVudCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0b3RhbCBJVGFnbGliUmVjb3JkIGNvdW50IGRvZXNuJ3QgbWF0Y2ggY2hhbmdlZCB2YWx1ZSAoNHRoIHJlc3RhcnQsIGFkZCBqYXIgdG8gYnVpbGQgcGF0aCkiLCByZWNvcmRzLmxlbmd0aCArIDIsIHJlY29yZHMyLmxlbmd0aCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF2YWlsYWJsZUZyb21FeHBvcnRlZEJ1aWxkcGF0aHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJVGFnbGliSW5kZXguc2h1dGRvd24oKTsKLQotCQkvLyBDcmVhdGUgcHJvamVjdCAxCi0JCUlQcm9qZWN0IHByb2plY3QgPSBCdW5kbGVSZXNvdXJjZVV0aWwuY3JlYXRlU2ltcGxlUHJvamVjdCgidGVzdGF2YWlsYWJsZTEiLCBudWxsLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShwcm9qZWN0LmV4aXN0cygpKTsKLQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMSIsICIvdGVzdGF2YWlsYWJsZTEiKTsKLQotCQkvLyBDcmVhdGUgcHJvamVjdCAyCi0JCUlQcm9qZWN0IHByb2plY3QyID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoInRlc3RhdmFpbGFibGUyIiwgbnVsbCwgbnVsbCk7Ci0JCWFzc2VydFRydWUocHJvamVjdDIuZXhpc3RzKCkpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyIiwgIi90ZXN0YXZhaWxhYmxlMiIpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLmphciIsICIvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIpOwotCi0JCVRhZ2xpYkluZGV4LnN0YXJ0dXAoKTsKLQotCQkvLyBtYWtlIHN1cmUgcHJvamVjdCAxIHNlZXMgbm8gdGFnbGlicwotCQlJVGFnbGliUmVjb3JkW10gcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50IikpOwotCQlhc3NlcnRFcXVhbHMoIklUYWdsaWJSZWNvcmRzIHdlcmUgZm91bmQiLCAwLCByZWNvcmRzLmxlbmd0aCk7Ci0JCS8vIG1ha2Ugc3VyZSBwcm9qZWN0IDIgc2VlcyB0d28gdGFnbGlicwotCQlJVGFnbGliUmVjb3JkW10gcmVjb3JkczIgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudCIpKTsKLQkJaWYocmVjb3JkczIubGVuZ3RoICE9IDIpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcmVjb3JkczIubGVuZ3RoOyBpKyspIHsKLQkJCQlTeXN0ZW0uZXJyLnByaW50bG4ocmVjb3JkczJbaV0pOwotCQkJfQotCQl9Ci0JCWFzc2VydEVxdWFscygidG90YWwgSVRhZ2xpYlJlY29yZCBjb3VudCBkb2Vzbid0IG1hdGNoIiwgMiwgcmVjb3JkczIubGVuZ3RoKTsKLQotCQlUYWdsaWJJbmRleC5zaHV0ZG93bigpOwotCQlUYWdsaWJJbmRleC5zdGFydHVwKCk7Ci0KLQotCQlyZWNvcmRzMiA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50IikpOwotCQlhc3NlcnRFcXVhbHMoInRvdGFsIElUYWdsaWJSZWNvcmQgY291bnQgZG9lc24ndCBtYXRjaCBhZnRlciByZXN0YXJ0IiwgMiwgcmVjb3JkczIubGVuZ3RoKTsKLQotCQlJSmF2YVByb2plY3QgY3JlYXRlZCA9IEphdmFDb3JlLmNyZWF0ZShwcm9qZWN0Mik7Ci0JCWFzc2VydFRydWUoIi9hdmFpbGFibGV0ZXN0MiBub3QgYSBKYXZhIHByb2plY3QiLCBjcmVhdGVkLmV4aXN0cygpKTsKLQotCQkvLyBleHBvcnQgdGhlIGphciBmcm9tIHByb2plY3QgMgotCQlJQ2xhc3NwYXRoRW50cnlbXSBlbnRyaWVzID0gY3JlYXRlZC5nZXRSYXdDbGFzc3BhdGgoKTsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlDbGFzc3BhdGhFbnRyeSBlbnRyeSA9IGVudHJpZXNbaV07Ci0JCQlpZiAoZW50cnkuZ2V0UGF0aCgpLmVxdWFscyhuZXcgUGF0aCgiL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIiKSkpIHsKLQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJYXNzZXJ0RmFsc2UoIndhcyBleHBvcnRlZCIsICgoQ2xhc3NwYXRoRW50cnkpIGVudHJ5KS5pc0V4cG9ydGVkKTsKLQkJCQkoKENsYXNzcGF0aEVudHJ5KSBlbnRyeSkuaXNFeHBvcnRlZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIgd2FzIG5vdCBmb3VuZCBpbiBidWlsZCBwYXRoIiwgZm91bmQpOwotCQlJQ2xhc3NwYXRoRW50cnlbXSBlbnRyaWVzMiA9IG5ldyBJQ2xhc3NwYXRoRW50cnlbZW50cmllcy5sZW5ndGhdOwotCQlTeXN0ZW0uYXJyYXljb3B5KGVudHJpZXMsIDEsIGVudHJpZXMyLCAwLCBlbnRyaWVzLmxlbmd0aCAtIDEpOwotCQllbnRyaWVzMltlbnRyaWVzLmxlbmd0aCAtIDFdID0gZW50cmllc1swXTsKLQkJY3JlYXRlZC5zZXRSYXdDbGFzc3BhdGgoZW50cmllczIsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCi0JCWVudHJpZXMgPSBjcmVhdGVkLmdldFJhd0NsYXNzcGF0aCgpOwotCQlmb3VuZCA9IGZhbHNlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlDbGFzc3BhdGhFbnRyeSBlbnRyeSA9IGVudHJpZXNbaV07Ci0JCQlpZiAoZW50cnkuZ2V0UGF0aCgpLmVxdWFscyhuZXcgUGF0aCgiL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIiKSkpIHsKLQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJYXNzZXJ0VHJ1ZSgiL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIgd2FzIG5vdCBleHBvcnRlZCIsICgoQ2xhc3NwYXRoRW50cnkpIGVudHJ5KS5pc0V4cG9ydGVkKTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCIvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciB3YXMgbm90IGZvdW5kIGluIGJ1aWxkIHBhdGgiLCBmb3VuZCk7Ci0KLQkJLy8gcHJvamVjdCAyIHNob3VsZCBzdGlsbCBoYXZlIGp1c3QgdHdvIHRhZ2xpYnMKLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50IikpOwotCQlhc3NlcnRFcXVhbHMoInRvdGFsIElUYWdsaWJSZWNvcmQgY291bnQgZG9lc24ndCBtYXRjaCAoYWZ0ZXIgZXhwb3J0aW5nIGphcikiLCAyLCByZWNvcmRzLmxlbmd0aCk7Ci0KLQkJLy8gbm93IG9uZSB0YWdsaWIgc2hvdWxkIGJlIHZpc2libGUgZnJvbSBwcm9qZWN0IDEKLQkJcmVjb3JkcyA9IFRhZ2xpYkluZGV4LmdldEF2YWlsYWJsZVRhZ2xpYlJlY29yZHMobmV3IFBhdGgoIi90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50IikpOwotCQlhc3NlcnRFcXVhbHMoInRvdGFsIElUYWdsaWJSZWNvcmQgY291bnQgZG9lc24ndCBtYXRjaCAoYWZ0ZXIgZXhwb3J0aW5nIGphcikiLCAxLCByZWNvcmRzLmxlbmd0aCk7Ci0KLQkJVGFnbGliSW5kZXguc2h1dGRvd24oKTsKLQkJVGFnbGliSW5kZXguc3RhcnR1cCgpOwotCi0JCS8vIHByb2plY3QgMiBzaG91bGQgc3RpbGwgaGF2ZSBqdXN0IHR3byB0YWdsaWJzCi0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0b3RhbCBJVGFnbGliUmVjb3JkIGNvdW50IGRvZXNuJ3QgbWF0Y2ggKGFmdGVyIGV4cG9ydGluZyBqYXIgYW5kIHJlc3RhcnRpbmcpIiwgMiwgcmVjb3Jkcy5sZW5ndGgpOwotCi0JCS8vIGFuZCBvbmUgdGFnbGliIHNob3VsZCBzdGlsbCBiZSB2aXNpYmxlIGZyb20gcHJvamVjdCAxCi0JCXJlY29yZHMgPSBUYWdsaWJJbmRleC5nZXRBdmFpbGFibGVUYWdsaWJSZWNvcmRzKG5ldyBQYXRoKCIvdGVzdGF2YWlsYWJsZTEvV2ViQ29udGVudCIpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0b3RhbCBJVGFnbGliUmVjb3JkIGNvdW50IGRvZXNuJ3QgbWF0Y2ggKGFmdGVyIGV4cG9ydGluZyBqYXIgYW5kIHJlc3RhcnRpbmcpIiwgMSwgcmVjb3Jkcy5sZW5ndGgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9KU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy90cmFuc2xhdGlvbi9KU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0NzU2ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdHJhbnNsYXRpb24vSlNQSmF2YVRyYW5zbGF0b3JDb3JlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudHJhbnNsYXRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5JSlNQVHJhbnNsYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb25BZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnRhZ2xpYmluZGV4LkJ1bmRsZVJlc291cmNlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBKU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0Jc3RhdGljIGZpbmFsIFN0cmluZyBXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUgPSAid3RwLmF1dG90ZXN0Lm5vbmludGVyYWN0aXZlIjsKLQotCXB1YmxpYyBKU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0KCkgewotCX0KLQotCXB1YmxpYyBKU1BKYXZhVHJhbnNsYXRvckNvcmVUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCVN0cmluZyB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBudWxsOwotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJU3RyaW5nIG5vbmludGVyYWN0aXZlID0gU3lzdGVtLmdldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSk7Ci0JCWlmIChub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbm9uaW50ZXJhY3RpdmU7Ci0JCVN5c3RlbS5zZXRQcm9wZXJ0eShXVFBfQVVUT1RFU1RfTk9OSU5URVJBQ1RJVkUsICJ0cnVlIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJaWYgKHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJU3lzdGVtLnNldFByb3BlcnR5KFdUUF9BVVRPVEVTVF9OT05JTlRFUkFDVElWRSwgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0XzEwNzMzOCgpIHRocm93cyBFeGNlcHRpb24gewotCQlTdHJpbmcgcHJvamVjdE5hbWUgPSAiYnVnXzEwNzMzOCI7Ci0JCS8vIENyZWF0ZSBuZXcgcHJvamVjdAotCQlJUHJvamVjdCBwcm9qZWN0ID0gQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QocHJvamVjdE5hbWUsIG51bGwsIG51bGwpOwotCQlhc3NlcnRUcnVlKHByb2plY3QuZXhpc3RzKCkpOwotCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBwcm9qZWN0TmFtZSwgIi8iICsgcHJvamVjdE5hbWUpOwotCQlJRmlsZSBmaWxlID0gcHJvamVjdC5nZXRGaWxlKCJXZWJDb250ZW50L3Rlc3QxMDczMzguanNwIik7Ci0JCWFzc2VydFRydWUoZmlsZS5leGlzdHMoKSk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JSZWFkKGZpbGUpOwotCQlJRE9NTW9kZWwganNwTW9kZWwgPSAoSURPTU1vZGVsKSBtb2RlbDsKLQotCQlTdHJpbmcganNwU291cmNlID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCk7Ci0JCQotCQlhc3NlcnRUcnVlKCJsaW5lIGRlbGltaXRlcnMgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byBXaW5kb3dzIFtDUkxGXSIsIGpzcFNvdXJjZS5pbmRleE9mKCJcclxuIikgPCAwKTsKLQkJYXNzZXJ0VHJ1ZSgibGluZSBkZWxpbWl0ZXJzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gTWFjIFtDUl0iLCBqc3BTb3VyY2UuaW5kZXhPZigiXHIiKSA8IDApOwotCi0JCWlmIChtb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3J5Rm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcykgPT0gbnVsbCkgewotCQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IEpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkoKTsKLQkJCW1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpLmFkZEZhY3RvcnkoZmFjdG9yeSk7Ci0JCX0KLQkJSURPTURvY3VtZW50IHhtbERvYyA9IGpzcE1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUpTUFRyYW5zbGF0aW9uQWRhcHRlciB0cmFuc2xhdGlvbkFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSB4bWxEb2MuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQlKU1BUcmFuc2xhdGlvbiB0cmFuc2xhdGlvbiA9IHRyYW5zbGF0aW9uQWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkvLyBTeXN0ZW0uZXJyLnByaW50KHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCkpOwotCi0JCWFzc2VydFRydWUoIm5ldy1saW5lIGJlZ2lubmluZyBzY3JpcHRsZXQgbWlzc2luZyBmcm9tIHRyYW5zbGF0aW9uIiwgdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKS5pbmRleE9mKCJpbnQgaSA9IDA7IikgPj0gMCk7Ci0KLQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUEphdmFWYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL0pTUEphdmFWYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMjA3MWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdmFsaWRhdGlvbi9KU1BKYXZhVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMudmFsaWRhdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHByb3BlcnRpZXMuSlNQRkNvbnRlbnRQcm9wZXJ0aWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLkpTUEphdmFWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uSlNQVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy50YWdsaWJpbmRleC5CdW5kbGVSZXNvdXJjZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci0KLS8qKgotICogVGVzdHMgSlNQIEphdmEgVmFsaWRhdG9yCi0gKi8KLXB1YmxpYyBjbGFzcyBKU1BKYXZhVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlTdHJpbmcgd3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gImJ1Z184NzM1MSI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIpOwotCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCXd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG5vbmludGVyYWN0aXZlOwotCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsICJ0cnVlIik7Ci0KLQkJaWYgKCFSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKS5leGlzdHMoKSkgewotCQkJQnVuZGxlUmVzb3VyY2VVdGlsLmNyZWF0ZVNpbXBsZVByb2plY3QoUFJPSkVDVF9OQU1FLCBudWxsLCBuZXcgU3RyaW5nW117SmF2YUNvcmUuTkFUVVJFX0lEfSk7Ci0JCQlCdW5kbGVSZXNvdXJjZVV0aWwuY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLyIgKyBQUk9KRUNUX05BTUUsICIvIiArIFBST0pFQ1RfTkFNRSk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgicHJvamVjdCBjb3VsZCBub3QgYmUgY3JlYXRlZCIsIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChQUk9KRUNUX05BTUUpLmV4aXN0cygpKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQlpZiAod3RwX2F1dG90ZXN0X25vbmludGVyYWN0aXZlICE9IG51bGwpCi0JCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsIHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgaWYganNwIGZyYWdtZW50cyBhcmUgdmFsaWRhdGVkIHdoZW4gcHJlZmVyZW5jZSBpcyBzZXQgdG8gdHJ1ZQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRpbmdGcmFnbWVudHMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSlNQVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBKU1BKYXZhVmFsaWRhdG9yKCk7Ci0JCUlSZXBvcnRlciByZXBvcnRlciA9IG5ldyBSZXBvcnRlckZvclRlc3QoKTsKLQkJVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGhlbHBlciA9IG5ldyBWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QoKTsKLQkJU3RyaW5nIGZpbGVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L2loYXZlZXJyb3JzLmpzcGYiOwotCQloZWxwZXIuc2V0VVJJKGZpbGVQYXRoKTsKLQkJSUZpbGUgZmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCi0JCVN0cmluZyB2YWxpZGF0ZSA9IEpTUEZDb250ZW50UHJvcGVydGllcy5nZXRQcm9wZXJ0eShKU1BGQ29udGVudFByb3BlcnRpZXMuVkFMSURBVEVfRlJBR01FTlRTLCBmaWxlLCBmYWxzZSk7Ci0JCUpTUEZDb250ZW50UHJvcGVydGllcy5zZXRQcm9wZXJ0eShKU1BGQ29udGVudFByb3BlcnRpZXMuVkFMSURBVEVfRlJBR01FTlRTLCBmaWxlLCBCb29sZWFuLnRvU3RyaW5nKHRydWUpKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlKGhlbHBlciwgcmVwb3J0ZXIpOwotCi0JCWlmICh2YWxpZGF0ZSAhPSBudWxsKSB7Ci0JCQlKU1BGQ29udGVudFByb3BlcnRpZXMuc2V0UHJvcGVydHkoSlNQRkNvbnRlbnRQcm9wZXJ0aWVzLlZBTElEQVRFX0ZSQUdNRU5UUywgZmlsZSwgdmFsaWRhdGUpOwotCQl9Ci0JCWFzc2VydFRydWUoImpzcGYgd2FzIG5vdCB2YWxpZGF0ZWQgd2hlbiBpdCBzaG91bGQgaGF2ZSBiZWVuIiwgIXJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuaXNFbXB0eSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBpZiBqc3AgZnJhZ21lbnRzIGFyZSBub3QgdmFsaWRhdGVkIHdoZW4gcHJlZmVyZW5jZSBpcyBzZXQgdG8KLQkgKiBmYWxzZQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vVmFsaWRhdGluZ0ZyYWdtZW50cygpIHRocm93cyBFeGNlcHRpb24gewotCQlKU1BWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEpTUFZhbGlkYXRvcigpOwotCQlJUmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXJGb3JUZXN0KCk7Ci0JCVZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCBoZWxwZXIgPSBuZXcgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0KCk7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvaWhhdmVlcnJvcnMuanNwZiI7Ci0JCWhlbHBlci5zZXRVUkkoZmlsZVBhdGgpOwotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0KLQkJU3RyaW5nIHZhbGlkYXRlID0gSlNQRkNvbnRlbnRQcm9wZXJ0aWVzLmdldFByb3BlcnR5KEpTUEZDb250ZW50UHJvcGVydGllcy5WQUxJREFURV9GUkFHTUVOVFMsIGZpbGUsIGZhbHNlKTsKLQkJSlNQRkNvbnRlbnRQcm9wZXJ0aWVzLnNldFByb3BlcnR5KEpTUEZDb250ZW50UHJvcGVydGllcy5WQUxJREFURV9GUkFHTUVOVFMsIGZpbGUsIEJvb2xlYW4udG9TdHJpbmcoZmFsc2UpKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlKGhlbHBlciwgcmVwb3J0ZXIpOwotCi0JCWlmICh2YWxpZGF0ZSAhPSBudWxsKSB7Ci0JCQlKU1BGQ29udGVudFByb3BlcnRpZXMuc2V0UHJvcGVydHkoSlNQRkNvbnRlbnRQcm9wZXJ0aWVzLlZBTElEQVRFX0ZSQUdNRU5UUywgZmlsZSwgdmFsaWRhdGUpOwotCQl9Ci0JCWFzc2VydFRydWUoImpzcGYgd2FzIHZhbGlkYXRlZCB3aGVuIGl0IHNob3VsZCBub3QgaGF2ZSBiZWVuIiwgcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pc0VtcHR5KCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3ZhbGlkYXRpb24vUmVwb3J0ZXJGb3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY29yZS90ZXN0cy92YWxpZGF0aW9uL1JlcG9ydGVyRm9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTc3NjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3ZhbGlkYXRpb24vUmVwb3J0ZXJGb3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy52YWxpZGF0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLmNvcmUuSU1lc3NhZ2VBY2Nlc3M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0b3I7Ci0KLWNsYXNzIFJlcG9ydGVyRm9yVGVzdCBpbXBsZW1lbnRzIElSZXBvcnRlciB7Ci0JTGlzdCBsaXN0ID0gbmV3IEFycmF5TGlzdCgpOwotCi0JcHVibGljIFJlcG9ydGVyRm9yVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBhZGRNZXNzYWdlKElWYWxpZGF0b3Igb3JpZ2luLCBJTWVzc2FnZSBtZXNzYWdlKSB7Ci0JCWxpc3QuYWRkKG1lc3NhZ2UpOwotCX0KLQotCXB1YmxpYyB2b2lkIGRpc3BsYXlTdWJ0YXNrKElWYWxpZGF0b3IgdmFsaWRhdG9yLCBJTWVzc2FnZSBtZXNzYWdlKSB7Ci0JCS8qIGRvIG5vdCBuZWVkIHRvIGltcGxlbWVudCAqLwotCX0KLQotCXB1YmxpYyBJTWVzc2FnZUFjY2VzcyBnZXRNZXNzYWdlQWNjZXNzKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGxlZCgpIHsKLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUFsbE1lc3NhZ2VzKElWYWxpZGF0b3Igb3JpZ2luLCBPYmplY3Qgb2JqZWN0KSB7IC8vIGRvCi0JCS8qIGRvIG5vdCBuZWVkIHRvIGltcGxlbWVudCAqLwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZUFsbE1lc3NhZ2VzKElWYWxpZGF0b3Igb3JpZ2luKSB7Ci0JCS8qIGRvIG5vdCBuZWVkIHRvIGltcGxlbWVudCAqLwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZU1lc3NhZ2VTdWJzZXQoSVZhbGlkYXRvciB2YWxpZGF0b3IsIE9iamVjdCBvYmosIFN0cmluZyBncm91cE5hbWUpIHsvLyBkbwotCQkvKiBkbyBub3QgbmVlZCB0byBpbXBsZW1lbnQgKi8KLQl9Ci0KLQlwdWJsaWMgTGlzdCBnZXRNZXNzYWdlcygpIHsKLQkJcmV0dXJuIGxpc3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uQ29udGV4dEZvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jb3JlL3Rlc3RzL3ZhbGlkYXRpb24vVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OTU2YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2NvcmUvdGVzdHMvdmFsaWRhdGlvbi9WYWxpZGF0aW9uQ29udGV4dEZvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLnZhbGlkYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0aW9uQ29udGV4dDsKLQotY2xhc3MgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGltcGxlbWVudHMgSVZhbGlkYXRpb25Db250ZXh0IHsKLQlwcml2YXRlIFN0cmluZyBmVVJJID0gbnVsbDsKLQotCXB1YmxpYyB2b2lkIHNldFVSSShTdHJpbmcgdXJpKSB7Ci0JCWZVUkkgPSB1cmk7Ci0JfQotCi0JcHVibGljIFN0cmluZ1tdIGdldFVSSXMoKSB7Ci0JCWlmIChmVVJJICE9IG51bGwpCi0JCQlyZXR1cm4gbmV3IFN0cmluZ1tde2ZVUkl9OwotCQlyZXR1cm4gbmV3IFN0cmluZ1swXTsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGxvYWRNb2RlbChTdHJpbmcgc3ltYm9saWNOYW1lKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBPYmplY3QgbG9hZE1vZGVsKFN0cmluZyBzeW1ib2xpY05hbWUsIE9iamVjdFtdIHBhcm1zKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYzk3NWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AuY3NzLmNvcmUudGVzdHMuc291cmNlOwotCi0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLk51bGxJbnB1dFN0cmVhbTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIEpTUGVkQ1NTU291cmNlUGFyc2VyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRVNfRElSID0gInNyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTVUxUU19ESVIgPSAic3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVfT1BFTiA9ICJNT0RFX09QRU4iOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1PREVfQVBQRU5EID0gIk1PREVfQVBQRU5EIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFX0lOU0VSVCA9ICJNT0RFX0lOU0VSVCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29tbW9uRU9MID0gIlxyXG4iOy8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAxLmpzcCIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAxLmpzcCIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuanNwIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmpzcCIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmpzcCIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmpzcCIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmpzcCIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkvKgotCSAqIFRoZSBmb2xsb3dpbmcgdGVzdCBjYXNlIGZhaWxzIHdpdGggV1RQIDEuNSBSQzIsIGJ1dCwgaWdub3JlIHRoaXMgcmVsZWFzZS4KLQkgKiAKLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmpzcCIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmpzcCIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0NigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA2LmpzcCIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0OCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAyLmpzcGYiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDkoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMy5qc3BmIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQxMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA2LmpzcGYiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JKgotCSovCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW40KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuanNwIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuanNwIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNC5qc3AiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW41KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDUuanNwIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ1KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDUuanNwIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5qc3AiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW42KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuanNwIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuanNwIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW43KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuanNwZiIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kNygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAxLmpzcGYiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0NygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAxLmpzcGYiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW44KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDIuanNwZiIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDgoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMi5qc3BmIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW45KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDMuanNwZiIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kOSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmpzcGYiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjEwKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuanNwZiIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMTAoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNC5qc3BmIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDEwKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuanNwZiIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjExKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDUuanNwZiIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMTEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5qc3BmIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDExKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDUuanNwZiIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjEyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuanNwZiIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDEyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuanNwZiIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMTMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNy5qc3BmIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQxMygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA3LmpzcGYiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MTMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNy5qc3BmIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMTQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNy5qc3AiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDE0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDcuanNwIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDE0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDcuanNwIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIHNldCBjc3Nqc3B0ZXN0WC5qc3AoZikgZmlsZSBhcyBjc3MganNwLgotCQlJQ29udGVudFR5cGUgY3QgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5nZXRDb250ZW50VHlwZSgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmNzc2pzcHNvdXJjZSIpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDAuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxLmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0Mi5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDMuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3Q0LmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0NS5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDYuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3Q3LmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0OC5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDkuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxMC5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDExLmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTIuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxMy5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDE0LmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTUuanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxNi5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDE3LmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTguanNwIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QxOS5qc3AiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDIwLmpzcCIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0ID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZ2V0Q29udGVudFR5cGUoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5jc3Nqc3BmcmFnbWVudHNvdXJjZSIpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDAuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MS5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3QyLmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDMuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0NC5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3Q1LmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDYuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0Ny5qc3BmIiwgSUNvbnRlbnRUeXBlLkZJTEVfTkFNRV9TUEVDKTsKLQkJY3QuYWRkRmlsZVNwZWMoImNzc2pzcHRlc3Q4LmpzcGYiLCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQljdC5hZGRGaWxlU3BlYygiY3NzanNwdGVzdDkuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTAuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTEuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTIuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTMuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTQuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTUuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTYuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTcuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTguanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MTkuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JCWN0LmFkZEZpbGVTcGVjKCJjc3Nqc3B0ZXN0MjAuanNwZiIsIElDb250ZW50VHlwZS5GSUxFX05BTUVfU1BFQyk7Ci0JfQotCi0Jc3RhdGljIGludCBpbmRleF9qc3AgPSAwOwotCXN0YXRpYyBpbnQgaW5kZXhfanNwZiA9IDA7Ci0JcHJpdmF0ZSBJQ1NTTW9kZWwgY3JlYXRlTW9kZWwoYm9vbGVhbiBpc0ZyYWdtZW50KSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJbW9kZWwgPSAhaXNGcmFnbWVudCA/IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoImNzc2pzcHRlc3QiICsgaW5kZXhfanNwKysgKyAiLmpzcCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCkgOiAvLyROT04tTkxTLTEkCi0JCQkJCQkJCQltb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KCJjc3Nqc3B0ZXN0IiArIGluZGV4X2pzcGYrKyArICIuanNwZiIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldExpbmVEZWxpbWl0ZXIoY29tbW9uRU9MKTsvLyROT04tTkxTLTEkCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiAoSUNTU01vZGVsKSBtb2RlbDsKLQotCX0KLQlwcml2YXRlIEZpbGUgY3JlYXRlRmlsZShTdHJpbmcgZGlyZWN0b3J5LCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cyIpOyAvLyROT04tTkxTLTEkCi0JCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsgLy8kTk9OLU5MUy0xJAotCQlVUkwgbG9jYWxVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJU3RyaW5nIGluc3RhbGxQYXRoID0gbG9jYWxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgdG90YWxEaXJlY3RvcnkgPSBpbnN0YWxsUGF0aCArIGRpcmVjdG9yeTsKLQkJU3RyaW5nIHRvdGFsUGF0aCA9IHRvdGFsRGlyZWN0b3J5ICsgIi8iICsgZmlsZW5hbWU7IC8vJE5PTi1OTFMtMSQKLQkJVVJMIHRvdGFsVVJMID0gbmV3IFVSTCh1cmwsIHRvdGFsUGF0aCk7Ci0JCVN0cmluZyBmaW5hbEZpbGUgPSB0b3RhbFVSTC5nZXRGaWxlKCk7Ci0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7Ci0JCXJldHVybiBmaWxlOwotCX0KLQkKLQlwcml2YXRlIFN0cmluZyBjcmVhdGVTdHJpbmcoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCVJlYWRlciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoY3JlYXRlRmlsZShkaXJlY3RvcnksIGZpbGVuYW1lKSk7Ci0JCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmaWxlUmVhZGVyKTsKLQkJU3RyaW5nIGxpbmU7Ci0JCXdoaWxlICgobGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQlidWYuYXBwZW5kKGxpbmUpOwotCQkJYnVmLmFwcGVuZChjb21tb25FT0wpOwotCQl9Ci0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNvdXJjZVBhcnNlclRlc3QoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgbW9kZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gbnVsbDsKLQkJaWYgKG1vZGUuZXF1YWxzKE1PREVfT1BFTikpIHsKLQkJCW1vZGVsID0gcmVhZE1vZGVsT3BlbihmaWxlbmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiAobW9kZS5lcXVhbHMoTU9ERV9BUFBFTkQpKSB7Ci0JCQltb2RlbCA9IHJlYWRNb2RlbEFwcGVuZChmaWxlbmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiAobW9kZS5lcXVhbHMoTU9ERV9JTlNFUlQpKSB7Ci0JCQltb2RlbCA9IHJlYWRNb2RlbEluc2VydChmaWxlbmFtZSk7Ci0JCX0KLQkJU3RyaW5nIHJlc3VsdCA9IGR1bXBSZWdpb25zKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpKTsKLQkJY29tcGFyZVJlc3VsdChyZXN1bHQsICJKU1BlZENTU1NvdXJjZVBhcnNlclRlc3QtIiArIGZpbGVuYW1lKTsgLy8kTk9OLU5MUy0xJAotCQljbG9zZU1vZGVsKG1vZGVsKTsKLQl9Ci0KLQlwcml2YXRlIElDU1NNb2RlbCByZWFkTW9kZWxPcGVuKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZSA9IGNyZWF0ZVN0cmluZyhGSUxFU19ESVIsIGZpbGVuYW1lKTsKLQkJSUNTU01vZGVsIG1vZGVsID0gY3JlYXRlTW9kZWwoZmlsZW5hbWUuZW5kc1dpdGgoImpzcGYiKSk7Ly8kTk9OLU5MUy0xJAotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsIHNvdXJjZSk7Ci0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgSUNTU01vZGVsIHJlYWRNb2RlbEFwcGVuZChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBzb3VyY2UgPSBjcmVhdGVTdHJpbmcoRklMRVNfRElSLCBmaWxlbmFtZSk7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGNyZWF0ZU1vZGVsKGZpbGVuYW1lLmVuZHNXaXRoKCJqc3BmIikpOy8vJE5PTi1OTFMtMSQKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGgoKTsgaSsrKSB7Ci0JCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCBpLCAwLCBzb3VyY2Uuc3Vic3RyaW5nKGksIGkgKyAxKSk7Ci0JCX0KLQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSBJQ1NTTW9kZWwgcmVhZE1vZGVsSW5zZXJ0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZSA9IGNyZWF0ZVN0cmluZyhGSUxFU19ESVIsIGZpbGVuYW1lKTsKLQkJSUNTU01vZGVsIG1vZGVsID0gY3JlYXRlTW9kZWwoZmlsZW5hbWUuZW5kc1dpdGgoImpzcGYiKSk7Ly8kTk9OLU5MUy0xJAotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aCgpOyBpKyspIHsKLQkJCWludCB0ZXh0SW5kZXggPSBzb3VyY2UubGVuZ3RoKCkgLSBpIC0gMTsKLQkJCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsIHNvdXJjZS5zdWJzdHJpbmcodGV4dEluZGV4LCB0ZXh0SW5kZXggKyAxKSk7Ci0JCX0KLQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNsb3NlTW9kZWwoSUNTU01vZGVsIG1vZGVsKSB7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGR1bXBSZWdpb25zKElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYnVmLmFwcGVuZChkdW1wUmVnaW9ucyhkb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpKSk7Ci0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wUmVnaW9ucyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbikgewotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQl3aGlsZSAocmVnaW9uICE9IG51bGwpewotCQkJYnVmLmFwcGVuZChkdW1wT25lUmVnaW9uKHJlZ2lvbikpOwotCQkJcmVnaW9uID0gcmVnaW9uLmdldE5leHQoKTsKLQkJfQotCi0JCWJ1Zi5hcHBlbmQoY29tbW9uRU9MICsgIi0tLS0tLS0iICsgY29tbW9uRU9MKTsgLy8kTk9OLU5MUy0xJAotCi0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wT25lUmVnaW9uKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24pIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotCQlidWYuYXBwZW5kKGRvY3VtZW50UmVnaW9uLnRvU3RyaW5nKCkpOwotCQlidWYuYXBwZW5kKGNvbW1vbkVPTCArICIgICAgIik7IC8vJE5PTi1OTFMtMSQKLQotCQlJVGV4dFJlZ2lvbkxpc3QgcmVnaW9uTGlzdCA9IGRvY3VtZW50UmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJSXRlcmF0b3IgaSA9IHJlZ2lvbkxpc3QuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQlJVGV4dFJlZ2lvbiB0ZXh0UmVnaW9uID0gKElUZXh0UmVnaW9uKSBpLm5leHQoKTsKLQkJCWJ1Zi5hcHBlbmQodGV4dFJlZ2lvbi50b1N0cmluZygpKTsKLQkJCWJ1Zi5hcHBlbmQoIiwgIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlidWYuYXBwZW5kKGNvbW1vbkVPTCk7IC8vJE5PTi1OTFMtMSQKLQkJcmV0dXJuIGJ1Zi50b1N0cmluZygpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjb21wYXJlUmVzdWx0KFN0cmluZyBhY3R1YWwsIFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGNyZWF0ZVN0cmluZyhSRVNVTFRTX0RJUiwgZmlsZW5hbWUpOwotCQlhc3NlcnRFcXVhbHMocmVzdWx0LCBhY3R1YWwpOwotCX0KLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYzRiNzAwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotWzAsIDczXSAoPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTY5LzczLCANCi1bNzMsIDE0M10gKDwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzdGwvY29yZV9ydCIgcHJlZml4PSJjLXJ0IiAlPg0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0RJUkVDVElWRTogMC02Ni83MCwgDQotWzE0MywgMTg4XSAoPCVAIGluY2x1ZGUgZmlsZT0iLi9jc3Nqc3BmcmFnbWVudC5qc3BmIiAlPg0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0RJUkVDVElWRTogMC00My80NSwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDEuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDEuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlhYjRkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAxLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLVswLCA3MF0gKDwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzdGwvY29yZV9ydCIgcHJlZml4PSJjLXJ0IiAlPgotCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0RJUkVDVElWRTogMC02Ni83MCwgCi1bNzAsIDExNV0gKDwlQCBpbmNsdWRlIGZpbGU9Ii4vY3NzanNwZnJhZ21lbnQuanNwZiIgJT4KLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTQzLzQ1LCAKLQotLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZmNWU3Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLVswLCA3M10gKDwlQCBwYWdlIHNlc3Npb249ImZhbHNlIiBjb250ZW50VHlwZT0idGV4dC9jc3M7Y2hhcnNldD1JU08tODg1OS0xIiAlPg0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0RJUkVDVElWRTogMC02OS83MywgDQotWzczLCA3OV0gKC5ob2dlICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMC01LzYsIA0KLVs3OSwgODNdICh7DQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCANCi1bODMsIDk3XSAoZmxvYXQgOiAke1hYWH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gRk9SRUlHTl9FTEVNRU5UOiA4LTE0LCANCi1bOTcsIDk4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzk4LCAxMDFdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzEwMSwgMTIwXSAoYm9yZGVyLSR7WFhYfS1jb2xvcikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LCBDb250ZXh0UmVnaW9uLS0+IEZPUkVJR05fRUxFTUVOVDogNy0xMywgQ29udGV4dFJlZ2lvbi0tPiBVTktOT1dOOiAxMy0xOSwgDQotWzEyMCwgMTI2XSAoIDogcmVkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEtMi8zLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzLTYsIA0KLVsxMjYsIDEyN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMjcsIDEyOV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjksIDEzMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMzAsIDEzMl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAyLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAyLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlNGE2ZWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMi5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotWzAsIDRdICgKLQotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCAKLVs0LCAxMF0gKC5ob2dlICkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAwLTUvNiwgCi1bMTAsIDE0XSAoewotCSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIAotWzE0LCAyOF0gKGZsb2F0IDogJHtYWFh9KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gRk9SRUlHTl9FTEVNRU5UOiA4LTE0LCAKLVsyOCwgMjldICg7KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIAotWzI5LCAzMl0gKAotCSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgCi1bMzIsIDUxXSAoYm9yZGVyLSR7WFhYfS1jb2xvcikKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcsIENvbnRleHRSZWdpb24tLT4gRk9SRUlHTl9FTEVNRU5UOiA3LTEzLCBDb250ZXh0UmVnaW9uLS0+IFVOS05PV046IDEzLTE5LCAKLVs1MSwgNTddICggOiByZWQpCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxLTIvMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMy02LCAKLVs1NywgNThdICg7KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIAotWzU4LCA2MF0gKAotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCAKLVs2MCwgNjFdICh9KQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIAotWzYxLCA2M10gKAotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCAKLQotLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM2YWFhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLVswLCA3M10gKDwlQCBwYWdlIHNlc3Npb249ImZhbHNlIiBjb250ZW50VHlwZT0idGV4dC9jc3M7Y2hhcnNldD1JU08tODg1OS0xIiAlPg0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0RJUkVDVElWRTogMC02OS83MywgDQotWzczLCA3OV0gKC5ob2dlICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMC01LzYsIA0KLVs3OSwgODNdICh7DQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCANCi1bODMsIDk3XSAoY29sb3IgOiAke1hYWH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gRk9SRUlHTl9FTEVNRU5UOiA4LTE0LCANCi1bOTcsIDk4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzk4LCAxMDFdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzEwMSwgMTI2XSAoYm9yZGVyLWNvbG9yIDogPCU9IFlZWSAlPikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEzLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRVhQOiAxNS0yNSwgDQotWzEyNiwgMTI3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEyNywgMTI5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyOSwgMTMwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzMCwgMTMyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDMuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDMuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjliNjQ4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAzLmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1bMCwgNF0gKAotCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIAotWzQsIDEwXSAoLmhvZ2UgKQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDAtNS82LCAKLVsxMCwgMTRdICh7Ci0JKQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNCwgCi1bMTQsIDI4XSAoY29sb3IgOiAke1hYWH0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBGT1JFSUdOX0VMRU1FTlQ6IDgtMTQsIAotWzI4LCAyOV0gKDspCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgCi1bMjksIDMyXSAoCi0JKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCAKLVszMiwgNTddIChib3JkZXItY29sb3IgOiA8JT0gWVlZICU+KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMy0xNC8xNSwgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0VYUDogMTUtMjUsIAotWzU3LCA1OF0gKDspCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgCi1bNTgsIDYwXSAoCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIAotWzYwLCA2MV0gKH0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgCi1bNjEsIDYzXSAoCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIAotCi0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjc2MGU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotWzAsIDczXSAoPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTY5LzczLCANCi1bNzMsIDc5XSAoLnB1Z2UgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAwLTUvNiwgDQotWzc5LCA4M10gKHsNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIA0KLVs4MywgODldICgke1hYWH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gRk9SRUlHTl9FTEVNRU5UOiAwLTYsIA0KLVs4OSwgOTBdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bOTAsIDkzXSAoDQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIA0KLVs5MywgMTExXSAoYm9yZGVyLWNvbG9yIDogcmVkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTMtMTQvMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE1LTE4LCANCi1bMTExLCAxMTJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTEyLCAxMTRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE0LCAxMTVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTE1LCAxMTddICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNC5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNC5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDQwNTc5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDQuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLVswLCA2XSAoLnB1Z2UgKQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDAtNS82LCAKLVs2LCAxMF0gKHsKLQkpCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCAKLVsxMCwgMTZdICgke1hYWH0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBGT1JFSUdOX0VMRU1FTlQ6IDAtNiwgCi1bMTYsIDE3XSAoOykKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCAKLVsxNywgMjBdICgKLQkpCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIAotWzIwLCAzOF0gKGJvcmRlci1jb2xvciA6IHJlZCkKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTMtMTQvMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE1LTE4LCAKLVszOCwgMzldICg7KQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIAotWzM5LCA0MV0gKAotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCAKLVs0MSwgNDJdICh9KQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIAotWzQyLCA0NF0gKAotKQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCAKLQotLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA1LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRkOTk5My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA1LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLVswLCA3MV0gKDwlQCBwYWdlIHNlc3Npb249ImZhbHNlIiBjb250ZW50VHlwZT0idGV4dC9jc3M7Y2hhcnNldD1JU08tODg1OS0xIiAlPg0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDU1NfSlNQX0RJUkVDVElWRTogMC02OS83MSwgDQotWzcxLCAxMDBdICg8JS0tIA0KLWpzcCANCi1jb21tZW50IA0KLS0tJT4NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogMC0yNy8yOSwgDQotWzEwMCwgMTAzXSAoSDEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLzMsIA0KLVsxMDMsIDEwN10gKHsNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIA0KLVsxMDcsIDEzMF0gKGJhY2tncm91bmQtY29sb3IgOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LzE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE5LTIzLCANCi1bMTMwLCAxMzFdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTMxLCAxMzNdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTMzLCAxMzRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTM0LCAxMzZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNS5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNS5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2ZmZjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDUuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLVswLCAzMV0gKAotPCUtLSAKLWpzcCAKLWNvbW1lbnQgCi0tLSU+Ci0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogMi0yOS8zMSwgCi1bMzEsIDM0XSAoSDEgKQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIvMywgCi1bMzQsIDM4XSAoewotCSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIAotWzM4LCA2MV0gKGJhY2tncm91bmQtY29sb3IgOiBibHVlKQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNy0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTktMjMsIAotWzYxLCA2Ml0gKDspCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgCi1bNjIsIDY0XSAoCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIAotWzY0LCA2NV0gKH0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgCi1bNjUsIDY3XSAoCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIAotCi0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA2LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyM2FjN2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotWzAsIDczXSAoPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IENTU19KU1BfRElSRUNUSVZFOiAwLTY5LzczLCANCi1bNzMsIDc2XSAoSDEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLzMsIA0KLVs3NiwgODBdICh7DQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCANCi1bODAsIDExMV0gKGJvcmRlci0ke1hYWH0gOiAwcHgsIHNvbGlkLCByZWQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNywgQ29udGV4dFJlZ2lvbi0tPiBGT1JFSUdOX0VMRU1FTlQ6IDctMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE2LTE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMjEtMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI2LTI3LzI4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAyOC0zMSwgDQotWzExMSwgMTEyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzExMiwgMTE0XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzExNCwgMTE1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzExNSwgMTE3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjcxZDcxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA2LmpzcGYKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1bMCwgNF0gKAotCi0pCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIAotWzQsIDddIChIMSApCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMi8zLCAKLVs3LCAxMV0gKHsKLQkpCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCAKLVsxMSwgNDJdIChib3JkZXItJHtYWFh9IDogMHB4LCBzb2xpZCwgcmVkKQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNywgQ29udGV4dFJlZ2lvbi0tPiBGT1JFSUdOX0VMRU1FTlQ6IDctMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE2LTE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMjEtMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI2LTI3LzI4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAyOC0zMSwgCi1bNDIsIDQzXSAoOykKLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCAKLVs0MywgNDVdICgKLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgCi1bNDUsIDQ2XSAofSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCAKLVs0NiwgNDhdICgKLSkKLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgCi0KLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9KU1BlZENTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyNjc4ZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvSlNQZWRDU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNWYyYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0pTUGVkQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNy5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi0KLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NzIzYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTwlQCBwYWdlIHNlc3Npb249ImZhbHNlIiBjb250ZW50VHlwZT0idGV4dC9jc3M7Y2hhcnNldD1JU08tODg1OS0xIiAlPg0KLQ0KLTwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzdGwvY29yZV9ydCIgcHJlZml4PSJjLXJ0IiAlPg0KLQ0KLTwlQCBpbmNsdWRlIGZpbGU9Ii4vY3NzanNwZnJhZ21lbnQuanNwZiIgJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAxLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAxLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4NmFlZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMS5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08JUAgdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc3RsL2NvcmVfcnQiIHByZWZpeD0iYy1ydCIgJT4KLQotPCVAIGluY2x1ZGUgZmlsZT0iLi9jc3Nqc3BmcmFnbWVudC5qc3BmIiAlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAwZDViNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotDQotLmhvZ2Ugew0KLQlmbG9hdCA6ICR7WFhYfTsNCi0JYm9yZGVyLSR7WFhYfS1jb2xvciA6IHJlZDsNCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMi5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMi5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzhhZDllLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDIuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotCi0KLS5ob2dlIHsKLQlmbG9hdCA6ICR7WFhYfTsKLQlib3JkZXItJHtYWFh9LWNvbG9yIDogcmVkOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhkZGI4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotDQotLmhvZ2Ugew0KLQljb2xvciA6ICR7WFhYfTsNCi0JYm9yZGVyLWNvbG9yIDogPCU9IFlZWSAlPjsNCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMy5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMy5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZTYzODM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDMuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotCi0KLS5ob2dlIHsKLQljb2xvciA6ICR7WFhYfTsKLQlib3JkZXItY29sb3IgOiA8JT0gWVlZICU+OwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTg3MDlhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotDQotLnB1Z2Ugew0KLQkke1hYWH07DQotCWJvcmRlci1jb2xvciA6IHJlZDsNCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNC5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNC5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjAzZDVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDQuanNwZgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotLnB1Z2UgewotCSR7WFhYfTsKLQlib3JkZXItY29sb3IgOiByZWQ7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA1LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTM5ZTU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgY29udGVudFR5cGU9InRleHQvY3NzO2NoYXJzZXQ9SVNPLTg4NTktMSIgJT4NCi08JS0tIA0KLWpzcCANCi1jb21tZW50IA0KLS0tJT4NCi1IMSB7DQotCWJhY2tncm91bmQtY29sb3IgOiBibHVlOw0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA1LmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA1LmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5OGEyNTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNS5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0KLTwlLS0gCi1qc3AgCi1jb21tZW50IAotLS0lPgotSDEgewotCWJhY2tncm91bmQtY29sb3IgOiBibHVlOwotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA2LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFiMzQ0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA2LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPCVAIHBhZ2Ugc2Vzc2lvbj0iZmFsc2UiIGNvbnRlbnRUeXBlPSJ0ZXh0L2NzcztjaGFyc2V0PUlTTy04ODU5LTEiICU+DQotDQotSDEgew0KLQlib3JkZXItJHtYWFh9IDogMHB4LCBzb2xpZCwgcmVkOw0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA2LmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA2LmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyMTZjZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNi5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi0KLQotSDEgewotCWJvcmRlci0ke1hYWH0gOiAwcHgsIHNvbGlkLCByZWQ7Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA3LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDcuanNwCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDcuanNwZiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDcuanNwZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA3LmpzcGYKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OWM0MzMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzLkpTUENvcmVUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzLzExNjA2Ni90YWdkZXAudGxkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy8xMTYwNjYvdGFnZGVwLnRsZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkZDY3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzLzExNjA2Ni90YWdkZXAudGxkCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbiA9ICIxLjAiID8+Ci08IURPQ1RZUEUgdGFnbGliIFBVQkxJQyAiLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIEpTUCBUYWcgTGlicmFyeSAxLjEvL0VOIiAiaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlL2R0ZHMvd2ViLWpzcHRhZ2xpYl8xXzIuZHRkIj4KLTx0YWdsaWI+Ci0JPHRsaWItdmVyc2lvbj4xLjE8L3RsaWItdmVyc2lvbj4KLQk8anNwLXZlcnNpb24+MS4xPC9qc3AtdmVyc2lvbj4KLQk8dXJpPnRhZ2RlcGVuZGVudDwvdXJpPgotCTxzaG9ydC1uYW1lPnRhZ2RlcGVuZGVudDwvc2hvcnQtbmFtZT4KLQk8ZGVzY3JpcHRpb24+Ci0JCVRoaXMgdGFnIGxpYnJhcnkgZGVtb25zdHJhdGVzIHRhZ2RlcGVuZGVudCB0YWcgaGFuZGxpbmcKLQkJdXNpbmcgaXRzICJjb2RlIiB0YWcuCi0JPC9kZXNjcmlwdGlvbj4KLQk8dGFnPgotCQk8bmFtZT5jb2RlPC9uYW1lPgotCQk8dGFnLWNsYXNzPmNvbS5leGFtcGxlLnRhZ2RlcC5Db2RlVGFnPC90YWctY2xhc3M+Ci0JCTxib2R5LWNvbnRlbnQ+dGFnZGVwZW5kZW50PC9ib2R5LWNvbnRlbnQ+Ci0JCTxhdHRyaWJ1dGU+Ci0JCQk8bmFtZT5mb250TmFtZTwvbmFtZT4KLQkJCTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLQkJCTx0eXBlPmphdmEubGFuZy5TdHJpbmc8L3R5cGU+Ci0JCTwvYXR0cmlidXRlPgotCQk8YXR0cmlidXRlPgotCQkJPG5hbWU+Ym9sZDwvbmFtZT4KLQkJCTx0eXBlPmJvb2xlYW48L3R5cGU+Ci0JCTwvYXR0cmlidXRlPgotCQk8YXR0cmlidXRlPgotCQkJPG5hbWU+aXRhbGljPC9uYW1lPgotCQkJPHR5cGU+Ym9vbGVhbjwvdHlwZT4KLQkJPC9hdHRyaWJ1dGU+Ci0JPC90YWc+Ci0JPHNtYWxsLWljb24+YnJvd3Nlcl9lZGl0b3IuZ2lmPC9zbWFsbC1pY29uPgotPC90YWdsaWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWMzYjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJXZWJDb250ZW50L1dFQi1JTkYvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNzU2MjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4Ly5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+YnVnXzEwNzMzODwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDMxOTRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+MTA3MzM4PC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0JPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9XZWJDb250ZW50L3Rlc3QxMDczMzguanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L1dlYkNvbnRlbnQvdGVzdDEwNzMzOC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MGY1ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L1dlYkNvbnRlbnQvdGVzdDEwNzMzOC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTxzY3JpcHQ+Ci08JQotICBpbnQgaSA9IDA7Ci0lPjwlPWklPjwlCi0gCi0lPgotPC9zY3JpcHQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L2J1aWxkL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzEwNzMzOC9idWlsZC9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L2J1aWxkL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMDczMzgvc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTA3MzM4L3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWMzYjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhMDhkYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5idWdfMTE4MjUxLWU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0aW9uYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZjliYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08dGFnbGliPgotCi0gICAgIDx0bGlidmVyc2lvbj4wLjAuMTwvdGxpYnZlcnNpb24+Ci0gICAgIDxqc3B2ZXJzaW9uPjEuMjwvanNwdmVyc2lvbj4KLSAgICAgPHNob3J0bmFtZT5zYW1wbGU8L3Nob3J0bmFtZT4KLSAgICAgPHVyaT5odHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlMl9mb3JfMTE4MjUxLWU8L3VyaT4KLSAgICAgPGluZm8+Ci0gICAgICAgIFRoaXMgdGFnIGxpYnJhcnkgY29udGFpbnMganVzdCBvbmUgdGFnLiAgSGEgaGEhIAotICAgICA8L2luZm8+Ci0KLSAgICAgPHRhZz4KLSAgICAgICA8bmFtZT5jb2RlPC9uYW1lPgotICAgICAgIDx0YWdjbGFzcz5zYW1wbGUudGFnbGliLkNvZGVUYWc8L3RhZ2NsYXNzPgotICAgICAgIDxib2R5Y29udGVudD50YWdkZXBlbmRlbnQ8L2JvZHljb250ZW50PgotICAgICAgIDxhdHRyaWJ1dGU+Ci0gICAgICAgICA8bmFtZT5mb250QXR0cmlidXRlczwvbmFtZT4KLSAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+Y29tbWVudENvbG9yPC9uYW1lPgotICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgIDxhdHRyaWJ1dGU+Ci0gICAgICAgICA8bmFtZT5zdHJpbmdDb2xvcjwvbmFtZT4KLSAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgPC90YWc+Ci0gICA8L3RhZ2xpYj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzMWU1NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPgotCXRlc3QxPC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0JPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL1dlYkNvbnRlbnQvdGVzdDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC90ZXN0MS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZTAwY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvV2ViQ29udGVudC90ZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImMiJT4KLTwlQHRhZ2xpYiBwcmVmaXg9InNhbXBsZSIgdXJpPSJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiIgJT4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNhbXBsZTpjb2RlPiBhc2RnamFsc2tqZ2EgIDw8IDwvc2FtcGxlOmNvZGU+Ci0KLTxjOm91dCB2YWx1ZT0iIj48L2M6b3V0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWUvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL2J1aWxkL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZS9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1lL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTlmMmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJsaWIiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJXZWJDb250ZW50L1dFQi1JTkYvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmU1NTBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+YnVnXzExODI1MS1mPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvdGxkL3NhbXBsZTJfZm9yXzExODI1MS1lLnRsZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGY5YmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPHRhZ2xpYj4KLQotICAgICA8dGxpYnZlcnNpb24+MC4wLjE8L3RsaWJ2ZXJzaW9uPgotICAgICA8anNwdmVyc2lvbj4xLjI8L2pzcHZlcnNpb24+Ci0gICAgIDxzaG9ydG5hbWU+c2FtcGxlPC9zaG9ydG5hbWU+Ci0gICAgIDx1cmk+aHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZTJfZm9yXzExODI1MS1lPC91cmk+Ci0gICAgIDxpbmZvPgotICAgICAgICBUaGlzIHRhZyBsaWJyYXJ5IGNvbnRhaW5zIGp1c3Qgb25lIHRhZy4gIEhhIGhhISAKLSAgICAgPC9pbmZvPgotCi0gICAgIDx0YWc+Ci0gICAgICAgPG5hbWU+Y29kZTwvbmFtZT4KLSAgICAgICA8dGFnY2xhc3M+c2FtcGxlLnRhZ2xpYi5Db2RlVGFnPC90YWdjbGFzcz4KLSAgICAgICA8Ym9keWNvbnRlbnQ+dGFnZGVwZW5kZW50PC9ib2R5Y29udGVudD4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+Zm9udEF0dHJpYnV0ZXM8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPmNvbW1lbnRDb2xvcjwvbmFtZT4KLSAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+c3RyaW5nQ29sb3I8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgIDwvdGFnPgotICAgPC90YWdsaWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2QwN2YwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT4KLQl0ZXN0MTwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci0JPHRhZ2xpYj4KLQkgIDx0YWdsaWItdXJpPi90YWdzL3NhbXBsZTI8L3RhZ2xpYi11cmk+Ci0JICA8dGFnbGliLWxvY2F0aW9uPi9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQ8L3RhZ2xpYi1sb2NhdGlvbj4KLQk8L3RhZ2xpYj4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1mL1dlYkNvbnRlbnQvdGVzdDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC90ZXN0MS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZTAwY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvV2ViQ29udGVudC90ZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImMiJT4KLTwlQHRhZ2xpYiBwcmVmaXg9InNhbXBsZSIgdXJpPSJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiIgJT4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNhbXBsZTpjb2RlPiBhc2RnamFsc2tqZ2EgIDw8IDwvc2FtcGxlOmNvZGU+Ci0KLTxjOm91dCB2YWx1ZT0iIj48L2M6b3V0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWYvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZi9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ1ZjVkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ibGliIiBwYXRoPSJXZWIgQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYiBDb250ZW50L1dFQi1JTkYvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDQxYjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+YnVnXzExODI1MS1nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24udmFsaWRhdGlvbmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZjliYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPHRhZ2xpYj4KLQotICAgICA8dGxpYnZlcnNpb24+MC4wLjE8L3RsaWJ2ZXJzaW9uPgotICAgICA8anNwdmVyc2lvbj4xLjI8L2pzcHZlcnNpb24+Ci0gICAgIDxzaG9ydG5hbWU+c2FtcGxlPC9zaG9ydG5hbWU+Ci0gICAgIDx1cmk+aHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZTJfZm9yXzExODI1MS1lPC91cmk+Ci0gICAgIDxpbmZvPgotICAgICAgICBUaGlzIHRhZyBsaWJyYXJ5IGNvbnRhaW5zIGp1c3Qgb25lIHRhZy4gIEhhIGhhISAKLSAgICAgPC9pbmZvPgotCi0gICAgIDx0YWc+Ci0gICAgICAgPG5hbWU+Y29kZTwvbmFtZT4KLSAgICAgICA8dGFnY2xhc3M+c2FtcGxlLnRhZ2xpYi5Db2RlVGFnPC90YWdjbGFzcz4KLSAgICAgICA8Ym9keWNvbnRlbnQ+dGFnZGVwZW5kZW50PC9ib2R5Y29udGVudD4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+Zm9udEF0dHJpYnV0ZXM8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPmNvbW1lbnRDb2xvcjwvbmFtZT4KLSAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+c3RyaW5nQ29sb3I8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgIDwvdGFnPgotICAgPC90YWdsaWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZDA3ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvV2ViIENvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT4KLQl0ZXN0MTwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci0JPHRhZ2xpYj4KLQkgIDx0YWdsaWItdXJpPi90YWdzL3NhbXBsZTI8L3RhZ2xpYi11cmk+Ci0JICA8dGFnbGliLWxvY2F0aW9uPi9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQ8L3RhZ2xpYi1sb2NhdGlvbj4KLQk8L3RhZ2xpYj4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L3Rlc3QxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1nL1dlYiBDb250ZW50L3Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJlMDBjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9XZWIgQ29udGVudC90ZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImMiJT4KLTwlQHRhZ2xpYiBwcmVmaXg9InNhbXBsZSIgdXJpPSJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiIgJT4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNhbXBsZTpjb2RlPiBhc2RnamFsc2tqZ2EgIDw8IDwvc2FtcGxlOmNvZGU+Ci0KLTxjOm91dCB2YWx1ZT0iIj48L2M6b3V0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLWcvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtZy9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtc2FtcGxlL3NhbXBsZV90bGQuamFyIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE5OGM0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xMTgyNTEtc2FtcGxlL3NhbXBsZV90bGQuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzExODI1MS1zYW1wbGUvc2FtcGxlX3RsZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MDMwMzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTE4MjUxLXNhbXBsZS9zYW1wbGVfdGxkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotVGhlIGFjY29tcGFueWluZyBqYXIgY29udGFpbnMgYSBUTEQgd2l0aCBhIFVSSSBzcGVjaWZpZWQgaW4KLWl0IGFzIHdlbGwgYXMgYSBiaWcgbG9uZyBmaWxlIHRoYXQgc2hvdWxkIHNsb3cgZG93biB0aGUKLXRhZ2xpYiBpbmRleGluZy4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMmFlNDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5jb250YWluZXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC53ZWIuY29udGFpbmVyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYnVpbGQvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFjN2JmZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+YnVnXzE0ODcxNzwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLm5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUuTW9kdWxlQ29yZU5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2guSmF2YUVNRk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlOGJjOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI01vbiBNYXkgMDEgMTM6NDE6MTggRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYzAxMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBNYXkgMDEgMTM6NDE6MjQgRURUIDIwMDYKLWNsYXNzcGF0aC5oZWxwZXIvb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSXDpcOm9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZVw6XDoxLjUuMF8wMy9vd25lcnM9anN0LmphdmFcOjUuMAotY2xhc3NwYXRoLmhlbHBlci9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuY29udGFpbmVyXDpcOm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWVUYXJnZXRcOlw6QXBhY2hlXCBUb21jYXRcIHY1LjUuOS9vd25lcnM9anN0LndlYlw6Mi40Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ZWQ1NmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0LW1vZHVsZXMgaWQ9Im1vZHVsZUNvcmVJZCIgcHJvamVjdC12ZXJzaW9uPSIxLjUuMCI+Ci08d2ItbW9kdWxlIGRlcGxveS1uYW1lPSJidWdfMTQ4NzE3Ij4KLTx3Yi1yZXNvdXJjZSBkZXBsb3ktcGF0aD0iLyIgc291cmNlLXBhdGg9Ii9XZWJDb250ZW50Ii8+Ci08d2ItcmVzb3VyY2UgZGVwbG95LXBhdGg9Ii9XRUItSU5GL2NsYXNzZXMiIHNvdXJjZS1wYXRoPSIvc3JjIi8+Ci08cHJvcGVydHkgbmFtZT0iY29udGV4dC1yb290IiB2YWx1ZT0iYnVnXzE0ODcxNyIvPgotPHByb3BlcnR5IG5hbWU9ImphdmEtb3V0cHV0LXBhdGgiIHZhbHVlPSJidWlsZC9jbGFzc2VzIi8+Ci08L3diLW1vZHVsZT4KLTwvcHJvamVjdC1tb2R1bGVzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3Ly5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzliOWI0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmYWNldGVkLXByb2plY3Q+Ci0gIDxydW50aW1lIG5hbWU9IkFwYWNoZSBUb21jYXQgdjUuNS45Ii8+Ci0gIDxmaXhlZCBmYWNldD0ianN0LmphdmEiLz4KLSAgPGZpeGVkIGZhY2V0PSJqc3Qud2ViIi8+Ci0gIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC5qYXZhIiB2ZXJzaW9uPSI1LjAiLz4KLSAgPGluc3RhbGxlZCBmYWNldD0ianN0LndlYiIgdmVyc2lvbj0iMi40Ii8+Ci08L2ZhY2V0ZWQtcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3L1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3L1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy9XZWJDb250ZW50L1dFQi1JTkYvbGliL2ludGVybmFsLmphciBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy9XZWJDb250ZW50L1dFQi1JTkYvbGliL2ludGVybmFsLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJhZDI3Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvV2ViQ29udGVudC9XRUItSU5GL2xpYi9pbnRlcm5hbC5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NTM2NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3L1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJwcmoxMTk1NzZfYyIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPnByajExOTU3Nl9jPC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0JPC93ZWxjb21lLWZpbGUtbGlzdD4KLQk8dGFnbGliPgotCQk8dGFnbGliLXVyaT5odHRwOi8vZXhhbXBsZS5jb20vZXh0ZXJuYWwtdXJpPC90YWdsaWItdXJpPgotCQk8dGFnbGliLWxvY2F0aW9uPi9XRUItSU5GL2xpYi9pbnRlcm5hbC5qYXI8L3RhZ2xpYi1sb2NhdGlvbj4KLQk8L3RhZ2xpYj4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy9iaW4vLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy9iaW4vLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvYmluLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3L2J1aWxkL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0ODcxNy9idWlsZC9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3L2J1aWxkL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDg3MTcvc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQ4NzE3L3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z184NzM1MS8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWMzYjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzNzIwZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5idWdfODczNTE8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z184NzM1MS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z184NzM1MS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmODBhNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9IldlYkFwcF9JRCIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPmJ1Z184NzM1MTwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z184NzM1MS9XZWJDb250ZW50L2loYXZlZXJyb3JzLmpzcGYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z184NzM1MS9XZWJDb250ZW50L2loYXZlZXJyb3JzLmpzcGYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiYWZmNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvV2ViQ29udGVudC9paGF2ZWVycm9ycy5qc3BmCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCUgU3RyaW5nIHRoaXMgaXMgYnJva2VuICU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9idWdfODczNTEvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxL2J1aWxkL2NsYXNzZXMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL2J1Z184NzM1MS9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzg3MzUxL3NyYy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2MyYWU0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5jb250YWluZXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qc3QuajJlZS5pbnRlcm5hbC53ZWIuY29udGFpbmVyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYnVpbGQvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIyNWZhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+cHJqMTE5NTc2X2E8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLnZhbGlkYXRpb25idWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5uYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlLk1vZHVsZUNvcmVOYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZW0ud29ya2JlbmNoLkphdmFFTUZOYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlOGJjOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLSNNb24gTWF5IDAxIDEzOjQxOjE4IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYzAxMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNNb24gTWF5IDAxIDEzOjQxOjI0IEVEVCAyMDA2Ci1jbGFzc3BhdGguaGVscGVyL29yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUlw6XDpvcmcuZWNsaXBzZS5qZHQuaW50ZXJuYWwuZGVidWcudWkubGF1bmNoZXIuU3RhbmRhcmRWTVR5cGVcOlw6MS41LjBfMDMvb3duZXJzPWpzdC5qYXZhXDo1LjAKLWNsYXNzcGF0aC5oZWxwZXIvb3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLmNvbnRhaW5lclw6XDpvcmcuZWNsaXBzZS5qc3Quc2VydmVyLnRvbWNhdC5ydW50aW1lVGFyZ2V0XDpcOkFwYWNoZVwgVG9tY2F0XCB2NS41Ljkvb3duZXJzPWpzdC53ZWJcOjIuNAotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlZTBjMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdC1tb2R1bGVzIGlkPSJtb2R1bGVDb3JlSWQiIHByb2plY3QtdmVyc2lvbj0iMS41LjAiPgotPHdiLW1vZHVsZSBkZXBsb3ktbmFtZT0iQ2xlYW5UZXN0V2ViIj4KLTx3Yi1yZXNvdXJjZSBkZXBsb3ktcGF0aD0iLyIgc291cmNlLXBhdGg9Ii9XZWJDb250ZW50Ii8+Ci08d2ItcmVzb3VyY2UgZGVwbG95LXBhdGg9Ii9XRUItSU5GL2NsYXNzZXMiIHNvdXJjZS1wYXRoPSIvc3JjIi8+Ci08cHJvcGVydHkgbmFtZT0iY29udGV4dC1yb290IiB2YWx1ZT0iQ2xlYW5UZXN0V2ViIi8+Ci08cHJvcGVydHkgbmFtZT0iamF2YS1vdXRwdXQtcGF0aCIgdmFsdWU9ImJ1aWxkL2NsYXNzZXMiLz4KLTwvd2ItbW9kdWxlPgotPC9wcm9qZWN0LW1vZHVsZXM+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YjliNGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGZhY2V0ZWQtcHJvamVjdD4KLSAgPHJ1bnRpbWUgbmFtZT0iQXBhY2hlIFRvbWNhdCB2NS41LjkiLz4KLSAgPGZpeGVkIGZhY2V0PSJqc3QuamF2YSIvPgotICA8Zml4ZWQgZmFjZXQ9ImpzdC53ZWIiLz4KLSAgPGluc3RhbGxlZCBmYWNldD0ianN0LmphdmEiIHZlcnNpb249IjUuMCIvPgotICA8aW5zdGFsbGVkIGZhY2V0PSJqc3Qud2ViIiB2ZXJzaW9uPSIyLjQiLz4KLTwvZmFjZXRlZC1wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1DbGFzcy1QYXRoOiAKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTk4YzQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjIzMjczLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHdlYi1hcHAgaWQ9InByajExOTU3Nl9hIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+cHJqMTE5NTc2X2E8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotPC93ZWItYXBwPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L2JvZHkuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L2JvZHkuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzlhNDRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC9ib2R5LmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTwlQCBpbmNsdWRlIGZpbGUgPSAiaGVhZGVyLmpzcCIgJT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvYm9keTEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L2JvZHkxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTU1NDliNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvYm9keTEuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCVAIGluY2x1ZGUgZmlsZSA9ICJ0YWdsaWIuanNwZiIgJT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvYm9keTIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L2JvZHkyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNThkYjViZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvYm9keTIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08JUAgaW5jbHVkZSBmaWxlID0gImJvZHkuanNwIiAlPgotPCVAIGluY2x1ZGUgZmlsZSA9ICJib2R5MS5qc3AiICU+Ci08c2FtcGxlOmNvZGUvPgotPCUgamF2YS51dGlsLkRhdGUgYm9keURhdGUgPSBoZWFkZXJEYXRlOyAlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L2hlYWRlci5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvaGVhZGVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUzOWZkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvaGVhZGVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCUgamF2YS51dGlsLkRhdGUgaGVhZGVyRGF0ZSA9IG51bGw7ICU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L3RhZ2xpYi5qc3BmIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L3RhZ2xpYi5qc3BmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzJkODZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvV2ViQ29udGVudC90YWdsaWIuanNwZgorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUtdGFnbGliIiBwcmVmaXg9InNhbXBsZSIgJT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvdGVzdDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9XZWJDb250ZW50L3Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNkYjU0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL1dlYkNvbnRlbnQvdGVzdDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPCU9IkhlbGxvLCBXb3JsZCEiJT4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL2Jpbi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9iaW4vLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9hL2Jpbi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2EvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9idWlsZC9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9idWlsZC9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2Evc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYS9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMmFlNDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuY29udGFpbmVyIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuanN0LmoyZWUuaW50ZXJuYWwud2ViLmNvbnRhaW5lciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJ1aWxkL2NsYXNzZXMiLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMjVmYWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPnByajExOTU3Nl9hPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUuYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi52YWxpZGF0aW9uYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUubmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ubW9kdWxlY29yZS5Nb2R1bGVDb3JlTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamVtLndvcmtiZW5jaC5KYXZhRU1GTmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZThiYzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jTW9uIE1heSAwMSAxMzo0MToxOCBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS40CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmMwMTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIE1heSAwMSAxMzo0MToyNCBFRFQgMjAwNgotY2xhc3NwYXRoLmhlbHBlci9vcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVJcOlw6b3JnLmVjbGlwc2UuamR0LmludGVybmFsLmRlYnVnLnVpLmxhdW5jaGVyLlN0YW5kYXJkVk1UeXBlXDpcOjEuNS4wXzAzL293bmVycz1qc3QuamF2YVw6NS4wCi1jbGFzc3BhdGguaGVscGVyL29yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIuY29yZS5jb250YWluZXJcOlw6b3JnLmVjbGlwc2UuanN0LnNlcnZlci50b21jYXQucnVudGltZVRhcmdldFw6XDpBcGFjaGVcIFRvbWNhdFwgdjUuNS45L293bmVycz1qc3Qud2ViXDoyLjQKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWUwYzE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24uY29tcG9uZW50CisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3QtbW9kdWxlcyBpZD0ibW9kdWxlQ29yZUlkIiBwcm9qZWN0LXZlcnNpb249IjEuNS4wIj4KLTx3Yi1tb2R1bGUgZGVwbG95LW5hbWU9IkNsZWFuVGVzdFdlYiI+Ci08d2ItcmVzb3VyY2UgZGVwbG95LXBhdGg9Ii8iIHNvdXJjZS1wYXRoPSIvV2ViQ29udGVudCIvPgotPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvV0VCLUlORi9jbGFzc2VzIiBzb3VyY2UtcGF0aD0iL3NyYyIvPgotPHByb3BlcnR5IG5hbWU9ImNvbnRleHQtcm9vdCIgdmFsdWU9IkNsZWFuVGVzdFdlYiIvPgotPHByb3BlcnR5IG5hbWU9ImphdmEtb3V0cHV0LXBhdGgiIHZhbHVlPSJidWlsZC9jbGFzc2VzIi8+Ci08L3diLW1vZHVsZT4KLTwvcHJvamVjdC1tb2R1bGVzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOWI5YjRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxmYWNldGVkLXByb2plY3Q+Ci0gIDxydW50aW1lIG5hbWU9IkFwYWNoZSBUb21jYXQgdjUuNS45Ii8+Ci0gIDxmaXhlZCBmYWNldD0ianN0LmphdmEiLz4KLSAgPGZpeGVkIGZhY2V0PSJqc3Qud2ViIi8+Ci0gIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC5qYXZhIiB2ZXJzaW9uPSI1LjAiLz4KLSAgPGluc3RhbGxlZCBmYWNldD0ianN0LndlYiIgdmVyc2lvbj0iMi40Ii8+Ci08L2ZhY2V0ZWQtcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MjcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE5OGM0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJhOGJlZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJwcmoxMTk1NzZfYiIgdmVyc2lvbj0iMi40IiB4bWxucz0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIGh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUvd2ViLWFwcF8yXzQueHNkIj4KLQk8ZGlzcGxheS1uYW1lPnByajExOTU3Nl9iPC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0JPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9ib2R5MS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvYm9keTEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNzlhNDRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9ib2R5MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08JUAgaW5jbHVkZSBmaWxlID0gImhlYWRlci5qc3AiICU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L2JvZHkzLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvV2ViQ29udGVudC9ib2R5My5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyOGQyNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L2JvZHkzLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTwlQGluY2x1ZGUgZmlsZSA9ICJib2R5MS5qc3AiICU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9XZWJDb250ZW50L2hlYWRlci5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvaGVhZGVyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVjZjI3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL1dlYkNvbnRlbnQvaGVhZGVyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiIHByZWZpeD0ic2FtcGxlIiAlPgotPCUgamF2YS51dGlsLkRhdGUgaGVhZGVyRGF0ZSA9IG51bGw7ICU+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9iaW4vLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvYmluLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYi9iaW4vLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL2J1aWxkL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2IvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2Ivc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9iL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2Ivc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzJhZTQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuanN0LnNlcnZlci5jb3JlLmNvbnRhaW5lciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpzdC5qMmVlLmludGVybmFsLndlYi5jb250YWluZXIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJidWlsZC9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDlmNGIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5wcmoxMTk1NzZfYzwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLmJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLm5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS53c3QuY29tbW9uLm1vZHVsZWNvcmUuTW9kdWxlQ29yZU5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmplbS53b3JrYmVuY2guSmF2YUVNRk5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU4YmM5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotI01vbiBNYXkgMDEgMTM6NDE6MTggRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuNApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuanN0LmNvbW1vbi5wcm9qZWN0LmZhY2V0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZjMDEyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qc3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBNYXkgMDEgMTM6NDE6MjQgRURUIDIwMDYKLWNsYXNzcGF0aC5oZWxwZXIvb3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSXDpcOm9yZy5lY2xpcHNlLmpkdC5pbnRlcm5hbC5kZWJ1Zy51aS5sYXVuY2hlci5TdGFuZGFyZFZNVHlwZVw6XDoxLjUuMF8wMy9vd25lcnM9anN0LmphdmFcOjUuMAotY2xhc3NwYXRoLmhlbHBlci9vcmcuZWNsaXBzZS5qc3Quc2VydmVyLmNvcmUuY29udGFpbmVyXDpcOm9yZy5lY2xpcHNlLmpzdC5zZXJ2ZXIudG9tY2F0LnJ1bnRpbWVUYXJnZXRcOlw6QXBhY2hlXCBUb21jYXRcIHY1LjUuOS9vd25lcnM9anN0LndlYlw6Mi40Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5jb21wb25lbnQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVlMGMxNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0LW1vZHVsZXMgaWQ9Im1vZHVsZUNvcmVJZCIgcHJvamVjdC12ZXJzaW9uPSIxLjUuMCI+Ci08d2ItbW9kdWxlIGRlcGxveS1uYW1lPSJDbGVhblRlc3RXZWIiPgotPHdiLXJlc291cmNlIGRlcGxveS1wYXRoPSIvIiBzb3VyY2UtcGF0aD0iL1dlYkNvbnRlbnQiLz4KLTx3Yi1yZXNvdXJjZSBkZXBsb3ktcGF0aD0iL1dFQi1JTkYvY2xhc3NlcyIgc291cmNlLXBhdGg9Ii9zcmMiLz4KLTxwcm9wZXJ0eSBuYW1lPSJjb250ZXh0LXJvb3QiIHZhbHVlPSJDbGVhblRlc3RXZWIiLz4KLTxwcm9wZXJ0eSBuYW1lPSJqYXZhLW91dHB1dC1wYXRoIiB2YWx1ZT0iYnVpbGQvY2xhc3NlcyIvPgotPC93Yi1tb2R1bGU+Ci08L3Byb2plY3QtbW9kdWxlcz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvLnNldHRpbmdzL29yZy5lY2xpcHNlLndzdC5jb21tb24ucHJvamVjdC5mYWNldC5jb3JlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzliOWI0Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS53c3QuY29tbW9uLnByb2plY3QuZmFjZXQuY29yZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08ZmFjZXRlZC1wcm9qZWN0PgotICA8cnVudGltZSBuYW1lPSJBcGFjaGUgVG9tY2F0IHY1LjUuOSIvPgotICA8Zml4ZWQgZmFjZXQ9ImpzdC5qYXZhIi8+Ci0gIDxmaXhlZCBmYWNldD0ianN0LndlYiIvPgotICA8aW5zdGFsbGVkIGZhY2V0PSJqc3QuamF2YSIgdmVyc2lvbj0iNS4wIi8+Ci0gIDxpbnN0YWxsZWQgZmFjZXQ9ImpzdC53ZWIiIHZlcnNpb249IjIuNCIvPgotPC9mYWNldGVkLXByb2plY3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvc2FtcGxlX3RsZC5qYXIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhOThjNDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L1dFQi1JTkYvbGliL3NhbXBsZV90bGQuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNTYwZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0icHJqMTE5NTc2X2MiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT5wcmoxMTk1NzZfYzwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvYm9keTEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L2JvZHkxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmFhMjI4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvYm9keTEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08JUAgaW5jbHVkZSBmaWxlID0gImhlYWRlci5qc3AiICU+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9ib2R5My5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL1dlYkNvbnRlbnQvYm9keTMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MWM3M2NmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9ib2R5My5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTwlQGluY2x1ZGUgZmlsZSA9ICJib2R5MS5qc3AiICU+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvV2ViQ29udGVudC9oZWFkZXIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L2hlYWRlci5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwM2M3YTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9XZWJDb250ZW50L2hlYWRlci5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUtdGFnbGliIiBwcmVmaXg9InNhbXBsZSIgJT4KLTwlIGphdmEudXRpbC5EYXRlIGhlYWRlckRhdGUgPSBudWxsOyAlPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL2Jpbi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9iaW4vLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3ByajExOTU3Nl9jL2Jpbi8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2MvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9idWlsZC9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9idWlsZC9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvcHJqMTE5NTc2X2Mvc3JjLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy9wcmoxMTk1NzZfYy9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNWY0ZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkgY29tYmluZWFjY2Vzc3J1bGVzPSJmYWxzZSIgZXhwb3J0ZWQ9ImZhbHNlIiBraW5kPSJzcmMiIHBhdGg9Ii90ZXN0YXZhaWxhYmxlMiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTEvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmFhYWRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTEvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT50ZXN0YXZhaWxhYmxlMTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTEvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTEvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZDA3ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+Ci0JdGVzdDE8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotCTx0YWdsaWI+Ci0JICA8dGFnbGliLXVyaT4vdGFncy9zYW1wbGUyPC90YWdsaWItdXJpPgotCSAgPHRhZ2xpYi1sb2NhdGlvbj4vV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkPC90YWdsaWItbG9jYXRpb24+Ci0JPC90YWdsaWI+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQvdGVzdDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMS9XZWJDb250ZW50L3Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJlMDBjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL1dlYkNvbnRlbnQvdGVzdDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJjIiU+Ci08JUB0YWdsaWIgcHJlZml4PSJzYW1wbGUiIHVyaT0iaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiICU+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzYW1wbGU6Y29kZT4gYXNkZ2phbHNramdhICA8PCA8L3NhbXBsZTpjb2RlPgotCi08YzpvdXQgdmFsdWU9IiI+PC9jOm91dD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTEvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUxL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTEvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYTlmMmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YmFhYWRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT50ZXN0YXZhaWxhYmxlMTwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZDA3ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+Ci0JdGVzdDE8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotCTx0YWdsaWI+Ci0JICA8dGFnbGliLXVyaT4vdGFncy9zYW1wbGUyPC90YWdsaWItdXJpPgotCSAgPHRhZ2xpYi1sb2NhdGlvbj4vV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkPC90YWdsaWItbG9jYXRpb24+Ci0JPC90YWdsaWI+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvdGVzdDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0YXZhaWxhYmxlMi9XZWJDb250ZW50L3Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJlMDBjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL1dlYkNvbnRlbnQvdGVzdDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJjIiU+Ci08JUB0YWdsaWIgcHJlZml4PSJzYW1wbGUiIHVyaT0iaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiICU+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzYW1wbGU6Y29kZT4gYXNkZ2phbHNramdhICA8PCA8L3NhbXBsZTpjb2RlPgotCi08YzpvdXQgdmFsdWU9IiI+PC9jOm91dD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RhdmFpbGFibGUyL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGF2YWlsYWJsZTIvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE5ZjJiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImxpYiIgcGF0aD0iV2ViQ29udGVudC9XRUItSU5GL2xpYi9zYW1wbGVfdGxkLmphciIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9IldlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMzNWY2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT50ZXN0Y2FjaGUxPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NDI3MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvV2ViQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvV2ViQ29udGVudC9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZjliYzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotPHRhZ2xpYj4KLQotICAgICA8dGxpYnZlcnNpb24+MC4wLjE8L3RsaWJ2ZXJzaW9uPgotICAgICA8anNwdmVyc2lvbj4xLjI8L2pzcHZlcnNpb24+Ci0gICAgIDxzaG9ydG5hbWU+c2FtcGxlPC9zaG9ydG5hbWU+Ci0gICAgIDx1cmk+aHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZTJfZm9yXzExODI1MS1lPC91cmk+Ci0gICAgIDxpbmZvPgotICAgICAgICBUaGlzIHRhZyBsaWJyYXJ5IGNvbnRhaW5zIGp1c3Qgb25lIHRhZy4gIEhhIGhhISAKLSAgICAgPC9pbmZvPgotCi0gICAgIDx0YWc+Ci0gICAgICAgPG5hbWU+Y29kZTwvbmFtZT4KLSAgICAgICA8dGFnY2xhc3M+c2FtcGxlLnRhZ2xpYi5Db2RlVGFnPC90YWdjbGFzcz4KLSAgICAgICA8Ym9keWNvbnRlbnQ+dGFnZGVwZW5kZW50PC9ib2R5Y29udGVudD4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+Zm9udEF0dHJpYnV0ZXM8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPmNvbW1lbnRDb2xvcjwvbmFtZT4KLSAgICAgICA8L2F0dHJpYnV0ZT4KLSAgICAgICA8YXR0cmlidXRlPgotICAgICAgICAgPG5hbWU+c3RyaW5nQ29sb3I8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgIDwvdGFnPgotICAgPC90YWdsaWI+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvV2ViQ29udGVudC9XRUItSU5GL3dlYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzZDA3ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT4KLQl0ZXN0MTwvZGlzcGxheS1uYW1lPgotCTx3ZWxjb21lLWZpbGUtbGlzdD4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguanNwPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG1sPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0LmpzcDwvd2VsY29tZS1maWxlPgotCTwvd2VsY29tZS1maWxlLWxpc3Q+Ci0JPHRhZ2xpYj4KLQkgIDx0YWdsaWItdXJpPi90YWdzL3NhbXBsZTI8L3RhZ2xpYi11cmk+Ci0JICA8dGFnbGliLWxvY2F0aW9uPi9XRUItSU5GL3RsZC9zYW1wbGUyX2Zvcl8xMTgyNTEtZS50bGQ8L3RhZ2xpYi1sb2NhdGlvbj4KLQk8L3RhZ2xpYj4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS9XZWJDb250ZW50L3Rlc3QxLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS9XZWJDb250ZW50L3Rlc3QxLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJlMDBjZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTEvV2ViQ29udGVudC90ZXN0MS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIgotICAgIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMSIlPgotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImMiJT4KLTwlQHRhZ2xpYiBwcmVmaXg9InNhbXBsZSIgdXJpPSJodHRwOi8vZXhhbXBsZS5jb20vc2FtcGxlLXRhZ2xpYiIgJT4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLQotPHNhbXBsZTpjb2RlPiBhc2RnamFsc2tqZ2EgIDw8IDwvc2FtcGxlOmNvZGU+Ci0KLTxjOm91dCB2YWx1ZT0iIj48L2M6b3V0PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL3NyYy8ua2VlcG1lIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUxL3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMS9zcmMvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWMzYjNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJXZWJDb250ZW50L1dFQi1JTkYvY2xhc3NlcyIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3NDI5M2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUyLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+dGVzdGNhY2hlMjwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTQyNzJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUNsYXNzLVBhdGg6IAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L1dFQi1JTkYvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvV2ViQ29udGVudC9XRUItSU5GL2xpYi8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQvV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGY5YmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L1dFQi1JTkYvdGxkL3NhbXBsZTJfZm9yXzExODI1MS1lLnRsZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTx0YWdsaWI+Ci0KLSAgICAgPHRsaWJ2ZXJzaW9uPjAuMC4xPC90bGlidmVyc2lvbj4KLSAgICAgPGpzcHZlcnNpb24+MS4yPC9qc3B2ZXJzaW9uPgotICAgICA8c2hvcnRuYW1lPnNhbXBsZTwvc2hvcnRuYW1lPgotICAgICA8dXJpPmh0dHA6Ly9leGFtcGxlLmNvbS9zYW1wbGUyX2Zvcl8xMTgyNTEtZTwvdXJpPgotICAgICA8aW5mbz4KLSAgICAgICAgVGhpcyB0YWcgbGlicmFyeSBjb250YWlucyBqdXN0IG9uZSB0YWcuICBIYSBoYSEgCi0gICAgIDwvaW5mbz4KLQotICAgICA8dGFnPgotICAgICAgIDxuYW1lPmNvZGU8L25hbWU+Ci0gICAgICAgPHRhZ2NsYXNzPnNhbXBsZS50YWdsaWIuQ29kZVRhZzwvdGFnY2xhc3M+Ci0gICAgICAgPGJvZHljb250ZW50PnRhZ2RlcGVuZGVudDwvYm9keWNvbnRlbnQ+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPmZvbnRBdHRyaWJ1dGVzPC9uYW1lPgotICAgICAgIDwvYXR0cmlidXRlPgotICAgICAgIDxhdHRyaWJ1dGU+Ci0gICAgICAgICA8bmFtZT5jb21tZW50Q29sb3I8L25hbWU+Ci0gICAgICAgPC9hdHRyaWJ1dGU+Ci0gICAgICAgPGF0dHJpYnV0ZT4KLSAgICAgICAgIDxuYW1lPnN0cmluZ0NvbG9yPC9uYW1lPgotICAgICAgIDwvYXR0cmlidXRlPgotICAgICA8L3RhZz4KLSAgIDwvdGFnbGliPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2QwN2YwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotCTxkaXNwbGF5LW5hbWU+Ci0JdGVzdDE8L2Rpc3BsYXktbmFtZT4KLQk8d2VsY29tZS1maWxlLWxpc3Q+Ci0JCTx3ZWxjb21lLWZpbGU+aW5kZXguaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmluZGV4LmpzcDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtbDwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuaHRtPC93ZWxjb21lLWZpbGU+Ci0JCTx3ZWxjb21lLWZpbGU+ZGVmYXVsdC5qc3A8L3dlbGNvbWUtZmlsZT4KLQk8L3dlbGNvbWUtZmlsZS1saXN0PgotCTx0YWdsaWI+Ci0JICA8dGFnbGliLXVyaT4vdGFncy9zYW1wbGUyPC90YWdsaWItdXJpPgotCSAgPHRhZ2xpYi1sb2NhdGlvbj4vV0VCLUlORi90bGQvc2FtcGxlMl9mb3JfMTE4MjUxLWUudGxkPC90YWdsaWItbG9jYXRpb24+Ci0JPC90YWdsaWI+Ci08L3dlYi1hcHA+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvV2ViQ29udGVudC90ZXN0MS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvV2ViQ29udGVudC90ZXN0MS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJiZTAwY2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLnRlc3RzL3Rlc3RmaWxlcy90ZXN0Y2FjaGUyL1dlYkNvbnRlbnQvdGVzdDEuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCVAIHBhZ2UgbGFuZ3VhZ2U9ImphdmEiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSIKLSAgICBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiJT4KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPCVAdGFnbGliIHVyaT0iaHR0cDovL2phdmEuc3VuLmNvbS9qc2YvY29yZSIgcHJlZml4PSJjIiU+Ci08JUB0YWdsaWIgcHJlZml4PSJzYW1wbGUiIHVyaT0iaHR0cDovL2V4YW1wbGUuY29tL3NhbXBsZS10YWdsaWIiICU+Ci08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08dGl0bGU+SW5zZXJ0IHRpdGxlIGhlcmU8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci0KLTxzYW1wbGU6Y29kZT4gYXNkZ2phbHNramdhICA8PCA8L3NhbXBsZTpjb2RlPgotCi08YzpvdXQgdmFsdWU9IiI+PC9jOm91dD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9zcmMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXN0cy90ZXN0ZmlsZXMvdGVzdGNhY2hlMi9zcmMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGVzdHMvdGVzdGZpbGVzL3Rlc3RjYWNoZTIvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmY4MmM3Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgotanNwZW5jb2Rpbmd0ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWE2MWQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4ZjJkYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBqc3BlbmNvZGluZ3Rlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZwotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjNTk4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5NYXkgMiwgMjAwNjwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0MzA0YjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotc291cmNlLmpzcGVuY29kaW5ndGVzdHMuamFyID0gc3JjLwotb3V0cHV0LmpzcGVuY29kaW5ndGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0ganNwZW5jb2Rpbmd0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc3JjLmluY2x1ZGVzID0gdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGIxYjdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwotQnVuZGxlLU5hbWUuMCA9IEpTUCBFbmNvZGluZyBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9KU1BFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9KU1BFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2NmYWEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvSlNQRW5jb2RpbmdUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcC5KU1BFbmNvZGluZ1Rlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwLkpTUEhlYWRUb2tlbml6ZXJUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3AuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQOwotCi1wdWJsaWMgY2xhc3MgSlNQRW5jb2RpbmdUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117SlNQRW5jb2RpbmdUZXN0cy5jbGFzcywgSlNQSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySlNQLmNsYXNzfTsKLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBKU1BFbmNvZGluZ1Rlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBKU1BFbmNvZGluZ1Rlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkpTUCBFbmNvZGluZyBUZXN0IFN1aXRlIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewotCQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKGNsYXNzZXNbaV0sIGNsYXNzZXNbaV0uZ2V0TmFtZSgpKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKi8KLQlwdWJsaWMgSlNQRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEpTUEVuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcih0aGVDbGFzcywgbmFtZSk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgSlNQRW5jb2RpbmdUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvSlNQRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZTBjNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgSlNQRW5jb2RpbmdUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBKU1BFbmNvZGluZ1Rlc3RzUGx1Z2luIHBsdWdpbjsKLQotCXB1YmxpYyBzdGF0aWMgTGlzdCBnZXRBbGxUZXN0RmlsZXMoU3RyaW5nIHRvcERpck5hbWUpIHsKLQkJTGlzdCByZXN1bHQgPSBudWxsOwotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgdG9wRGlyTmFtZTsKLQkJRmlsZSB0b3BEaXIgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCWlmICghdG9wRGlyLmlzRGlyZWN0b3J5KCkpIHsKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24odG9wRGlyTmFtZSArICIgaXMgbm90IGEgZGlyZWN0b3J5Iik7Ci0JCX0KLQotCQlyZXN1bHQgPSBnZXRGaWxlc0luRGlyKHRvcERpcik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSlNQRW5jb2RpbmdUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCXByaXZhdGUgc3RhdGljIExpc3QgZ2V0RmlsZXNJbkRpcihGaWxlIHRvcERpcikgewotCQlMaXN0IGZpbGVzID0gbmV3IEFycmF5TGlzdCgpOwotCQlGaWxlW10gdG9wRmlsZXMgPSB0b3BEaXIubGlzdEZpbGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgdG9wRmlsZXMubGVuZ3RoOyBpKyspIHsKLQkJCUZpbGUgZmlsZSA9IHRvcEZpbGVzW2ldOwotCQkJaWYgKGZpbGUuaXNGaWxlKCkpIHsKLQkJCQlmaWxlcy5hZGQoZmlsZSk7Ci0JCQl9Ci0JCQllbHNlIGlmIChmaWxlLmlzRGlyZWN0b3J5KCkgJiYgIWZpbGUuZ2V0TmFtZSgpLmVuZHNXaXRoKCJDVlMiKSkgewotCQkJCUxpc3QgaW5uZXJGaWxlcyA9IGdldEZpbGVzSW5EaXIoZmlsZSk7Ci0JCQkJZmlsZXMuYWRkQWxsKGlubmVyRmlsZXMpOwotCQkJfQotCQl9Ci0JCXJldHVybiBmaWxlczsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFVSTCBnZXRJbnN0YWxsTG9jYXRpb24oKSB7Ci0JCVVSTCBpbnN0YWxsTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmciKS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgcmVzb2x2ZWRMb2NhdGlvbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlyZXNvbHZlZExvY2F0aW9uID0gRmlsZUxvY2F0b3IucmVzb2x2ZShpbnN0YWxsTG9jYXRpb24pOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc29sdmVkTG9jYXRpb247Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwgb3IgJ2tleScgaWYgbm90Ci0JICogZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBKU1BFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleSk7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCUZpbGUgcmVzdWx0ID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgUmVhZGVyIGdldFRlc3RSZWFkZXIoU3RyaW5nIGZpbGVwYXRoKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlSZWFkZXIgcmVzdWx0ID0gbmV3IEZpbGVSZWFkZXIobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgSlNQRW5jb2RpbmdUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BFbmNvZGluZ1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BFbmNvZGluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlZDkzNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC90ZXN0cy9lbmNvZGluZy9qc3AvSlNQRW5jb2RpbmdUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5qc3A7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXREZWNvZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kaW5nRXJyb3JBY3Rpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuSlNQRW5jb2RpbmdUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuRW5jb2RpbmdNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5JUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3I7Ci0KLXB1YmxpYyBjbGFzcyBKU1BFbmNvZGluZ1Rlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogRW5zdXJlcyB0aGF0IGFuIElucHV0U3RyZWFtIGhhcyBtYXJrL3Jlc2V0IHN1cHBvcnQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSW5wdXRTdHJlYW0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShJbnB1dFN0cmVhbSBvcmlnaW5hbCkgewotCQlpZiAob3JpZ2luYWwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQlpZiAob3JpZ2luYWwubWFya1N1cHBvcnRlZCgpKQotCQkJcmV0dXJuIG9yaWdpbmFsOwotCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0ob3JpZ2luYWwpOwotCX0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImpzcC8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVIb21lID0gInRlc3RmaWxlcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVIb21lICsgZmlsZURpcjsKLQlwcml2YXRlIGludCBSRUFEX0JVRkZFUl9TSVpFID0gODAwMDsKLQotCXB1YmxpYyBKU1BFbmNvZGluZ1Rlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlU3RyZWFtKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkSUFOQUVuY29kaW5nLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IEpTUEVuY29kaW5nVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoZmlsZW5hbWUpOwotCQlpZiAoIWZpbGUuZXhpc3RzKCkpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGZpbGVuYW1lICsgIiB3YXMgbm90IGZvdW5kIik7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJLy8gSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJbnB1dFN0cmVhbSBpc3RyZWFtID0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0JCXRyeSB7Ci0JCQlkZXRlY3Rvci5zZXQoaXN0cmVhbSk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZW5jb2RpbmdNZW1lbnRvID0gKChKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IpZGV0ZWN0b3IpLmdldEVuY29kaW5nTWVtZW50bygpOwotCQkJU3RyaW5nIGZvdW5kSUFOQUVuY29kaW5nID0gZW5jb2RpbmdNZW1lbnRvLmdldEphdmFDaGFyc2V0TmFtZSgpOwotCQkJLy8gSSBjaGFuZ2VkIG1hbnkgImVxdWFscyIgdG8gImVxdWFsc0lnbm9yZUNhc2UiIG9uIDExLzQvMjAwMiwKLQkJCS8vIHNpbmNlCi0JCQkvLyBzb21lIGlzc3VlcyB3aXRoIFNISUZUX0pJUyB2cy4gU2hpZnRfSklTIHdlcmUgY2F1c2luZyBmYWlsdXJlcy4KLQkJCS8vIFdlIGRvIHdhbnQgdG8gYmUgdG9sZXJhbnQgb24gaW5wdXQsIGFuZCBhY2NlcHQgZWl0aGVyLCBidXQgSQotCQkJLy8gdGhpbmsKLQkJCS8vIHRoYXQgU3VwcG9ydGVkSmF2YUVuY29kaW5ncyBuZWVkcyB0byBiZSBjaGFuZ2VkIHRvICJyZWNvbW1lbmQiCi0JCQkvLyBTaGlmdF9KSVMuCi0JCQlib29sZWFuIGV4cGVjdGVkSUFOQVJlc3VsdCA9IGZhbHNlOwotCQkJZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZXhwZWN0ZWRJQU5BRW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZShmb3VuZElBTkFFbmNvZGluZyk7Ci0KLQkJCWFzc2VydFRydWUoImVuY29kaW5nIHRlc3QgZmlsZSAiICsgZmlsZW5hbWUgKyAiIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRJQU5BRW5jb2RpbmcgKyAiIGZvdW5kOiAiICsgZm91bmRJQU5BRW5jb2RpbmcsIGV4cGVjdGVkSUFOQVJlc3VsdCk7Ci0JCQkvLyBhIHZlcnkgc2ltcGxlIHJlYWQgdGVzdCAuLi4gd2lsbCBjYXVzZSBKVW5pdCBlcnJvciAobm90IGZhaWwpCi0JCQkvLyBpZiB0aHJvd3MgZXhjZXB0aW9uLgotCQkJZW5zdXJlQ2FuUmVhZChmaWxlbmFtZSwgZm91bmRJQU5BRW5jb2RpbmcsIGlzdHJlYW0pOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlzdHJlYW0gIT0gbnVsbCkgewotCQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGp1c3QgcmVhZHMgdG8gc3RyZWFtLCB0byBiZSBzdXJlIGl0IGNhbiBiZSByZWFkIHBlcgotCSAqIGVuY29kaW5nLCB3aXRob3V0IGV4Y2VwdGlvbi4KLQkgKi8KLQlwcml2YXRlIHZvaWQgZW5zdXJlQ2FuUmVhZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBlbmNvZGluZywgSW5wdXRTdHJlYW0gaW5TdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShlbmNvZGluZyk7Ci0JCUNoYXJzZXREZWNvZGVyIGNoYXJzZXREZWNvZGVyID0gY2hhcnNldC5uZXdEZWNvZGVyKCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uTWFsZm9ybWVkSW5wdXQoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQkJY2hhcnNldERlY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0KLQkJSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGluU3RyZWFtLCBjaGFyc2V0RGVjb2Rlcik7Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSByZWFkSW5wdXRTdHJlYW0ocmVhZGVyKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihmaWxlbmFtZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcmVhZElucHV0U3RyZWFtKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG51bVJlYWQgPSAwOwotCQljaGFyIHRCdWZmW10gPSBuZXcgY2hhcltSRUFEX0JVRkZFUl9TSVpFXTsKLQkJd2hpbGUgKChudW1SZWFkID0gcmVhZGVyLnJlYWQodEJ1ZmYsIDAsIHRCdWZmLmxlbmd0aCkpICE9IC0xKSB7Ci0JCQlidWZmZXIuYXBwZW5kKHRCdWZmLCAwLCBudW1SZWFkKTsKLQkJfQotCQlyZXR1cm4gYnVmZmVyOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RkZWZlY3Q0MjA1d3BzanNwKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgImRlZmVjdF80MjA1X3dwcy5qc3AiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTgiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiRW1wdHlGaWxlLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJJU08tODg1OS0xIiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBDYXV0aW9uLCB3aGVuIHRoaXMgZmlsZSBwcmludHMgb3V0IGluIGNvbnNvbGUgKHdoZW4gZGVidWcgc2V0IHRvIHRydWUsCi0JICogaXQgYXBwZWFycyBpbmNvcnJlY3QgKGR1ZSB0byBmb250IHByb2JsZW1zIGluIGNvbnNvbGUpLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVVEYxNigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0VVRGMTYuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkJFIiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIHRlc3Qgc2hvd3MgdW5pY29kZSBCT00gc2hvdWxkIHRha2UgcHJpb3JpdHkgb3ZlciBzZXR0aW5ncy9kZWZhdWx0cwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RVdGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTYiLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBzaG93cyB1bmljb2RlIEJPTSBzaG91bGQgdGFrZSBwcmlvcml0eSBvdmVyIHNldHRpbmdzL2RlZmF1bHRzCi0JICogTm90ZTogVVRGLTE2ID09IFVURi0xNkJFCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNkJFIiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZXaXRoSmFwYW5lc2VDaGFycygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ1dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtMTZCRSIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFVURjgzQnl0ZUJPTSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJVVEY4V2l0aDNCeXRlQk9NLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtOCIsIG5ldyBKU1BSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiOwotCQlTdHJpbmcgaWFuYUluRmlsZSA9ICJJU08tODg1OS04IjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgaWFuYUluRmlsZSwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MTm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub0VuY29kaW5nLmpzcCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJJU08tODg1OS0xIiwgbmV3IEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JCVN0cmluZyBpYW5hSW5GaWxlID0gIklTTy04ODU5LTgiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgSlNQUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL0pTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL0pTUEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNiM2RiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9KU1BIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKgotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcuanNwOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwucmVnZXguUGF0dGVybjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IZWFkUGFyc2VyVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkpTUEhlYWRUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkpTUEhlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy5KU1BFbmNvZGluZ1Rlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5FbmNvZGluZ1BhcnNlckNvbnN0YW50czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuWE1MSGVhZFRva2VuaXplckNvbnN0YW50czsKLQotcHVibGljIGNsYXNzIEpTUEhlYWRUb2tlbml6ZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBTdHJpbmcgZkNoYXJzZXQ7Ci0JcHJpdmF0ZSBTdHJpbmcgZkNvbnRlbnRUeXBlOwotCXByaXZhdGUgU3RyaW5nIGZDb250ZW50VHlwZVZhbHVlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAianNwLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgU3RyaW5nIGZQYWdlRW5jb2RpbmdWYWx1ZSA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmcgZlhNTERlY0VuY29kaW5nTmFtZTsKLQlwcml2YXRlIFN0cmluZyBmTGFuZ3VhZ2U7Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIGV4cGVjdGVkTmFtZSwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdEZpbGUoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZXhwZWN0ZWROYW1lLCBTdHJpbmcgZmluYWxUb2tlblR5cGUsIFN0cmluZyBleHBlY3RlZENvbnRlbnRUeXBlKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlKU1BIZWFkVG9rZW5pemVyIHRva2VuaXplciA9IG51bGw7Ci0JCVJlYWRlciBmaWxlUmVhZGVyID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICIgKyBmaWxlbmFtZSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQl9Ci0JCQlmaWxlUmVhZGVyID0gSlNQRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXRUZXN0UmVhZGVyKGZpbGVuYW1lKTsKLQkJCXRva2VuaXplciA9IG5ldyBKU1BIZWFkVG9rZW5pemVyKGZpbGVSZWFkZXIpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG9wZW5pbmcgZmlsZSBcIiIgKyBmaWxlbmFtZSArICJcIiIpOwotCQl9Ci0KLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gcGFyc2VIZWFkZXIodG9rZW5pemVyKTsKLQkJU3RyaW5nIHJlc3VsdFZhbHVlID0gZ2V0QXBwcm9wcmlhdGVFbmNvZGluZygpOwotCQlmaWxlUmVhZGVyLmNsb3NlKCk7Ci0JCWlmIChmaW5hbFRva2VuVHlwZSAhPSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJkaWQgbm90IGVuZCBhcyBleHBlY3RlZC4gZm91bmQ6ICAiICsgdG9rZW4uZ2V0VHlwZSgpLCBmaW5hbFRva2VuVHlwZS5lcXVhbHModG9rZW4uZ2V0VHlwZSgpKSk7Ci0JCX0KLQotCQlpZiAoZXhwZWN0ZWROYW1lID09IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkIG5vIGVuY29kaW5nLCBidXQgZm91bmQ6ICIgKyByZXN1bHRWYWx1ZSwgcmVzdWx0VmFsdWUgPT0gbnVsbCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlhc3NlcnRUcnVlKCJleHBlY3RlZCAiICsgZXhwZWN0ZWROYW1lICsgIiBidXQgZm91bmQgIiArIHJlc3VsdFZhbHVlLCBleHBlY3RlZE5hbWUuZXF1YWxzKHJlc3VsdFZhbHVlKSk7Ci0JCX0KLQotCQlTdHJpbmcgZm91bmRDb250ZW50VHlwZSA9IGdldENvbnRlbnRUeXBlKCk7Ci0JCWlmIChleHBlY3RlZENvbnRlbnRUeXBlID09IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkIG5vIGNvbnRlbnRUeXBlLCBidXQgZm91bmQ6ICIgKyBmb3VuZENvbnRlbnRUeXBlLCBmb3VuZENvbnRlbnRUeXBlID09IG51bGwpOwotCQl9Ci0JCWVsc2UgewotCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgIiArIGV4cGVjdGVkQ29udGVudFR5cGUgKyAiIGJ1dCBmb3VuZCAiICsgZm91bmRDb250ZW50VHlwZSwgZXhwZWN0ZWRDb250ZW50VHlwZS5lcXVhbHMoZm91bmRDb250ZW50VHlwZSkpOwotCQl9Ci0KLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0TWFsZm9ybWVkTm9FbmNvZGluZygpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0TWFsZm9ybWVkTm9FbmNvZGluZ1hTTCgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9FbmNvZGluZy5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS04Iik7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdE5vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdCgpIHsKLQkvLyBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RkZWZlY3QyMjMzNjUoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIlNlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8qKgotCSAqIHJldHVybnMgZW5jb2RpbmcgYWNjb3JkaW5nIHRvIHByaW9yaXR5OiAxLiBYTUwgRGVjbGFyYXRpb24gMi4gcGFnZQotCSAqIGRpcmVjdGl2ZSBwYWdlRW5jb2RpbmcgbmFtZSAzLiBwYWdlIGRpcmVjdGl2ZSBjb250ZW50VHlwZSBjaGFyc2V0IG5hbWUKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRBcHByb3ByaWF0ZUVuY29kaW5nKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJaWYgKGZYTUxEZWNFbmNvZGluZ05hbWUgIT0gbnVsbCkKLQkJCXJlc3VsdCA9IGZYTUxEZWNFbmNvZGluZ05hbWU7Ci0JCWVsc2UgaWYgKGZQYWdlRW5jb2RpbmdWYWx1ZSAhPSBudWxsKQotCQkJcmVzdWx0ID0gZlBhZ2VFbmNvZGluZ1ZhbHVlOwotCQllbHNlIGlmIChmQ2hhcnNldCAhPSBudWxsKQotCQkJcmVzdWx0ID0gZkNoYXJzZXQ7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0Q29udGVudFR5cGUoKSB7Ci0JCXJldHVybiBmQ29udGVudFR5cGU7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzTGVnYWxTdHJpbmcoU3RyaW5nIHRva2VuVHlwZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlpZiAodG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2Qgc2hvdWxkIGJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgd2hhdCBpcyBpbgotCSAqIEpTUFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcgotCSAqIAotCSAqIEBwYXJhbSBjb250ZW50VHlwZQotCSAqLwotCXByaXZhdGUgdm9pZCBwYXJzZUNvbnRlbnRUeXBlVmFsdWUoU3RyaW5nIGNvbnRlbnRUeXBlKSB7Ci0JCVBhdHRlcm4gcGF0dGVybiA9IFBhdHRlcm4uY29tcGlsZSgiO1xccypjaGFyc2V0XFxzKj1cXHMqIik7IC8vJE5PTi1OTFMtMSQKLQkJU3RyaW5nW10gcGFydHMgPSBwYXR0ZXJuLnNwbGl0KGNvbnRlbnRUeXBlKTsKLQkJaWYgKHBhcnRzLmxlbmd0aCA+IDApIHsKLQkJCS8vIGlmIG9ubHkgb25lIGl0ZW0sIGl0IGNhbiBzdGlsbCBiZSBjaGFyc2V0IGluc3RlYWQgb2YKLQkJCS8vIGNvbnRlbnRUeXBlCi0JCQlpZiAocGFydHMubGVuZ3RoID09IDEpIHsKLQkJCQlpZiAocGFydHNbMF0ubGVuZ3RoKCkgPiA2KSB7Ci0JCQkJCVN0cmluZyBjaGVja0ZvckNoYXJzZXQgPSBwYXJ0c1swXS5zdWJzdHJpbmcoMCwgNyk7Ci0JCQkJCWlmIChjaGVja0ZvckNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgiY2hhcnNldCIpKSB7Ci0JCQkJCQlpbnQgZXFwb3MgPSBwYXJ0c1swXS5pbmRleE9mKCc9Jyk7Ci0JCQkJCQllcXBvcyA9IGVxcG9zICsgMTsKLQkJCQkJCWlmIChlcXBvcyA8IHBhcnRzWzBdLmxlbmd0aCgpKSB7Ci0JCQkJCQkJZkNoYXJzZXQgPSBwYXJ0c1swXS5zdWJzdHJpbmcoZXFwb3MpOwotCQkJCQkJCWZDaGFyc2V0ID0gZkNoYXJzZXQudHJpbSgpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJZkNvbnRlbnRUeXBlID0gcGFydHNbMF07Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmQ29udGVudFR5cGUgPSBwYXJ0c1swXTsKLQkJCX0KLQkJfQotCQlpZiAocGFydHMubGVuZ3RoID4gMSkgewotCQkJZkNoYXJzZXQgPSBwYXJ0c1sxXTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEdpdmUncyBwcmlvcml0eSB0byBlbmNvZGluZyB2YWx1ZSwgaWYgZm91bmQgZWxzZSwgbG9va3MgZm9yIGNvbnRlbnRUeXBlCi0JICogdmFsdWU7Ci0JICovCi0JcHJpdmF0ZSBIZWFkUGFyc2VyVG9rZW4gcGFyc2VIZWFkZXIoSlNQSGVhZFRva2VuaXplciB0b2tlbml6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWZQYWdlRW5jb2RpbmdWYWx1ZSA9IG51bGw7Ci0JCWZDaGFyc2V0ID0gbnVsbDsKLQkJZkNvbnRlbnRUeXBlID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIGZpbmFsVG9rZW4gPSBudWxsOwotCQlkbyB7Ci0JCQl0b2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCVN0cmluZyB0b2tlblR5cGUgPSB0b2tlbi5nZXRUeXBlKCk7Ci0KLQkJCWlmICh0b2tlblR5cGUgPT0gWE1MSGVhZFRva2VuaXplckNvbnN0YW50cy5YTUxEZWxFbmNvZGluZykgewotCQkJCWlmICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJCUhlYWRQYXJzZXJUb2tlbiB2YWx1ZVRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQlTdHJpbmcgdmFsdWVUb2tlblR5cGUgPSB2YWx1ZVRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodmFsdWVUb2tlblR5cGUpKSB7Ci0JCQkJCQlmWE1MRGVjRW5jb2RpbmdOYW1lID0gdmFsdWVUb2tlbi5nZXRUZXh0KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmICh0b2tlblR5cGUgPT0gSlNQSGVhZFRva2VuaXplckNvbnN0YW50cy5QYWdlRW5jb2RpbmcpIHsKLQkJCQlpZiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCQlIZWFkUGFyc2VyVG9rZW4gdmFsdWVUb2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCQkJU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0gdmFsdWVUb2tlbi5nZXRUeXBlKCk7Ci0JCQkJCWlmIChpc0xlZ2FsU3RyaW5nKHZhbHVlVG9rZW5UeXBlKSkgewotCQkJCQkJZlBhZ2VFbmNvZGluZ1ZhbHVlID0gdmFsdWVUb2tlbi5nZXRUZXh0KCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlmICh0b2tlblR5cGUgPT0gSlNQSGVhZFRva2VuaXplckNvbnN0YW50cy5QYWdlQ29udGVudFR5cGUpIHsKLQkJCQlpZiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCQlIZWFkUGFyc2VyVG9rZW4gdmFsdWVUb2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCQkJU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0gdmFsdWVUb2tlbi5nZXRUeXBlKCk7Ci0JCQkJCWlmIChpc0xlZ2FsU3RyaW5nKHZhbHVlVG9rZW5UeXBlKSkgewotCQkJCQkJZkNvbnRlbnRUeXBlVmFsdWUgPSB2YWx1ZVRva2VuLmdldFRleHQoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWVsc2UgaWYgKHRva2VuVHlwZSA9PSBKU1BIZWFkVG9rZW5pemVyQ29uc3RhbnRzLlBhZ2VMYW5ndWFnZSkgewotCQkJCWlmICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJCUhlYWRQYXJzZXJUb2tlbiB2YWx1ZVRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJCQlTdHJpbmcgdmFsdWVUb2tlblR5cGUgPSB2YWx1ZVRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodmFsdWVUb2tlblR5cGUpKSB7Ci0JCQkJCQlmTGFuZ3VhZ2UgPSB2YWx1ZVRva2VuLmdldFRleHQoKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSk7Ci0JCWlmIChmQ29udGVudFR5cGVWYWx1ZSAhPSBudWxsKSB7Ci0JCQlwYXJzZUNvbnRlbnRUeXBlVmFsdWUoZkNvbnRlbnRUeXBlVmFsdWUpOwotCQl9Ci0JCWZpbmFsVG9rZW4gPSB0b2tlbjsKLQkJcmV0dXJuIGZpbmFsVG9rZW47Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJlc3RDYXNlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vbWFsRGlyZWN0aXZlQ2FzZS5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMiIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TWluaW1hbFBhZ2VEaXJlY3RpdmUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibWluaW1hbFBhZ2VEaXJlY3RpdmUuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0SWxsRm9ybWVkMi5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS04IiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiRW1wdHlGaWxlLmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMiIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9QYWdlRGlyZWN0aXZlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1BhZ2VEaXJlY3RpdmUuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vcm1hbFBhZ2VEaXJlY3RpdmVXaXRoWE1MRGVjbCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2V3aXRoWE1MRGVjbC5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0yIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCwgRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuTUFYX0NIQVJTX1JFQUNIRUQsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb3JtYWxDYXNlV2l0aE5laXRoZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9ybWFsQ2hhcnNldCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTMiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIFN0cmluZyBnZXRMYW5ndWFnZSgpIHsKLQkJcmV0dXJuIGZMYW5ndWFnZTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3Rlc3RzL2VuY29kaW5nL2pzcC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1AuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckpTUC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTExM2RiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdGVzdHMvZW5jb2RpbmcvanNwL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckpTUC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLmpzcDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5JQ29udGVudERlc2NyaXB0aW9uRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JKU1AgZXh0ZW5kcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gewotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0KFN0cmluZyBleHBlY3RlZENvbnRlbnRUeXBlLCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uLCBTdHJpbmcgZXhwZWN0ZWRKU1BDb250ZW50VHlwZSkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJc3VwZXIuZG9UZXN0KGV4cGVjdGVkQ29udGVudFR5cGUsIGZpbGVQYXRoLCBleHBlY3RlZEV4Y2VwdGlvbik7Ci0JCQotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBnZXRUZXN0UHJvamVjdCgpLmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJFcnJvciBpbiB0ZXN0IGNhc2U6IGZpbGUgbm90IGZvdW5kOiAiICsgZmlsZVBhdGgsIGZpbGUpOwotCi0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24gPSBkb0dldENvbnRlbnRUeXBlQmFzZWRPblN0cmVhbShmaWxlKTsKLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBmaWxlQ29udGVudERlc2NyaXB0aW9uID0gZG9HZXRDb250ZW50VHlwZUJhc2VkT25GaWxlKGZpbGUpOwotCi0JCVN0cmluZyBzdHJlYW1KU1BDb250ZW50VHlwZSA9IChTdHJpbmcpIHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbi5nZXRQcm9wZXJ0eShJQ29udGVudERlc2NyaXB0aW9uRm9ySlNQLkNPTlRFTlRfVFlQRV9BVFRSSUJVVEUpOwotCi0JCWNoZWNrUmVzdWx0cyhleHBlY3RlZEpTUENvbnRlbnRUeXBlLCBzdHJlYW1KU1BDb250ZW50VHlwZSk7Ci0JCQotCQkKLQkJU3RyaW5nIGZpbGVKU1BDb250ZW50VHlwZSA9IChTdHJpbmcpIGZpbGVDb250ZW50RGVzY3JpcHRpb24uZ2V0UHJvcGVydHkoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFKTsKLQkJY2hlY2tSZXN1bHRzKGV4cGVjdGVkSlNQQ29udGVudFR5cGUsIGZpbGVKU1BDb250ZW50VHlwZSk7Ci0KLQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1Jlc3VsdHMoU3RyaW5nIGV4cGVjdGVkSlNQQ29udGVudFR5cGUsIFN0cmluZyBmb3VuZEpTUENvbnRlbnRUeXBlKSB7Ci0JCWlmIChleHBlY3RlZEpTUENvbnRlbnRUeXBlID09IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImV4cGVjdGVkIG5vIGNvbnRlbnRUeXBlLCBidXQgZm91bmQ6ICIgKyBmb3VuZEpTUENvbnRlbnRUeXBlLCBmb3VuZEpTUENvbnRlbnRUeXBlID09IG51bGwpOwotCQl9Ci0JCWVsc2UgewotCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgIiArIGV4cGVjdGVkSlNQQ29udGVudFR5cGUgKyAiIGJ1dCBmb3VuZCAiICsgZm91bmRKU1BDb250ZW50VHlwZSwgZXhwZWN0ZWRKU1BDb250ZW50VHlwZS5lcXVhbHMoZm91bmRKU1BDb250ZW50VHlwZSkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyOTY2Ny9hdWRpLmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwIiwgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmV4Y2VwdGlvbnMuVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nQ2hhcnNldC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0JcHVibGljIHZvaWQgbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2woKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2V3aXRoWE1MRGVjbC5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AiLCBudWxsLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwIiwgbnVsbCwgInRleHQvaHRtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCIsIG51bGwsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5qc3Bzb3VyY2UiLCAidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwIiwgbnVsbCwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmpzcHNvdXJjZSIsICJ0ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCIsIG51bGwsICJ0ZXh0L2h0bWwiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBudWxsLCAidGV4dC9odG1sIik7Ci0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWQ2OTJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLQluYW1lPSJ0ZXN0c3VpdGUiCi0JZGVmYXVsdD0icnVuIgotCWJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLSAgICAKLSAgICA8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nLkpTUEVuY29kaW5nVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9InVpLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLQk8cHJvcGVydHkKLQkJbmFtZT0ibGlicmFyeS1maWxlIgotCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0JPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotCTwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0JPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgCi0JPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotCQk8ZGVsZXRlPgotCQkJPGZpbGVzZXQKLQkJCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLQkJPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0JPC90YXJnZXQ+Ci0KLQk8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotCTx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0JCTxhbnQKLQkJCXRhcmdldD0iJHt0ZXN0VHlwZX0iCi0JCQlhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0JCQlkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0iY2xhc3NuYW1lIgotCQkJCXZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0JCQk8cHJvcGVydHkKLQkJCQluYW1lPSJwbHVnaW4tcGF0aCIKLQkJCQl2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCQkgICAgCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotCTwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLQk8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0JPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0JCTwhLS08ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4tLT4KLQk8L3RhcmdldD4KLQotCTwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLQk8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0JPHRhcmdldAotCQluYW1lPSJydW4iCi0JCWRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0JCTxhbnQKLQkJCXRhcmdldD0iY29sbGVjdCIKLQkJCWFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLQkJCWRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLQkJCTxwcm9wZXJ0eQotCQkJCW5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotCQkJPHByb3BlcnR5Ci0JCQkJbmFtZT0ib3V0cHV0LWZpbGUiCi0JCQkJdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLQkJPC9hbnQ+Ci0JPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWZkMGU3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTg/Pg0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03JT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjVlYjE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iIj8+DQotPHRhZz4NCi1BdXN0cmFsaesNCi08L3RhZz4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjMzM1OWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4NCi08eHNsOnN0eWxlc2hlZXQgeG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iDQotICAgIHZlcnNpb249IjEuMCINCi0gICAgeG1sbnM6eGFsYW49Imh0dHA6Ly94bWwuYXBhY2hlLm9yZy94c2x0Ij4NCi08eHNsOnZhcmlhYmxlIG5hbWU9ImJhZEVuY29kaW5nIj4NCi1BdXN0cmFsaesNCi08L3hzbDp2YXJpYWJsZT4NCi08L3hzbDpzdHlsZXNoZWV0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVjZTc2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODllNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSI5OSIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHRXaXRoWE1MRGVjbC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODg2MjQ4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOCI/Pg0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZXRFbmNvZGluZz0iSVNPLTg4NTktNyIlPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZjI3YmJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0NCi08JUBwYWdlIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiIHBhZ2VFbmNvZGluZz0iSVNPLTg4NTktNyIgJT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MzdlZTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi1JIGZvdW5kIHRoaXMgY2hhbmdlDQotDQotPCVAIHBhZ2UNCi1pbXBvcnQ9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIg0KLSBwYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyINCi0gY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1KVU5LIg0KLSU+DQotPEhUTUw+DQotPEhFQUQ+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9TUVUQUpVTksiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxUSVRMRT5SZXN1bHRzIHBhZ2U8L1RJVExFPg0KLQ0KLTwhLS1TdHlsZXMtLT4NCi08U1RZTEUgVFlQRT0idGV4dC9jc3MiPg0KLTwhLS0NCi1CT0RZIHsNCi0JYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50Ow0KLX0NCi1IMSB7DQotCWNvbG9yOiAjMDAwMGZmICFpbXBvcnRhbnQ7DQotCXRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50Ow0KLX0NCi1USCB7DQotCXRleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50Ow0KLQljb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50Ow0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLVREIHsNCi0JdGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotVEgucmVzdWx0IHsNCi0JYmFja2dyb3VuZC1jb2xvcjogIzk5OTk5OSAhaW1wb3J0YW50Ow0KLX0NCi1URC5yZXN1bHQgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjY2NjY2NjOw0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLS0tPg0KLTwvU1RZTEU+DQotDQotDQotPCEtLVN0eWxlIFNoZWV0LS0+DQotPExJTksgaHJlZj0iL3QvdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPC9oZWFkPg0KLTxib2R5Pg0KLQ0KLTxqc3A6dXNlQmVhbiBpZD0ic2VsQ29sQmVhblJvdzEyQmVhbiIgc2NvcGU9InNlc3Npb24iIGNsYXNzPSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiIgdHlwZT0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iLz4NCi08JQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLSU+DQotDQotPCUNCi0vL0V4ZWN1dGUgQmVhbiBNZXRob2RzDQotDQotDQotJT4NCi0NCi08IS0tQmFubmVyLS0+DQotPEgxPlJlc3VsdHMgcGFnZTwvSDE+DQotDQotPEJSPjxCUj4NCi0NCi08IS0tIFJlc3VsdCBUYWJsZSAtLT4NCi08VEFCTEUgYm9yZGVyPSIwIj4NCi08VEJPRFk+DQotCQkJPFRSPg0KLQkJCTxUSD5URVNUMl+LjYuOi488L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+LjYuOi48oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4uNi46LjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+Pio+Jj488L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+Pio+Jj48oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4+Kj4mPjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+JjYmOiY88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+JjYmOiY8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4mNiY6JjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+NXI1ajV88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+NXI1ajV8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX41cjVqNXygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+OjY6Ojo88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+OjY6Ojo8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX46Njo6OjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQ0KLTwvVEJPRFk+DQotPC9UQUJMRSA+DQotPC9ib2R5Pg0KLTwvaHRtbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5YTM5Y2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1dlbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWYyOTY1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+DQotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03IiU+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9kZWZlY3RfNDIwNV93cHMuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2RlZmVjdF80MjA1X3dwcy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4ZGJkNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2RlZmVjdF80MjA1X3dwcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08JUAgcGFnZSBzZXNzaW9uPSJmYWxzZSIgYnVmZmVyPSJub25lIiAlPg0KLTwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiJT4NCi08JUAgdGFnbGliIHVyaT0iL1dFQi1JTkYvdGxkL2VuZ2luZS50bGQiIHByZWZpeD0id3BzIiAlPg0KLTx3cHM6Y29uc3RhbnRzLz4NCi0NCi08dGFibGU+DQotPHRyPjx0ZD48aW1nIGFsdD0iIiB0aXRsZT0iIiBzcmM9JzwlPSB3cHNCYXNlVVJMICU+L2ltYWdlcy93ZWxjb21lXzUuZ2lmJyBib3JkZXI9IjAiIGFsaWduPSJsZWZ0IiAvPjwvdGQ+PC90cj4NCi08dHI+PHRkPg0KLTxzcGFuIGNsYXNzPSJ3cHNUaW55VGV4dCI+PGI+PCU9IFZlcnNpb24uU0VSVkVSX05BTUUgJT4gPCU9IFZlcnNpb24uU0VSVkVSX1ZFUlNJT04gJT48L2I+PGJyLz4NCi3lu7rnva7lsaTmrKHvvJo8JT0gVmVyc2lvbi5CVUlMRF9OVU1CRVIgJT4gPCU9IFZlcnNpb24uQlVJTERfREFURSAlPiA8JT0gVmVyc2lvbi5CVUlMRF9USU1FICU+PGJyLz4NCi08YnIvPg0KLUxpY2Vuc2VkIE1hdGVyaWFscyAtIFByb3BlcnR5IG9mIElCTTxici8+DQotPCU9IFZlcnNpb24uUFJPRFVDVF9OVU1CRVIgJT48YnIvPg0KLShDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDwlPSBDb3B5cmlnaHQuWUVBUlMgJT4gQWxsIFJpZ2h0cyBSZXNlcnZlZC48L3NwYW4+PC90ZD48L3RyPg0KLTwvdGFibGU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMDkyZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9YWJjIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT5pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBpblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YzZkMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIiAgDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1DcDEyNTIiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPmluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIGluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvbWluaW1hbFBhZ2VEaXJlY3RpdmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL21pbmltYWxQYWdlRGlyZWN0aXZlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlhMjJiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvbWluaW1hbFBhZ2VEaXJlY3RpdmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbCIgJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0OWQwNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbCINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+bm9FbmNvZGluZy5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBub0VuY29kaW5nLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQzMmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08JUAgcGFnZQ0KLXBhZ2VFbmNvZGluZz0gIklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjU2OTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGQ5MDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3NGEwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08anNwOmRpcmVjdGl2ZS5wYWdlIA0KLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiLz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2wuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZXdpdGhYTUxEZWNsLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFjYjA0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNld2l0aFhNTERlY2wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+DQotPCVAIHBhZ2UNCi1wYWdlRW5jb2Rpbmc9ICJJU08tODg1OS0yIg0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMyINCi0lPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjY3OTgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgIA0KLQ0KLWVuY29kaW5nPSJJU08tODg1OS0zIiANCi0NCi0gPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxZjI4N2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idGVzdGp1bmsiPz4NCi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi08SFRNTD4NCi08SEVBRD4NCi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD10ZXN0anVuayI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPnRlc3REZWZhdWx0RW5jb2RpbmcuanNwPC9USVRMRT4NCi08L0hFQUQ+DQotPEJPRFk+DQotPFA+UGxhY2UgdGVzdERlZmF1bHRFbmNvZGluZy5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ0ODY4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InRlc3RqdW5rIj8+DQotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dGVzdGp1bmsiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT50ZXN0RGVmYXVsdEVuY29kaW5nLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIHRlc3REZWZhdWx0RW5jb2RpbmcuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08JQ0KLVN5c3RlbS5vdXQucHJpbnRsbigidGVzdCIpOw0KLSU+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1N2Y5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICBhYmNkPSJlZmMiDQotDQotZW5jb2Rpbmc9IklTTy04ODU5LTEiIA0KLQ0KLSA/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdkMGEzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmJmOTAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCBlbmNvZGluZz1VVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMzOGVjMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz1VVEYtOCANCi08dGVzdD4NCi08L3Rlc3Q+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4M2QwYzE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgICAgPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhMDE3NGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08dGVzdD4NCi0NCi08L3Rlc3Q+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5YTBjM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPHRlc3Q+DQotIDwlQCBwYWdlIA0KLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCi08L3Rlc3Q+DQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM0NjM2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUluTGFyZ2VGaWxlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi08dGVzdD4NCi0NCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotPC90ZXN0Pg0KLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMmM0MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1Yjk4NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5Gcm9tTm90ZXBhZGpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkOWU4MTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDdlNjkxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdmZmQ2ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGRiYTliYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTVlOTMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotYmluCi1iaW4ucHJvamVjdAotYnVpbGQueG1sCi1kZXYucHJvcGVydGllcwotb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0c18xLjAuMC5qYXIKLWpzcHVpdGVzdHMuamFyCi10ZW1wLmZvbGRlcgotUGVyZm9ybWFuY2VSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFhNTBmMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGQ4YjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6Mzc6MjEgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0OTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjUyNmY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjEwMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGpzcHVpdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLkpTUFVJVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0LAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdC50ZXN0ZmlsZXMsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50ZGVzY3JpcHRpb24sCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5kb2N1bWVudCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmV4YW1wbGVzLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMubW9kZWwsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5tb2RlbHF1ZXJ5LAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXIsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5wYWdlZGlyZWN0aXZlLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucGFydGl0aW9uaW5nLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucGFydGl0aW9uaW5nLnRlc3RmaWxlcy5qc3AsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5yZWdpc3RyeSwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnNlYXJjaCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnRocmVhZGVkLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbCwKLSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb24sCi0gb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLnVpLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmpkdC5jb3JlLAotIG9yZy5lY2xpcHNlLmpzdC5qc3AudWksCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zc2UudWksCi0gb3JnLmVjbGlwc2UudWkuaWRlLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnMsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IsCi0gb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLAotIGNvbS5pYm0uaWN1LAotIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWJhM2M3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMuemlwLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHByb2plY3R0ZXN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAganNwdWl0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLWphcnMuY29tcGlsZS5vcmRlciA9IGpzcHVpdGVzdHMuamFyCi1zb3VyY2UuanNwdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuanNwdWl0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1ZWJkYjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NWI0MTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gU3RydWN0dXJlZCBTb3VyY2UgRWRpdG9yIGZvciBKU1AgVGVzdHMKLXZpZXcubmFtZS4wID0gRW1iZWRkZWQgSlNQIFN0cnVjdHVyZWQgVGV4dCBWaWV3ZXIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlMDU2MzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+Ci0JCTx2aWV3Ci0JCQluYW1lPSIldmlldy5uYW1lLjAiCi0JCQlpY29uPSIkbmwkL2ljb25zL3NvdXJjZUVkaXRvci5naWYiCi0JCQljYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0SlNQIgotCQkJaWQ9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmlld2VyLlZpZXdlclRlc3RKU1AiIC8+Ci0JPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2JlYW5pbmZvX3Rlc3RzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9iZWFuaW5mb190ZXN0cy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MGE5YTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9wcm9qZWN0dGVzdGZpbGVzL2JlYW5pbmZvX3Rlc3RzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9pbmNsdWRlc190ZXN0cy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvaW5jbHVkZXNfdGVzdHMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjIwNGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9pbmNsdWRlc190ZXN0cy56aXAKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMvanNwc2VhcmNoX3Rlc3RzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9qc3BzZWFyY2hfdGVzdHMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzNhMzAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvcHJvamVjdHRlc3RmaWxlcy9qc3BzZWFyY2hfdGVzdHMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9KU1BVSVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjE1NmM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuaW50ZXJuYWwuSlNQVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5KU1BVSVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIEpTUCBTb3VyY2UKLSAqIGVkaXRvciBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIEpTUFVJUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC51aSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9IGNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBKU1BVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UpOwotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIEpTUFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBzdHJpbmcKLQotCQlTdHJpbmcgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRTdHJpbmcoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0Tm90U2FtZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiICsgcHJlZktleSwgZGVmYXVsdFZhbHVlLCB2YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgZGVmYXVsdCB2YWx1ZXMgb2YgcHJlZmVyZW5jZXMuCi0JICogCi0JICogTk9URTogRXhwZWN0ZWQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhcmQtY29kZWQsIHNvIGlmIGRlZmF1bHQgdmFsdWVzIGRvCi0JICogZ2V0IGNoYW5nZWQsIGFzc2VydGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gSlNQVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKHN0b3JlLCBKU1BVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UsIEJvb2xlYW4udG9TdHJpbmcodHJ1ZSkpOwotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgSlNQVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUsICI8Iik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5LCBTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IHN0b3JlLmdldERlZmF1bHRTdHJpbmcocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiR2V0IGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSwgZXhwZWN0ZWQsIGRlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBKU1BVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0KLQkJcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oc3RvcmUsIEpTUFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcoc3RvcmUsIEpTUFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0Qm9vbGVhbihwcmVmS2V5KTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gIW9yaWdpbmFsVmFsdWU7Ci0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlib29sZWFuIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlTdHJpbmcgZXhwZWN0ZWRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBzdHJpbmcKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCVN0cmluZyBmb3VuZFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc4ZWNlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0LkJlYW5JbmZvUHJvdmlkZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdC5KU1BKYXZhVHJhbnNsYXRvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5jb250ZW50YXNzaXN0LkpTUFRyYW5zbGF0aW9uVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRkZXNjcmlwdGlvbi5UZXN0Q29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZG9jdW1lbnQuRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMubW9kZWwuVGVzdE1vZGVsc0Zyb21GaWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm1vZGVscXVlcnkuTW9kZWxRdWVyeVRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyLlNjYW5uZXJVbml0VGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlci5Vbml0VGVzdHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5wYWdlZGlyZWN0aXZlLlRlc3RQYWdlRGlyZWN0aXZlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucGFydGl0aW9uaW5nLlRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb24uSlNQSFRNTFZhbGlkYXRvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52aWV3ZXIuVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1A7Ci0KLQotCi0KLXB1YmxpYyBjbGFzcyBKU1BVSVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEpTUFVJVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIEpTUFVJVGVzdFN1aXRlKCkgewotCQlzdXBlcigiU1NFIEpTUCBVSSBUZXN0IFN1aXRlIik7Ci0JCQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU2Nhbm5lclVuaXRUZXN0cy5jbGFzcywgIlNjYW5uZXJVbml0VGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVbml0VGVzdHMuY2xhc3MsICJVbml0VGVzdHMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQLmNsYXNzLCAiVGVzdFN0cnVjdHVyZWRQYXJ0aW9uZXIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShNb2RlbFF1ZXJ5VGVzdGVyLmNsYXNzLCAiTW9kZWxRdWVyeVRlc3RlciIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUEphdmFUcmFuc2xhdG9yVGVzdC5jbGFzcywgIkpTUEphdmFUcmFuc2xhdG9yVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RFbWFpbE5vdGljZS5jbGFzcywgIlRlc3RFbWFpbE5vdGljZSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEJlYW5JbmZvUHJvdmlkZXJUZXN0LmNsYXNzLCAiQmVhbkluZm9Qcm92aWRlclRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BUcmFuc2xhdGlvblRlc3QuY2xhc3MsICJKU1BUcmFuc2xhdGlvblRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5VGVzdC5jbGFzcywgIkFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXh0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSlNQVUlQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSlNQLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUC5jbGFzcykpOwotCQkKLQkJLy8gbW92ZWQgZnJvbSBqc3AgY29yZSB0ZXN0cyBiZWNhdXNlIHRoZXkgcmVxdWlyZSBVSQotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFBhZ2VEaXJlY3RpdmUuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsQ2xvbmUuY2xhc3MpKTsKLQkJCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxzRnJvbUZpbGVzLmNsYXNzLCAiVGVzdE1vZGVsc0Zyb21GaWxlcyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUuY2xhc3MsICJUZXN0TW9kZWxFbWJlZGRlZENvbnRlbnRUeXBlIikpOwotCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Q29udGVudERlc2NyaXB0aW9uLmNsYXNzLCAiQ29udGVudCBEZXNjcmlwdGlvbiBUZXN0cyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEpTUEhUTUxWYWxpZGF0b3JUZXN0LmNsYXNzLCAiSlNQSFRNTFZhbGlkYXRvclRlc3QiKSk7Ci0JCS8vIHBhX1RPRE8gZml4IHRoaXMgdGVzdAotCQkvL2FkZFRlc3QobmV3IFRlc3RTdWl0ZShKU1BTZWFyY2hUZXN0cy5jbGFzcykpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL0pTUFVJVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWMxYjY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvSlNQVUlUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgSlNQVUlUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy9UaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIEpTUFVJVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgSUQgPSAib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cyI7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEpTUFVJVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JCXRyeSB7Ci0JCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5TU0VGb3JKU1BUZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSlNQVUlUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gSlNQVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIikuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0VGVzdEZpbGUoU3RyaW5nIGZpbGVwYXRoKSB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlGaWxlIHJlc3VsdCA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxZGJkMjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2U0OGJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25KU1AuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS52aWV3cy5jb250ZW50b3V0bGluZS5KU1BDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5FeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudmlld3MucHJvcGVydGllcy5YTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbjsKLQotLyoqCi0gKiBUZXN0cyByZXRyaWV2aW5nIGVkaXRvciBjb250cmlidXRpb25zIGZvciBqc3AgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkpTUCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1AsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudE91dGxpbmVWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuQ09OVEVOVE9VVExJTkVDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQLCBvLmdldENsYXNzKCksIEpTUENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuUFJPUEVSVFlTSEVFVENPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnROb3ROdWxsKCJubyBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgby5nZXRDbGFzcygpLCBYTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvVGVzdEVtYWlsTm90aWNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NDE1NmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0RW1haWxOb3RpY2UuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFRlc3RFbWFpbE5vdGljZSBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGJvb2xlYW4gc2VuZE5vdGlmaWNhdGlvbnMgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0RW1haWxOb3RpY2UoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIFRlc3RFbWFpbE5vdGljZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1haWwoKSB7Ci0JCWFzc2VydEZhbHNlKCJTaW1wbGUgdGVzdCB0byBiZSBzdXJlIGVtYWlsIGdldHMgc2VudCBvbiBmYWlsdXJlIiwgc2VuZE5vdGlmaWNhdGlvbnMpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbENsb25lLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbENsb25lLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4ZDBiMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0TW9kZWxDbG9uZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5QYWdlRGlyZWN0aXZlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwubW9kZWxxdWVyeS5KU1BNb2RlbFF1ZXJ5QWRhcHRlckltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLm1vZGVscXVlcnkuSlNQTW9kZWxRdWVyeUltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuRW1iZWRkZWRIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwubW9kZWxxdWVyeS5IVE1MTW9kZWxRdWVyeUltcGw7Ci0vL2ltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlRmFtaWx5Rm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsubW9kZWxoYW5kbGVyLkVtYmVkZGVkVHlwZUhhbmRsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5FbWJlZGRlZFhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwubW9kZWxxdWVyeS5YTUxNb2RlbFF1ZXJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zc2Vtb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlBZGFwdGVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0TW9kZWxDbG9uZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgSGFzaE1hcCBlbWJlZGRlZE1vZGVsUXVlcmllcyA9IG5ldyBIYXNoTWFwKCk7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGVzdE1vZGVsQ2xvbmUuCi0JICovCi0JcHVibGljIFRlc3RNb2RlbENsb25lKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBnZXRUZXN0KCkgewotCQlyZXR1cm4gbmV3IFRlc3RNb2RlbENsb25lKCJ0ZXN0Q3JlYXRlU3RydWN0dXJlZE1vZGVsSlNQIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsb25lU3RydWN0dXJlZE1vZGVsWE1MKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQlJU3RydWN0dXJlZE1vZGVsIGNsb25lZE1vZGVsID0gbW9kZWwubmV3SW5zdGFuY2UoKTsKLQkJYXNzZXJ0VHJ1ZSgiY2xvbmVkIG1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIGNsb25lZE1vZGVsICE9IG51bGwpOwotCQkvLyBtYWtlIHN1cmUgdGhlIGNyaXRpY2FsIHZhcmlhYmxlcyBhcmUgTk9UIGlkZW50aWNhbCwgYnV0IHRoYXQgbmV3IGluc3RhbmNlcyAKLQkJLy8gaGF2ZSBiZWVuIG1hZGUKLQkJYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldEVuY29kaW5nTWVtZW50bygpID09IG1vZGVsLmdldEVuY29kaW5nTWVtZW50bygpKSBwYXNzZWQgPSBmYWxzZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRQYXJzZXIoKSA9PSBtb2RlbC5nZXRQYXJzZXIoKSkgcGFzc2VkID0gZmFsc2U7Ci0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0UmVQYXJzZXIoKSA9PSBtb2RlbC5nZXRSZVBhcnNlcigpKSBwYXNzZWQgPSBmYWxzZTsKLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q2xvbmVTdHJ1Y3R1cmVkTW9kZWxIVE1MKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwgPSBtb2RlbC5uZXdJbnN0YW5jZSgpOwotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgY2xvbmVkTW9kZWwgIT0gbnVsbCk7Ci0JCS8vIG1ha2Ugc3VyZSB0aGUgY3JpdGljYWwgdmFyaWFibGVzIGFyZSBOT1QgaWRlbnRpY2FsLCBidXQgdGhhdCBuZXcgaW5zdGFuY2VzIAotCQkvLyBoYXZlIGJlZW4gbWFkZQotCQlib29sZWFuIHBhc3NlZCA9IHRydWU7Ci0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0RW5jb2RpbmdNZW1lbnRvKCkgPT0gbW9kZWwuZ2V0RW5jb2RpbmdNZW1lbnRvKCkpIHBhc3NlZCA9IGZhbHNlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldFBhcnNlcigpID09IG1vZGVsLmdldFBhcnNlcigpKSBwYXNzZWQgPSBmYWxzZTsKLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRSZVBhcnNlcigpID09IG1vZGVsLmdldFJlUGFyc2VyKCkpIHBhc3NlZCA9IGZhbHNlOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDbG9uZVN0cnVjdHVyZWRNb2RlbEpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBjbG9uZWRNb2RlbCA9IG1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCWFzc2VydFRydWUoImNsb25lZCBtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBjbG9uZWRNb2RlbCAhPSBudWxsKTsKLQkJLy8gbWFrZSBzdXJlIHRoZSBlbWJlZGRlZCB0eXBlIGlzIGNvcnJlY3QKLQkJYm9vbGVhbiBwYXNzZWQgPSB0cnVlOwotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgY2xvbmVkTW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0RXhpc3RpbmdBZGFwdGVyKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY2xvbmVkIG1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBhZGFwdGVyIiwgcGFnZURpcmVjdGl2ZUFkYXB0ZXIpOwotCi0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgZW1iZWRkZWRIYW5kbGVyID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0RW1iZWRkZWRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoImNsb25lZCBtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgaGFuZGxlciIsIGVtYmVkZGVkSGFuZGxlcik7Ci0KLQkJLy8JCWlmIChjbG9uZWRNb2RlbC5nZXRFbmNvZGluZ01lbWVudG8oKSA9PSBtb2RlbC5nZXRFbmNvZGluZ01lbWVudG8oKSkgcGFzc2VkID0gZmFsc2U7Ci0JCS8vCQlpZiAoY2xvbmVkTW9kZWwuZ2V0UGFyc2VyKCkgPT0gbW9kZWwuZ2V0UGFyc2VyKCkpIHBhc3NlZCA9IGZhbHNlOwotCQkvLwkJaWYgKGNsb25lZE1vZGVsLmdldFJlUGFyc2VyKCkgPT0gbW9kZWwuZ2V0UmVQYXJzZXIoKSkgcGFzc2VkID0gZmFsc2U7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIHN0cnVjdHVyZWQgbW9kZWwgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsb25lU3RydWN0dXJlZE1vZGVsSlNQWE1MKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQkJLy8gbm90ZSwgd2UgaW5pdGlhbHkgZXhwZWN0IEhUTUwsIHNpbmNlIHRoZXJlIGlzIG5vdCBjb250ZW50Ci0JCWNoZWNrRW1iZWRkZWRUeXBlKG1vZGVsLCBFbWJlZGRlZEhUTUwuY2xhc3MpOwotCQotCQlTdHJpbmcgdGVzdENvbnRlbnQgPSAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L3htbFwiICU+IjsKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCB0ZXN0Q29udGVudCk7Ci0JCi0JCS8vIG1vZGlmaWVkIGZvciBkZXNpZ24gY2hhbmdlLCB3aGVyZSByZS1pbml0IHNob3VsZCBiZSBoYW5kbGVkIGJlZm9yZSAKLQkJLy8gc2V0IHJldHVybnMuCi0JCWFzc2VydFRydWUoIm1vZGVsIHNob3VsZCBub3QgbmVlZCByZWluaXQiLCAhbW9kZWwuaXNSZWluaXRpYWxpemF0aW9uTmVlZGVkKCkpOwotCQotCQkvLwkJYnV0IGlmIGl0IGRpZCBuZWVkIHJlLWluaXQsIGhlcmUncyB0aGUgcmlnaHQgY2FsbGluZyBzZXF1ZW5jZQkJCi0JCS8vCQlpZiAobW9kZWwuaXNSZWluaXRpYWxpemF0aW9uTmVlZGVkKCkpIHsKLQkJLy8JCQltb2RlbC5hYm91dFRvQ2hhbmdlTW9kZWwoKTsKLQkJLy8JCQltb2RlbCA9IG1vZGVsLnJlaW5pdCgpOwotCQkvLwkJCW1vZGVsLmNoYW5nZWRNb2RlbCgpOwotCQkvLwkJfQotCQotCQljaGVja0VtYmVkZGVkVHlwZShtb2RlbCwgRW1iZWRkZWRYTUwuY2xhc3MpOwotCQotCQlJU3RydWN0dXJlZE1vZGVsIGNsb25lZE1vZGVsID0gbW9kZWwubmV3SW5zdGFuY2UoKTsKLQkJYXNzZXJ0VHJ1ZSgiY2xvbmVkIG1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIGNsb25lZE1vZGVsICE9IG51bGwpOwotCQljaGVja0VtYmVkZGVkVHlwZShjbG9uZWRNb2RlbCwgRW1iZWRkZWRYTUwuY2xhc3MpOwotCQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja0VtYmVkZGVkVHlwZShJU3RydWN0dXJlZE1vZGVsIG1vZGVsLCBDbGFzcyBleHBlY3RlZFR5cGUpIHsKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEV4aXN0aW5nQWRhcHRlcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGRpZCBub3QgaGF2ZSBwYWdlRGlyZWN0aXZlIiwgcGFnZURpcmVjdGl2ZUFkYXB0ZXIpOwotCi0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgZW1iZWRkZWRIYW5kbGVyID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0RW1iZWRkZWRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBoYW5kbGVyIiwgZW1iZWRkZWRIYW5kbGVyKTsKLQotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRUeXBlLCBlbWJlZGRlZEhhbmRsZXIuZ2V0Q2xhc3MoKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3RydWN0dXJlZE1vZGVsSlNQKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQkKLQkJQXJyYXlMaXN0IGZhY3RvcmllcyA9IChBcnJheUxpc3QpIG1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpLmdldEZhY3RvcmllcygpOwotCQlmYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBmYWN0b3JpZXMuY2xvbmUoKTsKLQkKLQkJSVN0cnVjdHVyZWRNb2RlbCBjbG9uZWRNb2RlbCA9IG1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCWlmIChtb2RlbC5nZXRNb2RlbEhhbmRsZXIoKSA9PSBudWxsKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCWFzc2VydFRydWUoZmFsc2UpOwotCQl9Ci0JCWFzc2VydFRydWUoImNsb25lZCBtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBjbG9uZWRNb2RlbCAhPSBudWxsKTsKLQkJLy8gbWFrZSBzdXJlIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgYXJlIGNvcnJlY3QuCi0JCi0JCUFycmF5TGlzdCBuZXdGYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJbmV3RmFjdG9yaWVzID0gKEFycmF5TGlzdCkgbmV3RmFjdG9yaWVzLmNsb25lKCk7Ci0JCi0JCWJvb2xlYW4gcGFzc2VkID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9ySWRlbnRpdHkoZmFjdG9yaWVzLCBuZXdGYWN0b3JpZXMpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQkKLQkJcGFzc2VkID0gY2hlY2tGb3JTYW1lRW1iZWRkZWRGYWN0b3JpZXMobW9kZWwsIGNsb25lZE1vZGVsKTsKLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0JCi0JCS8vIE5vdywgYXNzaWduaW5nIHNvbWUgY29udGVudCBzaG91bGRuJ3QgY2hhbmdlIHRoZSBmYWN0b3JpZXMKLQkJY2xvbmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgMCwgMCwgIjxzYW1wbGU+IHRleHQiKTsKLQkJQXJyYXlMaXN0IHR3b0ZhY3RvcmllcyA9IChBcnJheUxpc3QpIGNsb25lZE1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpLmdldEZhY3RvcmllcygpOwotCQl0d29GYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSB0d29GYWN0b3JpZXMuY2xvbmUoKTsKLQkKLQkJcGFzc2VkID0gY2hlY2tGYWN0b3JpZXNMaXN0Rm9ySWRlbnRpdHkoZmFjdG9yaWVzLCB0d29GYWN0b3JpZXMpOwotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQkKLQkJcGFzc2VkID0gY2hlY2tGb3JTYW1lRW1iZWRkZWRGYWN0b3JpZXMobW9kZWwsIGNsb25lZE1vZGVsKTsKLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0JCi0JCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJY2xvbmVkTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiIpOwotCQlBcnJheUxpc3QgdGhyZWVGYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBjbG9uZWRNb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJdGhyZWVGYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSB0aHJlZUZhY3Rvcmllcy5jbG9uZSgpOwotCQotCQlwYXNzZWQgPSBjaGVja0ZhY3Rvcmllc0xpc3RGb3JJZGVudGl0eShmYWN0b3JpZXMsIHRocmVlRmFjdG9yaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgibmV3SW5zdGFuY2Ugb2Ygc3RydWN0dXJlZCBtb2RlbCBpcyBub3QgY29ycmVjdCIsIHBhc3NlZCk7Ci0JCi0JCXBhc3NlZCA9IGNoZWNrRm9yU2FtZUVtYmVkZGVkRmFjdG9yaWVzKG1vZGVsLCBjbG9uZWRNb2RlbCk7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIHN0cnVjdHVyZWQgbW9kZWwgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCQotCQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTdHJ1Y3R1cmVkTW9kZWxKU1BYSFRNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0JCi0JCi0JCi0JCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiSVNPLTg4NTktMVwiID8+XG4iICsgCi0JCQkJIjwhRE9DVFlQRSBodG1sIFBVQkxJQyBcIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU5cIlxuIiArIAotCQkJCSJcImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMTEvRFREL3hodG1sMTEuZHRkXCI+XG4iICsgCi0JCQkJIjwlQHBhZ2UgbGFuZ3VhZ2U9XCJqYXZhXCIgY29udGVudFR5cGU9XCJ0ZXh0L3htbDsgY2hhcnNldD1JU08tODg1OS0xXCJcbiIgKyAKLQkJCQkiICAgICAgICBwYWdlRW5jb2Rpbmc9XCJJU08tODg1OS0xXCIlPlxuIiArIAotCQkJCSI8aHRtbCB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIj5cbiIgKyAKLQkJCQkiPGhlYWQ+XG4iICsgCi0JCQkJIjxtZXRhIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIiBjb250ZW50PVwidGV4dC94bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiIC8+XG4iICsgCi0JCQkJIjxzdHlsZT5cbiIgKyAKLQkJCQkiQSB7IGNvbG9yOiByZWQ7IH1cbiIgKyAKLQkJCQkiPC9zdHlsZT5cbiIgKyAKLQkJCQkiPC9oZWFkPlxuIiArIAotCQkJCSI8L2h0bWw+XG4iICsgCi0JCQkJIiIpOwotCQotCQkJY2hlY2tFbWJlZGRlZFR5cGUobW9kZWwsIEVtYmVkZGVkSFRNTC5jbGFzcyk7Ci0JCQljaGVja01vZGVsUXVlcnkobW9kZWwsIEpTUE1vZGVsUXVlcnlJbXBsLmNsYXNzKTsKLQkJCWNoZWNrRW1iZWRkZWRNb2RlbFF1ZXJ5KG1vZGVsLCBKU1BNb2RlbFF1ZXJ5QWRhcHRlckltcGwuY2xhc3MsIEpTUE1vZGVsUXVlcnlJbXBsLmNsYXNzLCBIVE1MTW9kZWxRdWVyeUltcGwuY2xhc3MpOwotCQkJCi0JCQkKLQkJCQotCQkJCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVN0cnVjdHVyZWRNb2RlbEpTUFhIVE1ub0RvY3R5cGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCQotCQotCQotCQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjw/eG1sIHZlcnNpb249XCIxLjBcIiBlbmNvZGluZz1cIklTTy04ODU5LTFcIiA/PlxuIiArIAotCQkJCSI8JUBwYWdlIGxhbmd1YWdlPVwiamF2YVwiIGNvbnRlbnRUeXBlPVwidGV4dC94bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiXG4iICsgCi0JCQkJIiAgICAgICAgcGFnZUVuY29kaW5nPVwiSVNPLTg4NTktMVwiJT5cbiIgKyAKLQkJCQkiPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+XG4iICsgCi0JCQkJIjxoZWFkPlxuIiArIAotCQkJCSI8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cInRleHQveG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIiAvPlxuIiArIAotCQkJCSI8c3R5bGU+XG4iICsgCi0JCQkJIkEgeyBjb2xvcjogcmVkOyB9XG4iICsgCi0JCQkJIjwvc3R5bGU+XG4iICsgCi0JCQkJIjwvaGVhZD5cbiIgKyAKLQkJCQkiPC9odG1sPlxuIiArIAotCQkJCSIiKTsKLQkKLQkJCWNoZWNrRW1iZWRkZWRUeXBlKG1vZGVsLCBFbWJlZGRlZEhUTUwuY2xhc3MpOwotCQkJY2hlY2tNb2RlbFF1ZXJ5KG1vZGVsLCBKU1BNb2RlbFF1ZXJ5SW1wbC5jbGFzcyk7Ci0JCQljaGVja0VtYmVkZGVkTW9kZWxRdWVyeShtb2RlbCwgSlNQTW9kZWxRdWVyeUFkYXB0ZXJJbXBsLmNsYXNzLCBKU1BNb2RlbFF1ZXJ5SW1wbC5jbGFzcywgSFRNTE1vZGVsUXVlcnlJbXBsLmNsYXNzKTsKLQkJCQotCQkJCi0JCQkKLQkJCQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTdHJ1Y3R1cmVkTW9kZWxKU1BYSFRNTDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0KLQotCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiSVNPLTg4NTktMVwiID8+XG4iICsgCi0JCQkJCSI8JUBwYWdlIGxhbmd1YWdlPVwiamF2YVwiIGNvbnRlbnRUeXBlPVwiYXBwbGljYXRpb24veG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIlxuIiArIAotCQkJCQkiICAgICAgICBwYWdlRW5jb2Rpbmc9XCJJU08tODg1OS0xXCIlPlxuIiArIAotCQkJCQkiPCFET0NUWVBFIGh0bWwgUFVCTElDIFwiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTlwiXG4iICsgCi0JCQkJIlwiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGRcIj5cbiIgKyAKLQkJCQkiPGh0bWwgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI+XG4iICsgCi0JCQkJIjxoZWFkPlxuIiArIAotCQkJCSI8bWV0YSBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCIgY29udGVudD1cImFwcGxpY2F0aW9uL3htbDsgY2hhcnNldD1JU08tODg1OS0xXCIgLz5cbiIgKyAKLQkJCQkiPHN0eWxlPlxuIiArIAotCQkJCSJBIHsgY29sb3I6IHJlZDsgfVxuIiArIAotCQkJCSI8L3N0eWxlPlxuIiArIAotCQkJCSI8L2hlYWQ+XG4iICsgCi0JCQkJIjwvaHRtbD5cbiIgKyAKLQkJCQkiIik7Ci0KLQkJCWNoZWNrRW1iZWRkZWRUeXBlKG1vZGVsLCBFbWJlZGRlZEhUTUwuY2xhc3MpOwotCQkJY2hlY2tNb2RlbFF1ZXJ5KG1vZGVsLCBKU1BNb2RlbFF1ZXJ5SW1wbC5jbGFzcyk7Ci0JCQljaGVja0VtYmVkZGVkTW9kZWxRdWVyeShtb2RlbCwgSlNQTW9kZWxRdWVyeUFkYXB0ZXJJbXBsLmNsYXNzLCBKU1BNb2RlbFF1ZXJ5SW1wbC5jbGFzcywgSFRNTE1vZGVsUXVlcnlJbXBsLmNsYXNzKTsKLQkJCQotCQkJCi0JCQkKLQkJCQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja01vZGVsUXVlcnkoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCwgQ2xhc3MgY2xhc3MxKSB7Ci0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJTW9kZWxRdWVyeUFkYXB0ZXIgbW9kZWxRdWVyeUFkYXB0ZXIgPSAoTW9kZWxRdWVyeUFkYXB0ZXIpICgoSU5vZGVOb3RpZmllcikgZG9jKS5nZXRFeGlzdGluZ0FkYXB0ZXIoTW9kZWxRdWVyeUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnROb3ROdWxsKCJtb2RlbCBkaWQgbm90IGhhdmUgbW9kZWxRdWVyeUFkYXB0ZXIiLCBtb2RlbFF1ZXJ5QWRhcHRlcik7Ci0JCQotCQlhc3NlcnRUcnVlKCJtb2RlbFF1ZXJ5QWRhcHRlciBpcyB3cm9uZyBjbGFzcyIsIGNsYXNzMS5lcXVhbHMoSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MpKTsKLQkJCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrRW1iZWRkZWRNb2RlbFF1ZXJ5KElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwsIENsYXNzIG91dGVyUXVlcnlBZGFwdGVyLCBDbGFzcyBvdXRlclF1ZXJ5Q2xhc3MsIENsYXNzIGVtYmVkZGVkUXVlcnlDbGFzcykgewotCi0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJTW9kZWxRdWVyeUFkYXB0ZXIgbW9kZWxRdWVyeUFkYXB0ZXIgPSAoTW9kZWxRdWVyeUFkYXB0ZXIpICgoSU5vZGVOb3RpZmllcikgZG9jKS5nZXRFeGlzdGluZ0FkYXB0ZXIoTW9kZWxRdWVyeUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnROb3ROdWxsKCJtb2RlbCBkaWQgbm90IGhhdmUgbW9kZWxRdWVyeUFkYXB0ZXIiLCBtb2RlbFF1ZXJ5QWRhcHRlcik7Ci0KLQkJQ2xhc3MgZXhwZWN0ZWQgPSBvdXRlclF1ZXJ5QWRhcHRlcjsKLQkJQ2xhc3MgYWN0dWFsID0gbW9kZWxRdWVyeUFkYXB0ZXIuZ2V0Q2xhc3MoKTsKLQkJYXNzZXJ0RXF1YWxzKCJkb2N1bWVudCdzIG1vZGVsIHF1ZXJ5IGlzIG5vdCBhcyBleHBlY3RlZCIsIGV4cGVjdGVkLCBhY3R1YWwpOwotCQkKLQkJTW9kZWxRdWVyeSBtb2RlbFF1ZXJ5ID0gbW9kZWxRdWVyeUFkYXB0ZXIuZ2V0TW9kZWxRdWVyeSgpOwotCQlleHBlY3RlZCA9IG91dGVyUXVlcnlDbGFzczsKLQkJYWN0dWFsID0gbW9kZWxRdWVyeS5nZXRDbGFzcygpOwotCQlhc3NlcnRFcXVhbHMoIm1vZGVsIHF1ZXJ5IGFkYXB0ZXIncyBtb2RlbCBxdWVyeSBpcyBub3QgYXMgZXhwZWN0ZWQiLCBleHBlY3RlZCwgYWN0dWFsKTsKLQkJCi0JCU1vZGVsUXVlcnkgbm9kZVF1ZXJ5ID0gZ2V0RW1iZWRkZWRNb2RlbFF1ZXJ5KGRvYyk7Ci0JCWFzc2VydE5vdE51bGwoIm5vZGUgZG9lcyBub3QgaGF2ZSBhIG1vZGVsUXVlcnlBZGFwdGVyIiwgbm9kZVF1ZXJ5KTsKLQkJCi0JCWV4cGVjdGVkID0gZW1iZWRkZWRRdWVyeUNsYXNzOwotCQlhY3R1YWwgPSBub2RlUXVlcnkuZ2V0Q2xhc3MoKTsKLQkJYXNzZXJ0RXF1YWxzKCJkb2N1bWVudHMgbW9kZWwgcXVlcnkgaXMgbm90IGFzIGV4cGVjdGVkIiwgZXhwZWN0ZWQsIGFjdHVhbCk7Ci0KLQotCQkKLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgY2hlY2tFbWJlZGRlZEZhY3Rvcmllcy4KLQkgKiBAcGFyYW0gbW9kZWwKLQkgKiBAcGFyYW0gY2xvbmVkTW9kZWwKLQkgKiBAcmV0dXJuIGJvb2xlYW4KLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gY2hlY2tGb3JTYW1lRW1iZWRkZWRGYWN0b3JpZXMoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCwgSVN0cnVjdHVyZWRNb2RlbCBjbG9uZWRNb2RlbCkgewotCQlib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0KLQotCQlFbWJlZGRlZFR5cGVIYW5kbGVyIG9sZEVtYmVkZGVkVHlwZSA9IGdldEVtYmVkZGVkVHlwZShtb2RlbCk7Ci0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgbmV3RW1iZWRkZWRUeXBlID0gZ2V0RW1iZWRkZWRUeXBlKGNsb25lZE1vZGVsKTsKLQkJLy8gZXhwZWN0IHRvIGJlIHRoZSBzYW1lIHR5cGUKLQkJaWYgKCFvbGRFbWJlZGRlZFR5cGUuZ2V0Q2xhc3MoKS5lcXVhbHMobmV3RW1iZWRkZWRUeXBlLmdldENsYXNzKCkpKSB7Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJCWFzc2VydFRydWUocmVzdWx0KTsKLQkJfQotCi0JCUxpc3Qgb2xkRmFjdG9yaWVzID0gb2xkRW1iZWRkZWRUeXBlLmdldEFkYXB0ZXJGYWN0b3JpZXMoKTsKLQkJTGlzdCBuZXdGYWN0b3JpZXMgPSBuZXdFbWJlZGRlZFR5cGUuZ2V0QWRhcHRlckZhY3RvcmllcygpOwotCQlyZXN1bHQgPSBjaGVja0ZhY3Rvcmllc0xpc3RGb3JFcXVpdmFsZW5jZShvbGRGYWN0b3JpZXMsIG5ld0ZhY3Rvcmllcyk7Ci0KLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByaXZhdGUgRW1iZWRkZWRUeXBlSGFuZGxlciBnZXRFbWJlZGRlZFR5cGUoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCkgewotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0RXhpc3RpbmdBZGFwdGVyKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgibW9kZWwgZGlkIG5vdCBoYXZlIGVtYmVkZGVkIGFkYXB0ZXIiLCBwYWdlRGlyZWN0aXZlQWRhcHRlcik7Ci0KLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBlbWJlZGRlZEhhbmRsZXIgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRFbWJlZGRlZFR5cGUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgibW9kZWwgZGlkIG5vdCBoYXZlIGVtYmVkZGVkIGhhbmRsZXIiLCBlbWJlZGRlZEhhbmRsZXIpOwotCi0JCXJldHVybiBlbWJlZGRlZEhhbmRsZXI7Ci0JfQotCi0KLQkvKioKLQkgKiBNZXRob2QgY2hlY2tGYWN0b3JpZXNMaXN0LgotCSAqIEBwYXJhbSBmYWN0b3JpZXMKLQkgKiBAcGFyYW0gbmV3RmFjdG9yaWVzCi0JICogQHJldHVybiBib29sZWFuCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIGNoZWNrRmFjdG9yaWVzTGlzdEZvcklkZW50aXR5KExpc3QgZmFjdG9yaWVzLCBMaXN0IG5ld0ZhY3RvcmllcykgewotCQlib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0JCWlmIChmYWN0b3JpZXMuc2l6ZSgpICE9IG5ld0ZhY3Rvcmllcy5zaXplKCkpIHsKLQkJCXJlc3VsdCA9IGZhbHNlOwotCQl9Ci0JCWVsc2UgewotCQkJLy8gbm5lZCBub3QgYmUgaWRlbnRpY2FsLCBub3Igc2FtZSBvcmRlcgotCQkJLy8JCQlmb3IgKGludCBpID0gMDsgaSA8IGZhY3Rvcmllcy5zaXplKCk7IGkrKykgewotCQkJLy8JCQkJaWYgKCEoZmFjdG9yaWVzLmdldChpKSA9PSBuZXdGYWN0b3JpZXMuZ2V0KGkpKSkgewotCQkJLy8JCQkJCXJlc3VsdCA9IGZhbHNlOwotCQkJLy8JCQkJCWJyZWFrOwotCQkJLy8JCQkJfQotCQkJLy8JCQl9Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gY2hlY2tGYWN0b3JpZXNMaXN0Rm9yRXF1aXZhbGVuY2UoTGlzdCBmYWN0b3JpZXMsIExpc3QgbmV3RmFjdG9yaWVzKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLQkJaWYgKGZhY3Rvcmllcy5zaXplKCkgIT0gbmV3RmFjdG9yaWVzLnNpemUoKSkgewotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGZhY3Rvcmllcy5zaXplKCk7IGkrKykgewotCQkJCWlmICghZmFjdG9yaWVzLmdldChpKS5nZXRDbGFzcygpLmVxdWFscyhuZXdGYWN0b3JpZXMuZ2V0KGkpLmdldENsYXNzKCkpKSB7Ci0JCQkJCXJlc3VsdCA9IGZhbHNlOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTdHJ1Y3R1cmVkTW9kZWxIVE1MKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCUFycmF5TGlzdCBmYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBtb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKLQkJZmFjdG9yaWVzID0gKEFycmF5TGlzdCkgZmFjdG9yaWVzLmNsb25lKCk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBjbG9uZWRNb2RlbCA9IG1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCWFzc2VydFRydWUoImNsb25lZCBtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBjbG9uZWRNb2RlbCAhPSBudWxsKTsKLQkJLy8gbWFrZSBzdXJlIHRoZSBjcml0aWNhbCB2YXJpYWJsZXMgYXJlIGNvcnJlY3QuCi0KLQkJQXJyYXlMaXN0IG5ld0ZhY3RvcmllcyA9IChBcnJheUxpc3QpIGNsb25lZE1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpLmdldEZhY3RvcmllcygpOwotCQluZXdGYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSBuZXdGYWN0b3JpZXMuY2xvbmUoKTsKLQotCQlib29sZWFuIHBhc3NlZCA9IGNoZWNrRmFjdG9yaWVzTGlzdEZvcklkZW50aXR5KGZhY3RvcmllcywgbmV3RmFjdG9yaWVzKTsKLQotCQlhc3NlcnRUcnVlKCJuZXdJbnN0YW5jZSBvZiBzdHJ1Y3R1cmVkIG1vZGVsIGlzIG5vdCBjb3JyZWN0IiwgcGFzc2VkKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyBzb21lIGNvbnRlbnQgc2hvdWxkbid0IGNoYW5nZSB0aGUgZmFjdG9yaWVzCi0JCWNsb25lZE1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjxzYW1wbGU+IHRleHQiKTsKLQkJQXJyYXlMaXN0IHR3b0ZhY3RvcmllcyA9IChBcnJheUxpc3QpIGNsb25lZE1vZGVsLmdldEZhY3RvcnlSZWdpc3RyeSgpLmdldEZhY3RvcmllcygpOwotCQl0d29GYWN0b3JpZXMgPSAoQXJyYXlMaXN0KSB0d29GYWN0b3JpZXMuY2xvbmUoKTsKLQotCQlwYXNzZWQgPSBjaGVja0ZhY3Rvcmllc0xpc3RGb3JJZGVudGl0eShmYWN0b3JpZXMsIG5ld0ZhY3Rvcmllcyk7Ci0JCWFzc2VydFRydWUoIm5ld0luc3RhbmNlIG9mIHN0cnVjdHVyZWQgbW9kZWwgaXMgbm90IGNvcnJlY3QiLCBwYXNzZWQpOwotCi0JfQotCi0JcHJpdmF0ZSBNb2RlbFF1ZXJ5IGdldEVtYmVkZGVkTW9kZWxRdWVyeShOb2RlIG5vZGUpIHsKLQkJTW9kZWxRdWVyeSBlbWJlZGRlZE1vZGVsUXVlcnkgPSBudWxsOwotCi0JCWlmIChub2RlIGluc3RhbmNlb2YgSU5vZGVOb3RpZmllcikgeyAKLQkJCU5vZGUgb3duZXJOb2RlID0gbm9kZS5nZXRPd25lckRvY3VtZW50KCk7Ci0JCQlpZiAob3duZXJOb2RlID09IG51bGwpIHsKLQkJCQkvLyB0aGVuIG11c3QgYmUgdGhlIGRvY3VtZW50IGl0c2VsZgotCQkJCW93bmVyTm9kZSA9IG5vZGU7IAotCQkJfQotCQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSU5vZGVOb3RpZmllcikgb3duZXJOb2RlKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJCWlmIChwYWdlRGlyZWN0aXZlQWRhcHRlciAhPSBudWxsKSB7Ci0KLQkJCQlTdHJpbmcgZWZmZWN0aXZlQ29udGVudFR5cGUgPSBudWxsOwotCQkJCU1vZGVsUXVlcnkgcG90ZW50aWFsTW9kZWxRdWVyeU9iamVjdCA9IG51bGw7Ci0KLQkJCQlTdHJpbmcgZmFtaWx5SWQgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRFbWJlZGRlZFR5cGUoKS5nZXRGYW1pbHlJZCgpOwotCQkJCS8vaWYgKENvbnRlbnRUeXBlRmFtaWx5Rm9ySFRNTC5IVE1MX0ZBTUlMWS5lcXVhbHMoZmFtaWx5SWQpKSB7Ci0JCQkJaWYgKCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmNvbnRlbnRmYW1pbHkuaHRtbCIuZXF1YWxzKGZhbWlseUlkKSkgewotCQkJCQllZmZlY3RpdmVDb250ZW50VHlwZSA9ICJ0ZXh0L2h0bWwiOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJZWZmZWN0aXZlQ29udGVudFR5cGUgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRDb250ZW50VHlwZSgpOwotCQkJCX0KLQkJCQkKLQkJCQlwb3RlbnRpYWxNb2RlbFF1ZXJ5T2JqZWN0ID0gKE1vZGVsUXVlcnkpIGVtYmVkZGVkTW9kZWxRdWVyaWVzLmdldChlZmZlY3RpdmVDb250ZW50VHlwZSk7Ci0JCQkJCi0JCQkJaWYgKHBvdGVudGlhbE1vZGVsUXVlcnlPYmplY3QgPT0gbnVsbCkgewotCQkJCQlNb2RlbFF1ZXJ5QWRhcHRlciBlbWJlZGRlZEFkYXB0ZXIgPSAoTW9kZWxRdWVyeUFkYXB0ZXIpIHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmFkYXB0KChJTm9kZU5vdGlmaWVyKSBub2RlLCBNb2RlbFF1ZXJ5QWRhcHRlci5jbGFzcyk7Ci0JCQkJCWlmIChlbWJlZGRlZEFkYXB0ZXIgIT0gbnVsbCkgewotCQkJCQkJLy8gd2Ugd2lsbCBjYWNoZSBvbmUgbW9kZWwgcXVlcnkgcGVyIGNvbnRlbnQgdHlwZQotCQkJCQkJZW1iZWRkZWRNb2RlbFF1ZXJ5ID0gZW1iZWRkZWRBZGFwdGVyLmdldE1vZGVsUXVlcnkoKTsKLQkJCQkJCWVtYmVkZGVkTW9kZWxRdWVyaWVzLnB1dChlZmZlY3RpdmVDb250ZW50VHlwZSwgZW1iZWRkZWRNb2RlbFF1ZXJ5KTsKLQkJCQkJfQotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJZW1iZWRkZWRNb2RlbFF1ZXJ5ID0gcG90ZW50aWFsTW9kZWxRdWVyeU9iamVjdDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGVtYmVkZGVkTW9kZWxRdWVyeTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlU3RydWN0dXJlZE1vZGVsSlNQWE1MKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQkKLQkKLQkKLQkKLQkJLy8gTm93LCBhc3NpZ25pbmcgdXNlIGEgcGFnZSBkaXJlY3RpdmUsIGJ1dCBsZWF2aW5nIGVtYmVkZGVkIHR5cGUgdGhlIHNhbWUgYXMgZGVmYXVsdAotCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRUZXh0KHRoaXMsICI8JS0tIGtlZXAgSlNQIHBhZ2UgY29tcGlsZXIgZnJvbSBnZW5lcmF0aW5nIGNvZGUgdGhhdCBhY2Nlc3NlcyB0aGUgc2Vzc2lvbiAtLSU+XG4iICsgCi0JCQkJIjwlQCBwYWdlIHNlc3Npb249XCJmYWxzZVwiICBjb250ZW50VHlwZT1cInRleHQveG1sOyBjaGFyc2V0PUlTTy04ODU5LTFcIiAlPlxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiPCEtLSBsb2FkIFdQUyBwb3J0bGV0IHRhZyBsaWJyYXJ5IGFuZCBpbml0aWFsaXplIG9iamVjdHMgLS0+XG4iICsgCi0JCQkJIjwlQCB0YWdsaWIgdXJpPVwiL1dFQi1JTkYvdGxkL3BvcnRsZXQudGxkXCIgcHJlZml4PVwicG9ydGxldEFQSVwiICU+XG4iICsgCi0JCQkJIjxwb3J0bGV0QVBJOmluaXQgLz4gXG4iICsgCi0JCQkJIlxuIiArIAotCQkJCSI8JS0tIFJlcGxhY2UgdGhlIG5hbWUgb2YgdGhlIGxheW91dCBzcGVjaWZpZWQgYnkgdGhlIGxheW91dE5hbWUgYXR0cmlidXRlIG9mIHRoZSBjYW52YXMgZWxlbWVudCBiZWxvdyB3aXRoIHRoZSBsYXlvdXQgbmFtZSBmb3IgeW91ciBwb3J0bGV0LiAtLSU+XG4iICsgCi0JCQkJIjxjYW52YXMgeG1sbnMgPVwiaHR0cDovL3d3dy52b2xhbnRpcy5jb20veG1sbnMvbWFybGluLWNkbVwiIFxuIiArIAotCQkJCSIgICAgICAgIHhtbG5zOnhzaT1cImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlXCIgXG4iICsgCi0JCQkJIiAgICAgICAgbGF5b3V0TmFtZT1cIi9zYW1wbGVfbGF5b3V0Lm1seXRcIiBcbiIgKyAKLQkJCQkiICAgICAgICB0eXBlPVwicG9ydGxldFwiID5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIlxuIiArIAotCQkJCSI8JS0tIFNwZWNpZnkgdGhlIHBhbmUgbmFtZSBmcm9tIHlvdXIgbGF5b3V0IHBvbGljeSBhcyB0aGUgdmFsdWUgZm9yIHRoZSBuYW1lIGF0dHJpYnV0ZSBvZiB0aGUgcGFuZSBlbGVtZW50IGJlbG93ICAtLSU+XG4iICsgCi0JCQkJIjxwYW5lIG5hbWU9XCJzYW1wbGVfcGFuZVwiPlxuIiArIAotCQkJCSIgICAgPHA+SGVsbG8hPC9wPlxuIiArIAotCQkJCSIgICAgPHA+VGhpcyBpcyBhbiBYRElNRSA8Yj52aWV3IG1vZGU8L2I+IHBhZ2UgLiBZb3UgaGF2ZSB0byBlZGl0IHRoaXMgcGFnZSB0byBjdXN0b21pemUgaXQgZm9yIHlvdXIgb3duIHVzZS48YnIvPjxici8+XG4iICsgCi0JCQkJIiAgICBUaGUgc291cmNlIGZpbGUgZm9yIHRoaXMgcGFnZSBpcyBcIi9XZWIgQ29udGVudC90ZXN0cG9ydGxldF9sZWdhY3kvanNwL3hkaW1lL1RlbXBsYXRlTGVnYWN5UG9ydGxldFZpZXcuanNwXCIuXG4iICsgCi0JCQkJIjwvcD5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIjxici8+XG4iICsgCi0JCQkJIlRoaXMgaXMgaW1hZ2UgMSAgICBcbiIgKyAKLQkJCQkiPGltZyBzcmM9XCIvcGF3Lm1pbWdcIiBhbHQ9XCJub2ltZ1wiIC8+XG4iICsgCi0JCQkJIlxuIiArIAotCQkJCSI8YnIvPlxuIiArIAotCQkJCSJUaGlzIGlzIGltYWdlIDIgICAgXG4iICsgCi0JCQkJIjxpbWcgc3JjPVwicGF3Lm1pbWdcIiBhbHQ9XCJub2ltZ1wiIC8+XG4iICsgCi0JCQkJIlxuIiArIAotCQkJCSI8L3BhbmU+XG4iICsgCi0JCQkJIjwvY2FudmFzPiIpOwotCQotCQkJY2hlY2tFbWJlZGRlZFR5cGUobW9kZWwsIEVtYmVkZGVkWE1MLmNsYXNzKTsKLQkJCWNoZWNrTW9kZWxRdWVyeShtb2RlbCwgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MpOwotCQkJY2hlY2tFbWJlZGRlZE1vZGVsUXVlcnkobW9kZWwsIEpTUE1vZGVsUXVlcnlBZGFwdGVySW1wbC5jbGFzcywgSlNQTW9kZWxRdWVyeUltcGwuY2xhc3MsIFhNTE1vZGVsUXVlcnlJbXBsLmNsYXNzKTsKLQkJCQotCQkJCi0JCQkKLQkJCQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTdHJ1Y3R1cmVkTW9kZWxKU1BXTUwoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCQotCQotCQotCQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC92bmQud2FwLndtbFwiICU+XG4iICsgCi0JCQkJIlxuIiArIAotCQkJCSIgIDxqc3A6dXNlQmVhbiBpZD1cImJlYW5JbnN0YW5jZU5hbWVcIiBzY29wZT1cInNlc3Npb25cIiBjbGFzcz1cInBhY2thZ2UuY2xhc3NcIiAvPlxuIiArIAotCQkJCSIgIDxqc3A6Z2V0UHJvcGVydHkgbmFtZT1cImJlYW5JbnN0YW5jZU5hbWVcIiBwcm9wZXJ0eT1cIipcIiAvPlxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiICA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJ1dGYtOFwiPz5cbiIgKyAKLQkJCQkiICA8IURPQ1RZUEUgd21sIFBVQkxJQyBcIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMy8vRU5cIiBcImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwxMy5kdGRcIj5cbiIgKyAKLQkJCQkiICA8d21sPlxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiICAgIDx0ZW1wbGF0ZT5cbiIgKyAKLQkJCQkiICAgICAgPCEtLSBUZW1wbGF0ZSBpbXBsZW1lbnRhdGlvbiBoZXJlLiAtLT5cbiIgKyAKLQkJCQkiICAgICAgPGRvIHR5cGU9XCJwcmV2XCI+PHByZXYvPjwvZG8+XG4iICsgCi0JCQkJIiAgICA8L3RlbXBsYXRlPlxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiICA8JVxuIiArIAotCQkJCSIgIGlmIChzZXNzaW9uLmlzTmV3KCkgfHwgc2Vzc2lvbi5nZXRBdHRyaWJ1dGUoXCJ1c2VyaWRcIik9PW51bGwgKSB7XG4iICsgCi0JCQkJIiAgJT5cbiIgKyAKLQkJCQkiICAgIDxjYXJkIGlkPVwiY2FyZDFcIiB0aXRsZT1cIkNhcmQgIzFcIj5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIiAgICAgIDxkbyB0eXBlPVwidW5rbm93blwiIGxhYmVsPVwiTmV4dFwiPlxuIiArIAotCQkJCSIgICAgICAgIDxnbyBocmVmPVwiI2NhcmQyXCIvPlxuIiArIAotCQkJCSIgICAgICA8L2RvPlxuIiArIAotCQkJCSIgICAgICA8cCBhbGlnbj1cImNlbnRlclwiPlxuIiArIAotCQkJCSIgICAgICAgIDxiaWc+PGI+Rmlyc3QgQ2FyZDwvYj48L2JpZz5cbiIgKyAKLQkJCQkiICAgICAgPC9wPlxuIiArIAotCQkJCSIgICAgPC9jYXJkPlxuIiArIAotCQkJCSJcbiIgKyAKLQkJCQkiICA8JVxuIiArIAotCQkJCSIgIH0gZWxzZSB7XG4iICsgCi0JCQkJIiAgJT5cbiIgKyAKLQkJCQkiICAgIDxjYXJkIGlkPVwiY2FyZDJcIiB0aXRsZT1cIkNhcmQgIzJcIj5cbiIgKyAKLQkJCQkiXG4iICsgCi0JCQkJIiAgICAgIDxwIGFsaWduPVwiY2VudGVyXCI+XG4iICsgCi0JCQkJIiAgICAgICAgPGJpZz48Yj4gPCU9IGJlYW5JbnN0YW5jZU5hbWUuZ2V0VXNlcmlkKCkgJT4gPC9iPjwvYmlnPlxuIiArIAotCQkJCSIgICAgICA8L3A+XG4iICsgCi0JCQkJIiAgICA8L2NhcmQ+XG4iICsgCi0JCQkJIiAgPCVcbiIgKyAKLQkJCQkiICB9XG4iICsgCi0JCQkJIiAgJT5cbiIgKyAKLQkJCQkiICA8L3dtbD4iKTsKLQkKLQkJCWNoZWNrRW1iZWRkZWRUeXBlKG1vZGVsLCBFbWJlZGRlZEhUTUwuY2xhc3MpOwotCQkJY2hlY2tNb2RlbFF1ZXJ5KG1vZGVsLCBKU1BNb2RlbFF1ZXJ5SW1wbC5jbGFzcyk7Ci0JCQljaGVja0VtYmVkZGVkTW9kZWxRdWVyeShtb2RlbCwgSlNQTW9kZWxRdWVyeUFkYXB0ZXJJbXBsLmNsYXNzLCBKU1BNb2RlbFF1ZXJ5SW1wbC5jbGFzcywgSFRNTE1vZGVsUXVlcnlJbXBsLmNsYXNzKTsKLQkJCQotCQkJCi0JCQkKLQkJCQotCX0KLQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9UZXN0TW9kZWxFbWJlZGRlZENvbnRlbnRUeXBlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzg4OWU1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL1Rlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmRvY3VtZW50LlBhZ2VEaXJlY3RpdmVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuRW1iZWRkZWRUeXBlSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlclV0aWxpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICogCi0gKiBUbyBjaGFuZ2UgdGhpcyBnZW5lcmF0ZWQgY29tbWVudCBlZGl0IHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZSAidHlwZWNvbW1lbnQiOgotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+VGVtcGxhdGVzLiBUbyBlbmFibGUgYW5kIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mCi0gKiB0eXBlIGNvbW1lbnRzIGdvIHRvIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPkNvZGUgR2VuZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGVzdE1vZGVsQ2xvbmUuCi0JICovCi0JcHVibGljIFRlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCX0KLQotCXB1YmxpYyBzdGF0aWMgVGVzdCBnZXRUZXN0KCkgewotCQlyZXR1cm4gbmV3IFRlc3RNb2RlbEVtYmVkZGVkQ29udGVudFR5cGUoInRlc3RTdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEpTUENoYW5nZSIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGNoZWNrRW1iZWRkZWRUeXBlKElTdHJ1Y3R1cmVkTW9kZWwgY2xvbmVkTW9kZWwsIE9iamVjdCBleHBlY3RlZFR5cGUpIHsKLQkJRG9jdW1lbnQgZG9jID0gKChJRE9NTW9kZWwpIGNsb25lZE1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBlbWJlZGRlZFR5cGVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElOb2RlTm90aWZpZXIpIGRvYykuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoImNsb25lZCBtb2RlbCBkaWQgbm90IGhhdmUgZW1iZWRkZWQgYWRhcHRlciIsIGVtYmVkZGVkVHlwZUFkYXB0ZXIpOwotCi0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgZW1iZWRkZWRIYW5kbGVyID0gZW1iZWRkZWRUeXBlQWRhcHRlci5nZXRFbWJlZGRlZFR5cGUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY2xvbmVkIG1vZGVsIGRpZCBub3QgaGF2ZSBlbWJlZGRlZCBoYW5kbGVyIiwgZW1iZWRkZWRIYW5kbGVyKTsKLQotCQlhc3NlcnRUcnVlKCJjbG9uZWQgbW9kZWwgZW1iZWRkZWRIYW5kbGVyIGlzIHdyb25nIHR5cGUiLCBlbWJlZGRlZEhhbmRsZXIuZXF1YWxzKGV4cGVjdGVkVHlwZSkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZFhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gWE1MIHNob3VsZCBOT1QgaGF2ZSBhbiBlbWJlZGRlZCB0eXBlCi0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBlbWJlZGRlZEhhbmRsZXIgPSAoRW1iZWRkZWRUeXBlSGFuZGxlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEFkYXB0ZXJGb3IoRW1iZWRkZWRUeXBlSGFuZGxlci5jbGFzcyk7Ci0JCWFzc2VydFRydWUoImVtYmVkZWRIYW5sZGVyIHNob3VsZCBiZSBudWxsIGZvciBYTUwiLCBlbWJlZGRlZEhhbmRsZXIgPT0gbnVsbCk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RydWN0dXJlZE1vZGVsRW1iZWRkZWRIVE1MKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCS8vIHNob3VsZCBOT1QgaGF2ZSBhbiBlbWJlZGRlZCB0eXBlCi0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBlbWJlZGRlZEhhbmRsZXIgPSAoRW1iZWRkZWRUeXBlSGFuZGxlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEFkYXB0ZXJGb3IoRW1iZWRkZWRUeXBlSGFuZGxlci5jbGFzcyk7Ci0JCWFzc2VydFRydWUoImVtYmVkZWRIYW5sZGVyIHNob3VsZCBiZSBudWxsIGZvciBIVE1MIiwgZW1iZWRkZWRIYW5kbGVyID09IG51bGwpOwotCi0JfQotCi0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkTW9kZWwgZG9TdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIEZpcnN0IG1ha2UgKGVtcHR5KSBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihDb250ZW50VHlwZUlkRm9ySlNQLkNvbnRlbnRUeXBlSURfSlNQKTsKLQkJYXNzZXJ0VHJ1ZSgibW9kZWwgY291bGQgbm90IGJlIGNyZWF0ZWQhIiwgbW9kZWwgIT0gbnVsbCk7Ci0KLQkJLy8gc2hvdWxkIGhhdmUgYW4gZW1iZWRkZWQgdHlwZQotCQlEb2N1bWVudCBkb2MgPSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIGVtYmVkZGVkSGFuZGxlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJTm9kZU5vdGlmaWVyKSBkb2MpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnRUcnVlKCJlbWJlZGVkSGFubGRlciBzaG91bGQgTk9UIGJlIG51bGwgZm9yIEpTUCIsIGVtYmVkZGVkSGFuZGxlciAhPSBudWxsKTsKLQotCQkvLyBlbWJlZGRlZCB0eXBlIHNob3VsZCBiZSBIVE1MIHNpbmNlIG5vIGNvbnRlbnQKLQkJY2hlY2tFbWJlZGRlZFR5cGUobW9kZWwsIE1vZGVsSGFuZGxlclV0aWxpdHkuZ2V0RGVmYXVsdEVtYmVkZGVkVHlwZSgpKTsKLQotCQlTdHJpbmcgdGVzdENvbnRlbnQgPSAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiAlPiI7Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDAsIDAsIHRlc3RDb250ZW50KTsKLQkJYXNzZXJ0VHJ1ZSgicmVpbml0IHNob3VsZCBOT1QgYmUgbmVlZGVkIGluIHRoaXMgY2FzZSIsICFtb2RlbC5pc1JlaW5pdGlhbGl6YXRpb25OZWVkZWQoKSk7Ci0KLQkJLy8gZW1iZWRkZWQgdHlwZSBzaG91bGQgU1RJTEwgYmUgSFRNTCBzaW5jZSBubyBjb250ZW50VHlwZSB3YXMKLQkJLy8gdGV4dC9odG1sCi0JCWNoZWNrRW1iZWRkZWRUeXBlKG1vZGVsLCBNb2RlbEhhbmRsZXJVdGlsaXR5LmdldERlZmF1bHRFbWJlZGRlZFR5cGUoKSk7Ci0KLQkJcmV0dXJuIG1vZGVsOwotCQkvLwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdHJ1Y3R1cmVkTW9kZWxFbWJlZGRlZEpTUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWRvU3RydWN0dXJlZE1vZGVsRW1iZWRkZWRKU1AoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RydWN0dXJlZE1vZGVsRW1iZWRkZWRKU1BDaGFuZ2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCS8vIHN0YXJ0IHdpdGggdGhlIGZ1bGwgdGVzdCBjYXNlCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBkb1N0cnVjdHVyZWRNb2RlbEVtYmVkZGVkSlNQKCk7Ci0JCS8vIGNoYW5nZSAiaHRtbCIgdG8gInhtbCIKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgMjcsIDQsICJ4bWwiKTsKLQkJLy8gd2l0aCByZWluaXQgaW4gWE1MIG1vZGVsIC4uLiBpdHMgYWxyZWFkeSBiZWVuIHJlLWluaXRpYWxpemVkCi0JCS8vIGFzc2VydFRydWUoInJlaW5pdCBTSE9VTEQgYmUgbmVlZGVkIGluIHRoaXMgY2FzZSIsCi0JCS8vIG1vZGVsLmlzUmVpbmlpdGlhbGl6YXRpb25OZWVkZWQoKSk7Ci0KLQkJaWYgKG1vZGVsLmlzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpKSB7Ci0JCQltb2RlbC5yZWluaXQoKTsKLQkJfQotCi0JCS8vIGVtYmVkZGVkIHR5cGUgc2hvdWxkIG5vdyBiZSBYTUwKLQkJY2hlY2tFbWJlZGRlZFR5cGUobW9kZWwsIE1vZGVsSGFuZGxlclV0aWxpdHkuZ2V0RW1iZWRkZWRDb250ZW50VHlwZUZvcigidGV4dC94bWwiKSk7Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0JlYW5JbmZvUHJvdmlkZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvQmVhbkluZm9Qcm92aWRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDVkY2E4OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvQmVhbkluZm9Qcm92aWRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSUphdmFFbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JT3BlbmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSVBhY2thZ2VGcmFnbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFja2FnZUZyYWdtZW50Um9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JUGFyZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFDb3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLkphdmFNb2RlbEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuQmVhbkluZm9Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLmludGVybmFsLmNvbnRlbnRhc3Npc3QuSUphdmFQcm9wZXJ0eURlc2NyaXB0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLm9zZ2kuc2VydmljZS5kYXRhbG9jYXRpb24uTG9jYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JT3ZlcndyaXRlUXVlcnk7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB0ZXN0cyB0aGUgQmVhbkluZm9Qcm92aWRlci4gQ3VycmVudGx5IHRlc3Qgd29ya3NwYWNlIE1VU1QgcG9pbnQKLSAqIHRvIHRoZSBzcGVjaWZpYyBvbmUgZm9yIHRoaXMgdGVzdC4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIEJlYW5JbmZvUHJvdmlkZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCWNsYXNzIE92ZXJ3cml0ZU5vbmUgaW1wbGVtZW50cyBJT3ZlcndyaXRlUXVlcnkgewotCQlwdWJsaWMgU3RyaW5nIHF1ZXJ5T3ZlcndyaXRlKFN0cmluZyBwYXRoU3RyaW5nKSB7Ci0JCQlyZXR1cm4gSU92ZXJ3cml0ZVF1ZXJ5LkFMTDsKLQkJfQotCX0KLQotCXByaXZhdGUgSVJlc291cmNlIGZSZXNvdXJjZTsKLQlwcml2YXRlIEJlYW5JbmZvUHJvdmlkZXIgZlByb3ZpZGVyOwotCXByaXZhdGUgSGFzaFNldCBmQWxyZWFkeU9wZW4gPSBuZXcgSGFzaFNldCgpOwotCXByaXZhdGUgUHJvamVjdFVuemlwVXRpbGl0eSBmUHJvalV0aWwgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmSXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIEJlYW5JbmZvUHJvdmlkZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5mSXNTZXR1cCkgewotCQkJaW5pdGlhbGl6ZVJlc291cmNlKCk7Ci0JCQl0aGlzLmZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBpbml0aWFsaXplUmVzb3VyY2UoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZlByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0JCS8vIHBsYXRmb3JtIGxvY2F0aW9uIG1heSBiZSBudWxsIC0tIGRlcGVuZHMgb24gIm1vZGUiIG9mIHBsYXRmb3JtCi0JCWlmIChwbGF0Zm9ybUxvY2F0aW9uICE9IG51bGwpIHsKLQkJCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgImJlYW5pbmZvX3Rlc3RzLnppcCIsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCQlmUHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRQYXRoKCkpOwotCQkJZlByb2pVdGlsLmluaXRKYXZhUHJvamVjdCgiQkVBTklORk8iKTsKLQkJCUlXb3Jrc3BhY2VSb290IHJvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJU3RyaW5nIHdvcmtzcGFjZVJlbGF0aXZlTG9jYXRpb24gPSAiL0JFQU5JTkZPL0JFQU5fVEVTVFMvYmVhbkluZm9fdGVzdC5qc3AiOwotCQkJZlJlc291cmNlID0gcm9vdC5nZXRGaWxlKG5ldyBQYXRoKHdvcmtzcGFjZVJlbGF0aXZlTG9jYXRpb24pKTsKLQkJCUlKYXZhUHJvamVjdCBqYXZhUHJvaiA9IEphdmFDb3JlLmNyZWF0ZShmUmVzb3VyY2UuZ2V0UHJvamVjdCgpKTsKLQkJCW9wZW5QYXRoKGphdmFQcm9qKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBGaWxlIGdldFNvdXJjZURpcmVjdG9yeShTdHJpbmcgYWJzb2x1dGVTb3VyY2VEaXJlY3RvcnlQYXRoKSB7Ci0JCUZpbGUgc291cmNlRGlyZWN0b3J5ID0gbmV3IEZpbGUoYWJzb2x1dGVTb3VyY2VEaXJlY3RvcnlQYXRoKTsKLQkJaWYgKCFzb3VyY2VEaXJlY3RvcnkuZXhpc3RzKCkgfHwgIXNvdXJjZURpcmVjdG9yeS5pc0RpcmVjdG9yeSgpKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCQlyZXR1cm4gc291cmNlRGlyZWN0b3J5OwotCX0KLQotCXByaXZhdGUgdm9pZCBvcGVuUGF0aChJSmF2YVByb2plY3QgamF2YVByb2opIHsKLQkJdHJ5IHsKLQkJCWlmIChqYXZhUHJvai5leGlzdHMoKSAmJiAhamF2YVByb2ouaXNPcGVuKCkpIHsKLQkJCQlqYXZhUHJvai5vcGVuKG51bGwpOwotCQkJfQotCQkJSVBhY2thZ2VGcmFnbWVudFJvb3Qgcm9vdCA9IGphdmFQcm9qLmdldFBhY2thZ2VGcmFnbWVudFJvb3QoZlJlc291cmNlLmdldFByb2plY3QoKSk7Ci0JCQlpZiAoIXJvb3QuaXNPcGVuKCkpCi0JCQkJcm9vdC5vcGVuKG51bGwpOwotCQkJSVBhY2thZ2VGcmFnbWVudCBmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJCRUFOX1RFU1RTIik7Ci0JCQlvcGVuQWxsKGZyYWcpOwotCQkJZnJhZyA9IGdldFBhY2thZ2VGcmFnbWVudChyb290LCAib3JnIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZSIpOwotCQkJaWYgKGZyYWcgIT0gbnVsbCAmJiAhZnJhZy5pc09wZW4oKSkKLQkJCQlvcGVuQWxsKGZyYWcpOwotCQkJZnJhZyA9IGdldFBhY2thZ2VGcmFnbWVudChyb290LCAib3JnLmVjbGlwc2UuanN0Iik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCQlmcmFnID0gZ2V0UGFja2FnZUZyYWdtZW50KHJvb3QsICJvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzIik7Ci0JCQlpZiAoZnJhZyAhPSBudWxsICYmICFmcmFnLmlzT3BlbigpKQotCQkJCW9wZW5BbGwoZnJhZyk7Ci0JCX0KLQkJY2F0Y2ggKEphdmFNb2RlbEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJUGFja2FnZUZyYWdtZW50IGdldFBhY2thZ2VGcmFnbWVudChJUGFja2FnZUZyYWdtZW50Um9vdCByb290LCBTdHJpbmcgZnJhZ21lbnROYW1lKSB0aHJvd3MgSmF2YU1vZGVsRXhjZXB0aW9uIHsKLQkJSVBhY2thZ2VGcmFnbWVudCBmcmFnID0gbnVsbDsKLQkJSUphdmFFbGVtZW50W10gY2hpbGRyZW4gPSByb290LmdldENoaWxkcmVuKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKLQkJCWlmIChjaGlsZHJlbltpXS5nZXRFbGVtZW50TmFtZSgpLmVxdWFscyhmcmFnbWVudE5hbWUpKSB7Ci0JCQkJZnJhZyA9IChJUGFja2FnZUZyYWdtZW50KSBjaGlsZHJlbltpXTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZnJhZzsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgb3BlbkFsbChJSmF2YUVsZW1lbnQgamF2YUVsZW0pIHRocm93cyBKYXZhTW9kZWxFeGNlcHRpb24gewotCQlpZiAoamF2YUVsZW0gaW5zdGFuY2VvZiBJT3BlbmFibGUpIHsKLQkJCWlmICghKChJT3BlbmFibGUpIGphdmFFbGVtKS5pc09wZW4oKSkKLQkJCQkoKElPcGVuYWJsZSkgamF2YUVsZW0pLm9wZW4obnVsbCk7Ci0JCX0KLQkJaWYgKGphdmFFbGVtIGluc3RhbmNlb2YgSVBhcmVudCAmJiAoKElQYXJlbnQpIGphdmFFbGVtKS5oYXNDaGlsZHJlbigpKSB7Ci0JCQlJSmF2YUVsZW1lbnRbXSBjaGlsZHJlbiA9ICgoSVBhcmVudCkgamF2YUVsZW0pLmdldENoaWxkcmVuKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKCFmQWxyZWFkeU9wZW4uY29udGFpbnMoY2hpbGRyZW5baV0uZ2V0RWxlbWVudE5hbWUoKSkpIHsKLQkJCQkJZkFscmVhZHlPcGVuLmFkZChjaGlsZHJlbltpXS5nZXRFbGVtZW50TmFtZSgpKTsKLQkJCQkJb3BlbkFsbChjaGlsZHJlbltpXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFsbCgpIHsKLQkJYmVhbk9uQ2xhc3NwYXRoKCk7Ci0JCWJlYW5JblByb2plY3QoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYmVhbk9uQ2xhc3NwYXRoKCkgewotCQkvLyBwYV9UT0RPIGRvbid0IHVzZSBKQnV0dG9uLCBwcm9wZXJ0aWVzIGNoYW5nZQotCQkvLyB1c2Ugc29tZXRoaW5nIG1vcmUgc3RhdGljCi0JCUlKYXZhUHJvcGVydHlEZXNjcmlwdG9yW10gZGVzY3JpcHRvcnMgPSBnZXRQcm92aWRlcigpLmdldFJ1bnRpbWVQcm9wZXJ0aWVzKGZSZXNvdXJjZSwgImphdmF4LnN3aW5nLkpCdXR0b24iKTsKLQkJLy8JCWFzc2VydEVxdWFscygiTnVtYmVyIG9mIHByb3BlcnRpZXMgZm9yIEpCdXR0b246IiwgMTIyLCBkZXNjcmlwdG9ycy5sZW5ndGgpOwotCQlhc3NlcnROb3ROdWxsKCJkZXNjcmlwdG9ycyBzaG91bGRuJ3QgYmUgbnVsbCIsIGRlc2NyaXB0b3JzKTsKLQotCQkvLwkJTGlzdCBnZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJTGlzdCBzZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJTGlzdCBib3RoID0gbmV3IEFycmF5TGlzdCgpOwotCQkvLwkJSUphdmFQcm9wZXJ0eURlc2NyaXB0b3IganBkID0gbnVsbDsKLQkJLy8JCWZvciAoaW50IGkgPSAwOyBpIDwgZGVzY3JpcHRvcnMubGVuZ3RoOyBpKyspIHsKLQkJLy8JCQlqcGQgPSBkZXNjcmlwdG9yc1tpXTsKLQkJLy8JCQlpZiAoanBkLmdldFJlYWRhYmxlKCkgJiYganBkLmdldFdyaXRlYWJsZSgpKQotCQkvLwkJCQlib3RoLmFkZChqcGQpOwotCQkvLwkJCWVsc2UgaWYgKGpwZC5nZXRSZWFkYWJsZSgpICYmICFqcGQuZ2V0V3JpdGVhYmxlKCkpCi0JCS8vCQkJCWdldE9ubHkuYWRkKGpwZCk7Ci0JCS8vCQkJZWxzZQotCQkvLwkJCQlzZXRPbmx5LmFkZChqcGQpOwotCQkvLwkJfQotCQkvLwkJYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2YgZ2V0T25seSBwcm9wZXJ0aWVzOiIsIDYyLCBnZXRPbmx5LnNpemUoKSk7Ci0JCS8vYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2Ygc2V0T25seSBwcm9wZXJ0aWVzOiIsIDAsIHNldE9ubHkuc2l6ZSgpKTsKLQkJLy9hc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXQgJiBzZXQgcHJvcGVydGllcyB0aGF0OiIsIDU5LAotCQkvLyBib3RoLnNpemUoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJlYW5JblByb2plY3QoKSB7Ci0JCUlKYXZhUHJvcGVydHlEZXNjcmlwdG9yW10gZGVzY3JpcHRvcnMgPSBnZXRQcm92aWRlcigpLmdldFJ1bnRpbWVQcm9wZXJ0aWVzKGZSZXNvdXJjZSwgIm9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuQmFzZUFsYnVtQ29sbGVjdGlvbkJlYW4iKTsKLQkJYXNzZXJ0RXF1YWxzKCJOdW1iZXIgb2YgcHJvcGVydGllcyBmb3IgQmFzZUFsYnVtQ29sbGVjdGlvbkJlYW46IiwgNCwgZGVzY3JpcHRvcnMubGVuZ3RoKTsKLQkJTGlzdCBnZXRPbmx5ID0gbmV3IEFycmF5TGlzdCgpOwotCQlMaXN0IHNldE9ubHkgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUxpc3QgYm90aCA9IG5ldyBBcnJheUxpc3QoKTsKLQkJSUphdmFQcm9wZXJ0eURlc2NyaXB0b3IganBkID0gbnVsbDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBkZXNjcmlwdG9ycy5sZW5ndGg7IGkrKykgewotCQkJanBkID0gZGVzY3JpcHRvcnNbaV07Ci0JCQlpZiAoanBkLmdldFJlYWRhYmxlKCkgJiYganBkLmdldFdyaXRlYWJsZSgpKQotCQkJCWJvdGguYWRkKGpwZCk7Ci0JCQllbHNlIGlmIChqcGQuZ2V0UmVhZGFibGUoKSAmJiAhanBkLmdldFdyaXRlYWJsZSgpKQotCQkJCWdldE9ubHkuYWRkKGpwZCk7Ci0JCQllbHNlCi0JCQkJc2V0T25seS5hZGQoanBkKTsKLQkJfQotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXRPbmx5IHByb3BlcnRpZXM6IiwgMSwgZ2V0T25seS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBzZXRPbmx5IHByb3BlcnRpZXM6IiwgMSwgc2V0T25seS5zaXplKCkpOwotCQlhc3NlcnRFcXVhbHMoIk51bWJlciBvZiBnZXQgJiBzZXQgcHJvcGVydGllcyB0aGF0OiIsIDIsIGJvdGguc2l6ZSgpKTsKLQkJLy8gZ2V0IG9ubHkKLQkJanBkID0gKElKYXZhUHJvcGVydHlEZXNjcmlwdG9yKSBnZXRPbmx5LmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJnZXQgcmVhZGFibGUgZm9yIGdldCBvbmx5IHByb3BlcnR5OiAiLCB0cnVlLCBqcGQuZ2V0UmVhZGFibGUoKSk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHdyaXRhYmxlIGZvciBnZXQgb25seSBwcm9wZXJ0eToiLCBmYWxzZSwganBkLmdldFdyaXRlYWJsZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJuYW1lIGZvciBnZXQgb25seSBwcm9wZXJ0eSIsICJudW1DZHMiLCBqcGQuZ2V0RGlzcGxheU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidHlwZSBmb3IgZ2V0IG9ubHkgcHJvcGVydHkiLCAiaW50IiwganBkLmdldERlY2xhcmVkVHlwZSgpKTsKLQkJLy8gc2V0IG9ubHkKLQkJanBkID0gKElKYXZhUHJvcGVydHlEZXNjcmlwdG9yKSBzZXRPbmx5LmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJnZXQgcmVhZGFibGUgZm9yIHNldCBvbmx5IHByb3BlcnR5OiAiLCBmYWxzZSwganBkLmdldFJlYWRhYmxlKCkpOwotCQlhc3NlcnRFcXVhbHMoImdldCB3cml0YWJsZSBmb3Igc2V0IG9ubHkgcHJvcGVydHk6IiwgdHJ1ZSwganBkLmdldFdyaXRlYWJsZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJuYW1lIGZvciBzZXQgb25seSBwcm9wZXJ0eSIsICJjZHMiLCBqcGQuZ2V0RGlzcGxheU5hbWUoKSk7Ci0JCWFzc2VydEVxdWFscygidHlwZSBmb3Igc2V0IG9ubHkgcHJvcGVydHkiLCAiU3RyaW5nW10iLCBqcGQuZ2V0RGVjbGFyZWRUeXBlKCkpOwotCQkvLyBib3RoCi0JCWpwZCA9IChJSmF2YVByb3BlcnR5RGVzY3JpcHRvcikgYm90aC5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHJlYWRhYmxlIGZvciBib3RoIHByb3BlcnR5OiAiLCB0cnVlLCBqcGQuZ2V0UmVhZGFibGUoKSk7Ci0JCWFzc2VydEVxdWFscygiZ2V0IHdyaXRhYmxlIGZvciBib3RoIHByb3BlcnR5OiIsIHRydWUsIGpwZC5nZXRXcml0ZWFibGUoKSk7Ci0JfQotCi0JcHJpdmF0ZSBCZWFuSW5mb1Byb3ZpZGVyIGdldFByb3ZpZGVyKCkgewotCQlpZiAoZlByb3ZpZGVyID09IG51bGwpCi0JCQlmUHJvdmlkZXIgPSBuZXcgQmVhbkluZm9Qcm92aWRlcigpOwotCQlyZXR1cm4gZlByb3ZpZGVyOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQSmF2YVRyYW5zbGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvSlNQSmF2YVRyYW5zbGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZTNkY2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUEphdmFUcmFuc2xhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRhc3Npc3Q7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci0KLS8qKgotICogVGhpcyBjbGFzcyB0ZXN0cyB0aGUgc2VkIEpTUEphdmFUcmFuc2xhdG9yIGNsYXNzCi0gKiAKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBKU1BKYXZhVHJhbnNsYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgSlNQSmF2YVRyYW5zbGF0b3JUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBbGxGaWxlcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCS8vIHRoaXMgdGVzdCBpcyBmb3IgUE1SOiA5MTkzMCBDTVZDOjIxODQ2OQotCQl0ZXN0SlNQSW5KYXZhc2NyaXB0KCJ0ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0LmpzcCIpOwotCX0gCi0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQSW5KYXZhc2NyaXB0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBzbSA9IGdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZmlsZW5hbWUpOwotCQlpZiAoc20gIT0gbnVsbCkgewotCQkJSURPTU5vZGUgeG1sTm9kZSA9IChJRE9NTm9kZSkgc20uZ2V0SW5kZXhlZFJlZ2lvbigwKTsKLQotCQkJaWYgKHhtbE5vZGUgIT0gbnVsbCkgewotCQkJCUpTUFRyYW5zbGF0b3IganNwdCA9IG5ldyBKU1BUcmFuc2xhdG9yKCk7Ci0JCQkJanNwdC5yZXNldCh4bWxOb2RlLCBudWxsKTsKLQkJCQkvLyBpbnQgc291cmNlVGV4dFBvcyA9IHRleHQuaW5kZXhPZigiPCU9IHRlc3RKc3BTdHJpbmciKSArIDE3OwotCQkJCS8vIGpzcHQuc2V0U291cmNlQ3Vyc29yKHNvdXJjZVRleHRQb3MpOyAvLyByaWdodCBhZnRlciB0aGUKLQkJCQkvLyB0ZXh0Ci0JCQkJanNwdC50cmFuc2xhdGUoKTsKLQkJCQlTdHJpbmcgdHJhbnNsYXRpb24gPSBqc3B0LmdldFRyYW5zbGF0aW9uKCkudG9TdHJpbmcoKTsKLQkJCQkvLyBvZmZzZXRzIGFyZSBmb3VuZCB1c2luZyBKU1BUcmFuc2xhdGlvbiBub3cKLQkJCQkvLyBpbnQgdHJhbnNsYXRlZEN1cnNvclBvc2l0aW9uID0ganNwdC5nZXRDdXJzb3JQb3NpdGlvbigpOwotCQkJCS8vIGFzc2VydEVxdWFscygiaW5jb3JyZWN0IGN1cnNvciBwb3NpdGlvbiA+IiArCi0JCQkJLy8gdHJhbnNsYXRlZEN1cnNvclBvc2l0aW9uLCA1MTksIHRyYW5zbGF0ZWRDdXJzb3JQb3NpdGlvbik7Ci0JCQkJLy8gYXNzZXJ0RXF1YWxzKCJ0cmFuc2xhdGlvbiB3YXMgaW5jb3JyZWN0IiwgInRlc3RKc3BTdHJpbmciLAotCQkJCS8vIHRyYW5zbGF0aW9uLnN1YnN0cmluZyg1MTksIDUzMikpOwotCQkJCWludCBjdXJzb3JTdGFydCA9IHRyYW5zbGF0aW9uLmluZGV4T2YoIm91dC5wcmludChcIlwiK1xuIHRlc3RKc3BTdHJpbmciKSArIDE0OwotCQkJCWFzc2VydEVxdWFscygiaW5jb3JyZWN0IGN1cnNvciBwb3NpdGlvbiA+IiArIGN1cnNvclN0YXJ0LCA2NjcsIGN1cnNvclN0YXJ0KTsKLQkJCX0KLQkJCXNtLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogSU1QT1JUQU5UIHdob2V2ZXIgY2FsbHMgdGhpcyBtdXN0IHJlbGVhc2VGcm9tUmVhZCBhZnRlciB0aGV5IGFyZSBkb25lCi0JICogdXNpbmcgaXQuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCi0JICogQHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uICAKLQkgKi8KLQlwcm90ZWN0ZWQgSVN0cnVjdHVyZWRNb2RlbCBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gY3JlYXRlIG1vZGVsCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJU3RydWN0dXJlZE1vZGVsIHNNb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQkJcmV0dXJuIHNNb2RlbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUFRyYW5zbGF0aW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L0pTUFRyYW5zbGF0aW9uVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzdhNTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC9KU1BUcmFuc2xhdGlvblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuY29udGVudGFzc2lzdDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Qb3NpdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZG9tZG9jdW1lbnQuRE9NTW9kZWxGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSUpTUFRyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0aW9uQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbkFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXIuU2Nhbm5lclVuaXRUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgdW5pdCB0ZXN0cyB0aGUgc2VkIEpTUFRyYW5zbGF0aW9uIG1lY2hhbmlzbS4KLSAqIFRoYXQgaW5jbHVkZXMgSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSwgSlNQVHJhbnNsYXRpb25BZGFwdGVyLCBhbmQgSlNQVHJhbnNsYXRpb24uCi0gKiBJdCB1c2VzIHRoZSBqc3BfaW5jbHVkZV90ZXN0LmpzcCwgYmVjYXVzZSBvZiB0aGUgbW9yZSBjb21wbGljYXRlZCB0cmFuc2xhdGlvbiBhbmQgb2Zmc2V0cy4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIEpTUFRyYW5zbGF0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgUHJvamVjdFVuemlwVXRpbGl0eSBmUHJvalV0aWwgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JCi0JcHJpdmF0ZSBIYXNoTWFwIGZYTUxKU1BQb3NpdGlvbnM7Ci0KLQlwdWJsaWMgSlNQVHJhbnNsYXRpb25UZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5pc1NldHVwKSB7Ci0JCQlkb1NldHVwKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZlByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQotCQkvLyByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsICJpbmNsdWRlc190ZXN0cy56aXAiLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQlmUHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRQYXRoKCkpOwotCQlmUHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KCJJTkNMVURFU19URVNUUyIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RUcmFuc2xhdGVQb3NpdGlvbnMoKSB7Ci0KLQkJSURPTU1vZGVsIG1vZGVsID0gZ2V0SW5jbHVkZVRlc3RNb2RlbEZvclJlYWQoKTsKLQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyIGFkYXB0ZXIgPSAoSlNQVHJhbnNsYXRpb25BZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCXRyeSB7Ci0JCQlIYXNoTWFwIGphdmEyanNwID0gdHJhbnNsYXRpb24uZ2V0SmF2YTJKc3BNYXAoKTsKLQkJCWFzc2VydEVxdWFscygiamF2YTJqc3AgbWFwIHNpemU6IiwgMTEsIGphdmEyanNwLnNpemUoKSk7Ci0KLQkJCUhhc2hNYXAganNwMmphdmEgPSB0cmFuc2xhdGlvbi5nZXRKc3AySmF2YU1hcCgpOwotCQkJYXNzZXJ0RXF1YWxzKCJqc3AyamF2YSBtYXAgc2l6ZToiLCAzLCBqc3AyamF2YS5zaXplKCkpOwotCi0JCQkvLyBzb21lIHRlc3QgcG9zaXRpb25zIChvdXQucHJpbnQoIiIgKyB8ICk7KQotCQkJCi0JCQkvLyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgY2xhc3NuYW1lIGxlbmd0aCBpbiBvdXIgY29tcGFyaXNvbnMKLQkJCS8vIHdpdGggamF2YSBvZmZzZXRzIHRoYXQgd2UgZ2V0IGZyb20gdGhlIHRyYW5zbGF0aW9uCi0JCQkvLyBzaW5jZSBpdCBjYW4gdmFyeSBkZXBlbmRpbmcgb24gd29ya3NwYWNlIGxvY2F0aW9uCi0JCQlpbnQgY2xhc3NuYW1lTGVuZ3RoID0gdHJhbnNsYXRpb24uZ2V0Q2xhc3NuYW1lKCkubGVuZ3RoKCk7Ci0JCQkKLQkJCWludCBqc3BUZXN0UG9zaXRpb24gPSB0cmFuc2xhdGlvbi5nZXRKc3BUZXh0KCkuaW5kZXhPZigiPCU9ICIpICsgNDsKLQkJCWludCBqYXZhT2Zmc2V0ID0gdHJhbnNsYXRpb24uZ2V0SmF2YU9mZnNldChqc3BUZXN0UG9zaXRpb24pIC0gY2xhc3NuYW1lTGVuZ3RoOwotCQkJYXNzZXJ0RXF1YWxzKCJKU1BUcmFuc2xhdGlvbiBqYXZhIG9mZnNldDoiLCA5NzIsIGphdmFPZmZzZXQpOwotCQkJCi0JCQkvLyAoPCU9IHwgJT4pCi0JCQlpbnQgamF2YVRlc3RQb3N0aXRpb24gPSB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpLmluZGV4T2YoIm91dC5wcmludChcIlwiK1xuICAgXG4pOyIpICsgMTQ7Ci0JCQkvLyBkb250JyBuZWVkIHRvIHdvcnJ5IGFib3V0IGNsYXNzbmFtZSBsZW5ndGggaGVyZSBiZWNhdXNlIHdlIGFyZSBjb21wYXJpbmcKLQkJCS8vIHdpdGggYSBwb3NpdGlvbiBpbiB0aGUgSlNQIGRvY3VtZW50ICh3aGljaCBkb2Vzbid0IGNvbnRhaW4gY2xhc3NuYW1lKQotCQkJaW50IGpzcE9mZnNldCA9IHRyYW5zbGF0aW9uLmdldEpzcE9mZnNldChqYXZhVGVzdFBvc3RpdGlvbik7Ci0JCQlhc3NlcnRFcXVhbHMoIkpTUFRyYW5zbGF0aW9uIGpzcCBvZmZzZXQ6IiwgNTY0LCBqc3BPZmZzZXQpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BUcmFuc2xhdGlvblRleHQoKSB7Ci0KLQkJSURPTU1vZGVsIG1vZGVsID0gZ2V0SW5jbHVkZVRlc3RNb2RlbEZvclJlYWQoKTsKLQkJU2Nhbm5lclVuaXRUZXN0cy52ZXJpZnlMZW5ndGhzKG1vZGVsLCBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKSk7Ci0JCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkvLyBuYW1lZCBhcyAuYmluIHNvIG5vIGxpbmUgY29udmVyc2lvbiBvY2N1cnMgKFxuIGlzIGluIHVzZSkKLQkJSW5wdXRTdHJlYW0gaW4gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oInRyYW5zbGF0ZWRfdGV4dC5iaW4iKTsKLQkJU3RyaW5nIGtub3duVHJhbnNsYXRpb25UZXh0ID0gbG9hZENoYXJzKGluKTsKLQkJdHJ5IHsKLQkJCS8vIGltcHJvdmVtZW50czogbWF5IG5lZWQgZmluZXIgdHVuZWQgdGV4dCBjb21wYXJlcyBsYXRlcgotCQkJLy8gZm9yIGRpZmZlcmVudCB0eXBlcyBvZiB0cmFuc2xhdGlvbnMgKGluY2x1ZGVzLCB4bWwtanNwIGluIHNjcmlwdCwgYXR0cmlidXRlcywgZXRjLi4uKQotCQkJU3RyaW5nIHRleHQgPSB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpOwotCQkJCi0JCQlhc3NlcnROb3ROdWxsKCJKU1AgdHJhbnNsYXRpb24gdGV4dDoiLCB0ZXh0KTsKLQkJCWFzc2VydEVxdWFscygiSlNQIHRyYW5zbGF0aW9uIHRleHQgZG9lcyBub3QgbWF0Y2ggZXhwZWN0ZWQiLCBrbm93blRyYW5zbGF0aW9uVGV4dCwgdGV4dCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BUcmFuc2xhdGlvbkFkYXB0ZXIoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGdldEluY2x1ZGVUZXN0TW9kZWxGb3JSZWFkKCk7Ci0JCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKElKU1BUcmFuc2xhdGlvbi5jbGFzcyk7Ci0JCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCi0JCXRyeSB7Ci0JCQlJSmF2YVByb2plY3QgcHJvaiA9IGFkYXB0ZXIuZ2V0SmF2YVByb2plY3QoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCBqYXZhIHByb2plY3Q6IiArIHByb2opOwotCi0JCQl0cmFuc2xhdGlvbiA9IGFkYXB0ZXIuZ2V0SlNQVHJhbnNsYXRpb24oKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCB0cmFuc2xhdGlvbjoiLCB0cmFuc2xhdGlvbik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIE1ha2VzIHN1cmUgYm90aCBiZWFucyBhcmUgdHJhbnNsYXRlZCBldmVuIHRob3VnaCB0aGV5IGFyZQotCSAqIHJpZ2h0IG5leHQgdG8gZWFjaCBvdGhlciB3aXRoIG5vIHNwYWNlLgotCSAqIAotCSAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMDMwMDQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VXNlQmVhbk5vU3BhY2UoKSB7Ci0JCUlGaWxlIGYgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoIklOQ0xVREVTX1RFU1RTL3VzZUJlYW5fdGVzdGVyLmpzcCIpKTsKLQkJRE9NTW9kZWxGb3JKU1Agc01vZGVsID0gKERPTU1vZGVsRm9ySlNQKWdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZik7Ci0JCXRyeSB7Ci0JCQlzZXR1cEFkYXB0ZXJGYWN0b3J5KHNNb2RlbCk7Ci0JCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIHNNb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJU3RyaW5nIGphdmFUZXh0ID0gdHJhbnNsYXRpb24uZ2V0SmF2YVRleHQoKTsKLQkJCWJvb2xlYW4gYmVhbjEgPSBqYXZhVGV4dC5pbmRleE9mKCJqYXZheC5zd2luZy5KQnV0dG9uIHggPSBudWxsOyIpICE9IC0xOwotCQkJYm9vbGVhbiBiZWFuMiA9IGphdmFUZXh0LmluZGV4T2YoImphdmF4LnN3aW5nLkpCdXR0b24geSA9IG51bGw7IikgIT0gLTE7Ci0JCQlhc3NlcnRUcnVlKGJlYW4xKTsKLQkJCWFzc2VydFRydWUoYmVhbjIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYoc01vZGVsICE9IG51bGwpCi0JCQkJc01vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCQotCS8qKgotCSAqIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04NjM4MgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RYTUxKU1BUcmFuc2xhdGlvblRleHQoKSB7Ci0JCUlGaWxlIGYgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoIklOQ0xVREVTX1RFU1RTL3htbC1qc3AvbW9zdC10YWdzLXhtbC1qc3AuanNwIikpOwotCQlET01Nb2RlbEZvckpTUCBzTW9kZWwgPSAoRE9NTW9kZWxGb3JKU1ApZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmKTsKLQkJdHJ5IHsKLQkJCXNldHVwQWRhcHRlckZhY3Rvcnkoc01vZGVsKTsKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgc01vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCQkKLQkJCVN0cmluZyBqYXZhVGV4dCA9IHRyYW5zbGF0aW9uLmdldEphdmFUZXh0KCk7Ci0JCQkKLQkJCS8vIG5hbWVkIGFzIC5iaW4gc28gbm8gbGluZSBjb252ZXJzaW9uIG9jY3VycyAoXG4gaXMgaW4gdXNlKQotCQkJSW5wdXRTdHJlYW0gaW4gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oInRyYW5zbGF0ZWRfeG1sX2pzcC5iaW4iKTsKLQkJCVN0cmluZyBrbm93blRyYW5zbGF0aW9uVGV4dCA9IGxvYWRDaGFycyhpbik7Ci0JCQkKLQkJCWFzc2VydEVxdWFscyhrbm93blRyYW5zbGF0aW9uVGV4dCwgamF2YVRleHQpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYoc01vZGVsICE9IG51bGwpCi0JCQkJc01vZGVsLnJlbGVhc2VGcm9tUmVhZCgpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RYTUxKU1BNYXBwaW5nKCkgewotCQlJRmlsZSBmID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKCJJTkNMVURFU19URVNUUy94bWwtanNwL21vc3QtdGFncy14bWwtanNwLmpzcCIpKTsKLQkJRE9NTW9kZWxGb3JKU1Agc01vZGVsID0gKERPTU1vZGVsRm9ySlNQKWdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoZik7Ci0JCXRyeSB7Ci0JCQlzZXR1cEFkYXB0ZXJGYWN0b3J5KHNNb2RlbCk7Ci0JCQlKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgYWRhcHRlciA9IChKU1BUcmFuc2xhdGlvbkFkYXB0ZXIpIHNNb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJCi0JCQlIYXNoTWFwIGpzcDJqYXZhID0gdHJhbnNsYXRpb24uZ2V0SnNwMkphdmFNYXAoKTsKLQkJCU9iamVjdFtdIGpzcFJhbmdlcyA9IGpzcDJqYXZhLmtleVNldCgpLnRvQXJyYXkoKTsKLQkJCVBvc2l0aW9uIGpzcFBvcyA9IG51bGw7Ci0JCQlQb3NpdGlvbiBqYXZhUG9zID0gbnVsbDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwganNwUmFuZ2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJanNwUG9zID0gKFBvc2l0aW9uKWpzcFJhbmdlc1tpXTsKLQkJCQlqYXZhUG9zID0gKFBvc2l0aW9uKWpzcDJqYXZhLmdldChqc3BQb3MpOwotCQkJCS8vU3lzdGVtLm91dC5wcmludGxuKCJqc3A6IiArIHByaW50UG9zKGpzcFBvcykgKyAiID4+IGphdmE6IiArIHByaW50UG9zKGphdmFQb3MpKTsKLQkJCQljaGVja1Bvc2l0aW9uKGpzcFBvcywgamF2YVBvcyk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZihzTW9kZWwgIT0gbnVsbCkKLQkJCQlzTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCX0KLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFhNTEpTUENEQVRBVGV4dCgpIHsKLQkJSUZpbGUgZiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aCgiSU5DTFVERVNfVEVTVFMvY2RhdGEvY2RhdGEuanNwIikpOwotCQlET01Nb2RlbEZvckpTUCBzTW9kZWwgPSAoRE9NTW9kZWxGb3JKU1ApZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmKTsKLQkJdHJ5IHsKLQkJCXNldHVwQWRhcHRlckZhY3Rvcnkoc01vZGVsKTsKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgc01vZGVsLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihJSlNQVHJhbnNsYXRpb24uY2xhc3MpOwotCQkJSlNQVHJhbnNsYXRpb24gdHJhbnNsYXRpb24gPSBhZGFwdGVyLmdldEpTUFRyYW5zbGF0aW9uKCk7Ci0JCQkKLQkJCVN0cmluZyB0cmFuc1RleHQgPSB0cmFuc2xhdGlvbi5nZXRKYXZhVGV4dCgpOwotCQkJCi0vLwkJCSBuYW1lZCBhcyAuYmluIHNvIG5vIGxpbmUgY29udmVyc2lvbiBvY2N1cnMgKFxuIGlzIGluIHVzZSkKLQkJCUlucHV0U3RyZWFtIGluID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKCJ0cmFuc2xhdGVkX3htbF9qc3BfY2RhdGEuYmluIik7Ci0JCQlTdHJpbmcga25vd25UZXh0ID0gbG9hZENoYXJzKGluKTsKLQkJCQotCQkJYXNzZXJ0RXF1YWxzKGtub3duVGV4dCwgdHJhbnNUZXh0KTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmKHNNb2RlbCAhPSBudWxsKQotCQkJCXNNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgY2hlY2tQb3NpdGlvbihQb3NpdGlvbiBqc3BQb3MsIFBvc2l0aW9uIGphdmFQb3MpIHsKLQkJCi0JCUhhc2hNYXAgZXhwZWN0ZWQgPSBnZXRYTUxKU1BQb3NpdGlvbnMoKTsKLQkJT2JqZWN0W10ga2V5cyA9ZXhwZWN0ZWQua2V5U2V0KCkudG9BcnJheSgpOwotCQlQb3NpdGlvbiBleHBlY3RlZEpzcFBvcz0gbnVsbDsKLQkJUG9zaXRpb24gZXhwZWN0ZWRKYXZhUG9zID0gbnVsbDsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKLQkJCWV4cGVjdGVkSnNwUG9zID0gKFBvc2l0aW9uKWtleXNbaV07Ci0JCQlpZihqc3BQb3MuZXF1YWxzKGV4cGVjdGVkSnNwUG9zKSkgewotCQkJCWV4cGVjdGVkSmF2YVBvcyA9IChQb3NpdGlvbilleHBlY3RlZC5nZXQoZXhwZWN0ZWRKc3BQb3MpOwotCQkJCWZvdW5kID0gdHJ1ZTsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBKU1AgcG9zaXRpb24gbWlzc2luZzogIiArIGpzcFBvcywgZm91bmQpOwotCQlhc3NlcnROb3ROdWxsKCJubyBleHBlY3RlZCBqYXZhIHBvc2l0aW9uIGZvciBqc3BQb3M6ICIgKyBwcmludFBvcyhqc3BQb3MpLCBleHBlY3RlZEphdmFQb3MpOwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgamF2YSBwb3NpdGlvbiB3YXM6IiArIHByaW50UG9zKGphdmFQb3MpICsgIiBidXQgZXhwZWN0ZWQ6IiArIHByaW50UG9zKGV4cGVjdGVkSmF2YVBvcyksIGphdmFQb3MsIGV4cGVjdGVkSmF2YVBvcyk7Ci0JfQotCXByaXZhdGUgU3RyaW5nIHByaW50UG9zKFBvc2l0aW9uIHBvcykgewotCQlyZXR1cm4gcG9zICE9IG51bGwgPyAiWyIgKyBwb3Mub2Zmc2V0ICsiOiIrIHBvcy5sZW5ndGggKyAiXSIgOiAibnVsbCI7Ci0JfQotCXByaXZhdGUgSGFzaE1hcCBnZXRYTUxKU1BQb3NpdGlvbnMoKSB7Ci0JCWlmKGZYTUxKU1BQb3NpdGlvbnMgPT0gbnVsbCkgewotCQkJZlhNTEpTUFBvc2l0aW9ucyA9IG5ldyBIYXNoTWFwKCk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oODgyLDUyKSwgbmV3IFBvc2l0aW9uKDkyMCwzMSkpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDk2MSw3KSwgbmV3IFBvc2l0aW9uKDk1Miw3KSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oMTAxOCwxNCksIG5ldyBQb3NpdGlvbig4OSwxNCkpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDY0MCwyKSwgbmV3IFBvc2l0aW9uKDg4OCwyKSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oNDA2LDI0KSwgbmV3IFBvc2l0aW9uKDc1OSwyNCkpOwotCQkJZlhNTEpTUFBvc2l0aW9ucy5wdXQobmV3IFBvc2l0aW9uKDY4NSwxOSksIG5ldyBQb3NpdGlvbig4OTcsMTkpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig2NTAsMjYpLCBuZXcgUG9zaXRpb24oODYxLDI2KSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oNTYzLDkpLCBuZXcgUG9zaXRpb24oODQ4LDkpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbig0NjEsMjMpLCBuZXcgUG9zaXRpb24oNzg0LDIzKSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oNTIyLDgpLCBuZXcgUG9zaXRpb24oODIyLDgpKTsKLQkJCWZYTUxKU1BQb3NpdGlvbnMucHV0KG5ldyBQb3NpdGlvbigzMjMsNDQpLCBuZXcgUG9zaXRpb24oMjc0LDQ1KSk7Ci0JCQlmWE1MSlNQUG9zaXRpb25zLnB1dChuZXcgUG9zaXRpb24oMjQ1LDQzKSwgbmV3IFBvc2l0aW9uKDIyOSw0NCkpOwotCQl9Ci0JCXJldHVybiBmWE1MSlNQUG9zaXRpb25zOwotCX0KLQkKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgbG9hZENoYXJzKElucHV0U3RyZWFtIGlucHV0KSB7Ci0KLQkJU3RyaW5nQnVmZmVyIHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXRyeSB7Ci0JCQlpbnQgYyA9IC0xOwotCQkJd2hpbGUgKChjID0gaW5wdXQucmVhZCgpKSA+PSAwKSB7Ci0JCQkJaWYgKGMgPiAyNTUpCi0JCQkJCWJyZWFrOwotCQkJCXMuYXBwZW5kKChjaGFyKSBjKTsKLQkJCX0KLQkJCWlucHV0LmNsb3NlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQW4gSS9PIGVycm9yIG9jY3VyZWQgd2hpbGUgbG9hZGluZyA6Iik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCX0KLQkJcmV0dXJuIHMudG9TdHJpbmcoKTsKLQl9Ci0JCi0JLyoqCi0JICogYWRkIHRoZSBmYWN0b3J5IGZvciBKU1BUcmFuc2xhdGlvbkFkYXB0ZXIgaGVyZQotCSAqIEBwYXJhbSBzbQotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cEFkYXB0ZXJGYWN0b3J5KElTdHJ1Y3R1cmVkTW9kZWwgc20pIHsKLQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IEpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkoKTsKLQkJc20uZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuYWRkRmFjdG9yeShmYWN0b3J5KTsKLQl9Ci0KLQkvKioKLQkgKiBJTVBPUlRBTlQgLSByZWxlYXNlIG1vZGVsIChtb2RlbC5yZWxlYXNlRnJvbVJlYWQoKSkgYWZ0ZXIgdXNlCi0JICogQHBhcmFtIGZpbGUKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGdldFN0cnVjdHVyZWRNb2RlbEZvclJlYWQoSUZpbGUgZmlsZSkgewotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJcmV0dXJuIG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiY291bGRuJ3Qgb3BlbiBmaWxlID4gIiArIGZpbGUpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHJpdmF0ZSBJRE9NTW9kZWwgZ2V0SW5jbHVkZVRlc3RNb2RlbEZvclJlYWQoKSB7Ci0KLQkJSVBhdGgganNwVGVzdEZpbGVQYXRoID0gbmV3IFBhdGgoIklOQ0xVREVTX1RFU1RTL2pzcF9pbmNsdWRlX3Rlc3QuanNwIik7Ci0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoanNwVGVzdEZpbGVQYXRoKTsKLQkJSURPTU1vZGVsIHhtbE1vZGVsID0gKElET01Nb2RlbCkgZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmaWxlKTsKLQkJc2V0dXBBZGFwdGVyRmFjdG9yeSh4bWxNb2RlbCk7Ci0JCXJldHVybiB4bWxNb2RlbDsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3Rlc3RmaWxlcy9qc3BJbkphdmFzY3JpcHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9jb250ZW50YXNzaXN0L3Rlc3RmaWxlcy9qc3BJbkphdmFzY3JpcHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOGM3YzAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90ZXN0ZmlsZXMvanNwSW5KYXZhc2NyaXB0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSINCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTEiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08VElUTEU+cG1yLmpzcDwvVElUTEU+DQotDQotPCUhU3RyaW5nIHRlc3RKc3BTdHJpbmcgPSAidGVzdEpzcFN0cmluZyI7ICU+DQotPHNjcmlwdD4gDQotDQotdmFyIHRlc3QgPSA8JT0gdGVzdEpzcFN0cmluZyAlPjsNCi0NCi08L3NjcmlwdD4NCi0NCi0NCi0NCi08L0hFQUQ+DQotPEJPRFk+DQotPCUgICU+DQotPFA+UGxhY2UganNwSW5KYXZhc2NyaXB0LmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF90ZXh0LmJpbiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3RleHQuYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWUxMDVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3RleHQuYmluCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotaW1wb3J0IGphdmF4LnNlcnZsZXQuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC4qOwotCi1wdWJsaWMgY2xhc3MgX18yRl9JTkNMVURFU19URVNUU18yRl9qc3BfaW5jbHVkZV90ZXN0XzJFX2pzcCBleHRlbmRzIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldHsKLSBTdHJpbmcgYXJnaCA9ICJhcmdoIjsgCi0KLSBwdWJsaWMgU3RyaW5nIGdsb2JhbEluY2x1ZGVkU3RyaW5nID0gImluY2x1ZGVkIjsKLQotIHByb3RlY3RlZCBTdHJpbmcgd2l0aF9zcGFjZSA9ICJ3aXRoc3BhY2UiOwotCi1wdWJsaWMgdm9pZCBfanNwU2VydmljZShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQotCQl0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKLWphdmF4LnNlcnZsZXQuanNwLlBhZ2VDb250ZXh0IHBhZ2VDb250ZXh0ID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQgYXBwbGljYXRpb24gPSBudWxsOwotamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnIGNvbmZpZyA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0LmpzcC5Kc3BXcml0ZXIgb3V0ID0gbnVsbDsKLU9iamVjdCBwYWdlID0gbnVsbDsKLQotdHJ5IHsKLSBTdHJpbmcgbG9jYWxJbmNsdWRlZFN0cmluZyA9IGdsb2JhbEluY2x1ZGVkU3RyaW5nOwotZm9yKGludCBpPTA7IGk8NTsgaSsrKSB7Ci1vdXQucHJpbnQoIiIrCi1pCi0pOwotfQotamF2YXguc3dpbmcuSkJ1dHRvbiBCRUFOX2luY2x1ZGVkQmVhbiA9IG5ldyBqYXZheC5zd2luZy5KQnV0dG9uKCk7Ci0gaW50IGluY2x1ZGVfaW5jbHVkZV9pbnQgPSA1OyAKLWphdmF4LnN3aW5nLkpCdXR0b24gaW5jbHVkZXNVc2VCZWFuID0gbmV3IGphdmF4LnN3aW5nLkpCdXR0b24oKTsKLW91dC5wcmludCgiIisKLSAgIAotKTsKLSB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHt9IAotfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF94bWxfanNwLmJpbiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3htbF9qc3AuYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTQ2MjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3htbF9qc3AuYmluCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotaW1wb3J0IGphdmF4LnNlcnZsZXQuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC4qOwotCi1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1wdWJsaWMgY2xhc3MgX18yRl9JTkNMVURFU19URVNUU18yRl94bWxfMkRfanNwXzJGX21vc3RfMkRfdGFnc18yRF94bWxfMkRfanNwXzJFX2pzcCBleHRlbmRzIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldHsKLXB1YmxpYyBTdHJpbmcgbXlGdW5jKCkgeyByZXR1cm4gIm15ZnVuYyI7IH0KLQotcHVibGljIFN0cmluZyBteUZ1bmMyKCkgeyByZXR1cm4gIm15ZnVuYyI7IH0KLQotcHVibGljIHZvaWQgX2pzcFNlcnZpY2UoamF2YXguc2VydmxldC5odHRwLkh0dHBTZXJ2bGV0UmVxdWVzdCByZXF1ZXN0LCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZSByZXNwb25zZSkKLQkJdGhyb3dzIGphdmEuaW8uSU9FeGNlcHRpb24sIGphdmF4LnNlcnZsZXQuU2VydmxldEV4Y2VwdGlvbiB7Ci1qYXZheC5zZXJ2bGV0LmpzcC5QYWdlQ29udGV4dCBwYWdlQ29udGV4dCA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlc3Npb24gc2Vzc2lvbiA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0LlNlcnZsZXRDb250ZXh0IGFwcGxpY2F0aW9uID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuU2VydmxldENvbmZpZyBjb25maWcgPSBudWxsOwotamF2YXguc2VydmxldC5qc3AuSnNwV3JpdGVyIG91dCA9IG51bGw7Ci1PYmplY3QgcGFnZSA9IG51bGw7Ci0KLXRyeSB7Ci1TdHJpbmcgY29uc2VjMSA9ICJ0ZXN0IjsKLVN0cmluZyBjb25zZWMyID0gInR3byI7Ci1vdXQucHJpbnQoIiIrCi1teUZ1bmMoKQotKTsKLW91dC5wcmludCgiIisKLW15RnVuYzIoKQotKTsKLWphdmF4LnN3aW5nLkFic3RyYWN0QnV0dG9uIGpiID0gbmV3IGphdmF4LnN3aW5nLkpCdXR0b24oKTsKLVN0cmluZyBpbmNsdWRlZFN0cmluZyA9ICJpbmNkIjsKLSAgIGpiLiAKLSB9IGNhdGNoIChqYXZhLmxhbmcuRXhjZXB0aW9uIGUpIHt9IAotfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRhc3Npc3QvdHJhbnNsYXRlZF94bWxfanNwX2NkYXRhLmJpbiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3htbF9qc3BfY2RhdGEuYmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDQ1YWNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGFzc2lzdC90cmFuc2xhdGVkX3htbF9qc3BfY2RhdGEuYmluCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotaW1wb3J0IGphdmF4LnNlcnZsZXQuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuKjsKLWltcG9ydCBqYXZheC5zZXJ2bGV0LmpzcC4qOwotCi1wdWJsaWMgY2xhc3MgX18yRl9JTkNMVURFU19URVNUU18yRl9jZGF0YV8yRl9jZGF0YV8yRV9qc3AgZXh0ZW5kcyBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXR7Ci1wdWJsaWMgdm9pZCBfanNwU2VydmljZShqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXF1ZXN0IHJlcXVlc3QsIGphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2VydmxldFJlc3BvbnNlIHJlc3BvbnNlKQotCQl0aHJvd3MgamF2YS5pby5JT0V4Y2VwdGlvbiwgamF2YXguc2VydmxldC5TZXJ2bGV0RXhjZXB0aW9uIHsKLWphdmF4LnNlcnZsZXQuanNwLlBhZ2VDb250ZXh0IHBhZ2VDb250ZXh0ID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuaHR0cC5IdHRwU2Vzc2lvbiBzZXNzaW9uID0gbnVsbDsKLWphdmF4LnNlcnZsZXQuU2VydmxldENvbnRleHQgYXBwbGljYXRpb24gPSBudWxsOwotamF2YXguc2VydmxldC5TZXJ2bGV0Q29uZmlnIGNvbmZpZyA9IG51bGw7Ci1qYXZheC5zZXJ2bGV0LmpzcC5Kc3BXcml0ZXIgb3V0ID0gbnVsbDsKLU9iamVjdCBwYWdlID0gbnVsbDsKLQotdHJ5IHsKLQotaW50IGEgPSAxOwotaWYgKGEgCi08Ci0gMikgewotIG91dC5wcmludGxuKCJ4Iik7Ci19IAotICAgCi1TdHJpbmcgdGVzdCA9ICIiOwotCi0KLSAgIAotaW50IGEgPSAxOwotaWYgKGEgPCAyKSB7ICAgCi0gb3V0LnByaW50bG4oIngiKTsKLX0KLQotCi0gCi0gdGVzdC50b1VwcGVyQ2FzZSgpOwotIH0gY2F0Y2ggKGphdmEubGFuZy5FeGNlcHRpb24gZSkge30gCi19fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGRlc2NyaXB0aW9uL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvY29udGVudGRlc2NyaXB0aW9uL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ0ZDFiNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2NvbnRlbnRkZXNjcmlwdGlvbi9UZXN0Q29udGVudERlc2NyaXB0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmNvbnRlbnRkZXNjcmlwdGlvbjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkZpbGVCdWZmZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUXVhbGlmaWVkTmFtZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5JQ29udGVudERlc2NyaXB0aW9uRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuZG9jdW1lbnQuVW56aXBwZWRQcm9qZWN0VGVzdGVyOwotCi0vKioKLSAqIFRlc3RzIHRoYXQgb3VyIENvbnRlbnREZXNjcmliZXJGb3JKU1AgaXMgd29ya2luZyBhcyBleHBlY3RlZCwKLSAqIFdlIGNoZWNrIHRoYXQgdGhlIGNvbnRlbnQgZGVzY3JpcHRpb24gZm9yIGEgZ2l2ZW4gaW5wdXQgc3RyZWFtIGhhcyBhbGwKLSAqIG9mIHRoZSBhcHByb3ByaWF0ZSBwcm9wZXJ0aWVzLgotICogKHRocm91Z2ggdGhlIFBsYXRmb3JtIGNvbnRlbnQgdHlwZSBmcmFtZXdvcmspCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudERlc2NyaXB0aW9uIGV4dGVuZHMgVW56aXBwZWRQcm9qZWN0VGVzdGVyIHsKLQotCXB1YmxpYyB2b2lkIHRlc3ROb1hNTFBJV2l0aEpTUFN5bnRheCgpIHsKLQkJSGFzaE1hcCBleHBlY3RlZFByb3BlcnRpZXMgPSBuZXcgSGFzaE1hcCgpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb25Gb3JKU1AuQ09OVEVOVF9UWVBFX0FUVFJJQlVURSwgInRleHQveG1sIik7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbi5DSEFSU0VULCAiVVRGLTgiKTsKLQkJZG9UZXN0Q29udGVudERlc2NyaXB0aW9uKCIvY29udGVudC1kZXNjcmlwdGlvbi9QdXJjaGFzZU9yZGVyLW5vLVhNTFBJLWpzcC1zeW50YXguanNwIiwgZXhwZWN0ZWRQcm9wZXJ0aWVzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFdpdGhYTUxQSVdpdGhKU1BTeW50YXgoKSB7Ci0JCUhhc2hNYXAgZXhwZWN0ZWRQcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAoKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uRm9ySlNQLkNPTlRFTlRfVFlQRV9BVFRSSUJVVEUsICJ0ZXh0L3htbCIpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb24uQ0hBUlNFVCwgIlVURi04Iik7Ci0JCWRvVGVzdENvbnRlbnREZXNjcmlwdGlvbigiL2NvbnRlbnQtZGVzY3JpcHRpb24vUHVyY2hhc2VPcmRlci13aXRoLVhNTFBJLWpzcC1zeW50YXguanNwIiwgZXhwZWN0ZWRQcm9wZXJ0aWVzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFdpdGhYTUxQSVdpdGhYTUxTeW50YXgoKSB7Ci0JCUhhc2hNYXAgZXhwZWN0ZWRQcm9wZXJ0aWVzID0gbmV3IEhhc2hNYXAoKTsKLQkJZXhwZWN0ZWRQcm9wZXJ0aWVzLnB1dChJQ29udGVudERlc2NyaXB0aW9uRm9ySlNQLkNPTlRFTlRfVFlQRV9BVFRSSUJVVEUsICJ0ZXh0L3htbCIpOwotCQlleHBlY3RlZFByb3BlcnRpZXMucHV0KElDb250ZW50RGVzY3JpcHRpb24uQ0hBUlNFVCwgIlVURi04Iik7Ci0JCWRvVGVzdENvbnRlbnREZXNjcmlwdGlvbigiL2NvbnRlbnQtZGVzY3JpcHRpb24vUHVyY2hhc2VPcmRlci13aXRoLVhNTFBJLXhtbC1zeW50YXguanNwIiwgZXhwZWN0ZWRQcm9wZXJ0aWVzKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEpTUFdpdGhIVE1MT3V0cHV0KCkgewotCQlIYXNoTWFwIGV4cGVjdGVkUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFLCAidGV4dC9odG1sIik7Ci0JCWRvVGVzdENvbnRlbnREZXNjcmlwdGlvbigiL2NvbnRlbnQtZGVzY3JpcHRpb24vaHRtbC5qc3AiLCBleHBlY3RlZFByb3BlcnRpZXMpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SlNQV2l0aFhIVE1MT3V0cHV0KCkgewotCQlIYXNoTWFwIGV4cGVjdGVkUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFLCAidGV4dC94aHRtbCIpOwotCQlkb1Rlc3RDb250ZW50RGVzY3JpcHRpb24oIi9jb250ZW50LWRlc2NyaXB0aW9uL3hodG1sLmpzcCIsIGV4cGVjdGVkUHJvcGVydGllcyk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RKU1BXaXRoWE1MT3V0cHV0KCkgewotCQlIYXNoTWFwIGV4cGVjdGVkUHJvcGVydGllcyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWV4cGVjdGVkUHJvcGVydGllcy5wdXQoSUNvbnRlbnREZXNjcmlwdGlvbkZvckpTUC5DT05URU5UX1RZUEVfQVRUUklCVVRFLCAidGV4dC94bWwiKTsKLQkJZG9UZXN0Q29udGVudERlc2NyaXB0aW9uKCIvY29udGVudC1kZXNjcmlwdGlvbi94bWwuanNwIiwgZXhwZWN0ZWRQcm9wZXJ0aWVzKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdENvbnRlbnREZXNjcmlwdGlvbihTdHJpbmcgZmlsZVBhdGgsIEhhc2hNYXAgZXhwZWN0ZWRQcm9wZXJ0aWVzKSB7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gZGVzYyA9IGdldENvbnRlbnREZXNjcmlwdGlvbihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCBJQ29udGVudERlc2NyaXB0aW9uIGZvciBmaWxlOlsiICsgZmlsZVBhdGggKyAiXSIsIGRlc2MpOwotCQlPYmplY3RbXSBrZXlzID0gZXhwZWN0ZWRQcm9wZXJ0aWVzLmtleVNldCgpLnRvQXJyYXkoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7Ci0JCQkKLQkJCU9iamVjdCBleHBlY3RlZCA9IGV4cGVjdGVkUHJvcGVydGllcy5nZXQoa2V5c1tpXSk7Ci0JCQlPYmplY3QgZGV0ZWN0ZWQgPSBkZXNjLmdldFByb3BlcnR5KCAoUXVhbGlmaWVkTmFtZSlrZXlzW2ldICk7Ci0JCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgcHJvcGVydHkgdmFsdWUiLCBleHBlY3RlZCwgZGV0ZWN0ZWQpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgSUNvbnRlbnREZXNjcmlwdGlvbiBnZXRDb250ZW50RGVzY3JpcHRpb24oU3RyaW5nIGZpbGVQYXRoKSB7Ci0JCWlmKGZpbGVQYXRoID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkKLQkJSW5wdXRTdHJlYW0gaW4gPSBudWxsOwotCQl0cnkgewotCQkJLy8gd29ya3NwYWNlIGZpbGUKLQkJCUlGaWxlIHdzRmlsZSA9IEZpbGVCdWZmZXJzLmdldFdvcmtzcGFjZUZpbGVBdExvY2F0aW9uKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCQlpZih3c0ZpbGUgIT0gbnVsbCAmJiB3c0ZpbGUuZXhpc3RzKCkpIHsKLQkJCQlpbiA9IHdzRmlsZS5nZXRDb250ZW50cygpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gZXh0ZXJuYWwgZmlsZQotCQkJCUZpbGUgc0ZpbGUgPSBGaWxlQnVmZmVycy5nZXRTeXN0ZW1GaWxlQXRMb2NhdGlvbihuZXcgUGF0aChmaWxlUGF0aCkpOwotCQkJCWlmKHNGaWxlICE9bnVsbCAmJiBzRmlsZS5leGlzdHMoKSkKLQkJCQkJaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKHNGaWxlKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQkKLQkJYXNzZXJ0Tm90TnVsbChpbik7Ci0JCQotCQlyZXR1cm4gZ2V0Q29udGVudERlc2NyaXB0aW9uKGluKTsKLQl9Ci0JCi0JLyoqCi0JICogUmV0dXJucyBjb250ZW50IGRlc2NyaXB0aW9uIGZvciBhbiBpbnB1dCBzdHJlYW0KLQkgKiBBc3N1bWVzIGl0J3MgSlNQIGNvbnRlbnQuCi0JICogQ2xvc2VzIHRoZSBpbnB1dCBzdHJlYW0gd2hlbiBmaW5pc2hlZC4KLQkgKiAKLQkgKiBAcGFyYW0gaW4KLQkgKiBAcmV0dXJuIHRoZSBJQ29udGVudERlc2NyaXB0aW9uIGZvciBpbgotCSAqLwotCXByaXZhdGUgSUNvbnRlbnREZXNjcmlwdGlvbiBnZXRDb250ZW50RGVzY3JpcHRpb24oSW5wdXRTdHJlYW0gaW4pIHsKLQkJCi0JCWlmKGluID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJCi0JCUlDb250ZW50RGVzY3JpcHRpb24gZGVzYyA9IG51bGw7Ci0JCXRyeSB7Ci0JCQkKLQkJCUlDb250ZW50VHlwZSBjb250ZW50VHlwZUpTUCA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmdldENvbnRlbnRUeXBlKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQkJZGVzYyA9IGNvbnRlbnRUeXBlSlNQLmdldERlc2NyaXB0aW9uRm9yKGluLCBJQ29udGVudERlc2NyaXB0aW9uLkFMTCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZihpbiAhPSBudWxsKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJaW4uY2xvc2UoKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGRlc2M7Ci0JfQotCQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZG9jdW1lbnQvRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2RvY3VtZW50L0ZpbGVCdWZmZXJEb2N1bWVudFRlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTJhN2M2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZG9jdW1lbnQvRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuRmlsZUJ1ZmZlcnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5JVGV4dEZpbGVCdWZmZXJNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwudGV4dC5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLlV0aWxpdGllczsKLQotCi1wdWJsaWMgY2xhc3MgRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyIGV4dGVuZHMgVW56aXBwZWRQcm9qZWN0VGVzdGVyIHsKLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RDcmVhdGUoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIlRlc3QgQ2FzZSBpbiBlcnJvci4gQ291bGQgbm90IGZpbmQgZmlsZSAiICsgZmlsZVBhdGgsIGZpbGUpOwotCQlJUGF0aCBsb2NhdGlvblBhdGggPSBmaWxlLmdldExvY2F0aW9uKCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlidWZmZXJNYW5hZ2VyLmNvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQkJSVRleHRGaWxlQnVmZmVyIGJ1ZmZlciA9IGJ1ZmZlck1hbmFnZXIuZ2V0VGV4dEZpbGVCdWZmZXIobG9jYXRpb25QYXRoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gYnVmZmVyLmdldERvY3VtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCUlEb2N1bWVudFBhcnRpdGlvbmVyIHNldHVwUGFydGl0aW9uZXIgPSBudWxsOwotCQlpZiAoVXRpbGl0aWVzLmNvbnRhaW5zKGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5nZXRJbnRlcmZhY2VzKCksIElEb2N1bWVudEV4dGVuc2lvbjMuY2xhc3MpKSB7Ci0JCQlzZXR1cFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJfQotCQllbHNlIHsKLQkJCXNldHVwUGFydGl0aW9uZXIgPSBkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShzZXR1cFBhcnRpdGlvbmVyKSk7Ci0JCWJ1ZmZlck1hbmFnZXIuZGlzY29ubmVjdChsb2NhdGlvblBhdGgsIG51bGwpOwotCi0vLwkJZG9UZXN0Q3JlYXRlV2l0aEZhY2FkZShmaWxlLCBleHBlY3RlZERvY3VtZW50Q2xhc3MsIGV4cGVjdGVkUGFydGlvbmVyKTsKLQkJIAotCX0KLQotCi0KLS8qCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkNC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGVDcmVhdGVFbXB0eSgidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVDYXNlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcyIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yQ1NTLmNsYXNzKTsKLQl9Ci0KLSovCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFWYWxpZFN0dWZmLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVBdEZpcnN0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtQi5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyNDI5My90ZXN0c2hpZnRqaXNYbWxTeW50YXguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9FbmNvZGluZ2luWE1MRGVjbC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2RvY3VtZW50L1VuemlwcGVkUHJvamVjdFRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9kb2N1bWVudC9VbnppcHBlZFByb2plY3RUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDhmMWZkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL2RvY3VtZW50L1VuemlwcGVkUHJvamVjdFRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5KU1BVSVRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBVbnppcHBlZFByb2plY3RUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZUZXN0UHJvamVjdEluaXRpYWxpemVkOwotCXByaXZhdGUgc3RhdGljIGludCBuU2V0dXBzID0gMDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QUk9KRUNUX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLm5ld3Rlc3RzIjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCW5TZXR1cHMrKzsKLQkJaWYgKCFmVGVzdFByb2plY3RJbml0aWFsaXplZCkgewotCQkJZ2V0QW5kQ3JlYXRlUHJvamVjdCgpOwotCQkJLy8gdW56aXAgZmlsZXMgdG8gdGhlIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQkJU3RyaW5nIGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyA9IGZUZXN0UHJvamVjdC5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLQkJCVN0cmluZyBkZXN0aW5hdGlvbkZvbGRlciA9IGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyArICIvIjsKLQkJCS8vIHRoaXMgemlwIGZpbGUgaXMgc2l0dGluZyBpbiB0aGUgInJvb3QiIG9mIHRlc3QgcGx1Z2luCi0JCQlGaWxlIHppcEZpbGUgPSBKU1BVSVRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKCJ0ZXN0ZmlsZXMuemlwIik7Ci0JCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCXByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIGRlc3RpbmF0aW9uRm9sZGVyKTsKLQkJCXByb2pVdGlsLmluaXRKYXZhUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQlmVGVzdFByb2plY3RJbml0aWFsaXplZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQluU2V0dXBzLS07Ci0JCWlmIChuU2V0dXBzID09IDApIHsKLQkJCWlmICghREVCVUcpIHsKLQkJCQkvLwkJCQlEaXNwbGF5IGRpc3BsYXkgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKLQkJCQkvLwkJCQlkaXNwbGF5LmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0JCQkJLy8JCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkvLwkJCQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJCS8vCQkJCQkJSVByb2plY3QgcHJvaiA9IGZUZXN0UHJvamVjdDsKLQkJCQkvLwkJCQkJCWZUZXN0UHJvamVjdCA9IG51bGw7Ci0JCQkJLy8JCQkJCQl0cnkgewotCQkJCS8vCQkJCQkJCXByb2pVdGlsLmRlbGV0ZVByb2plY3QocHJvaik7Ci0JCQkJLy8JCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCS8vCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJLy8JCQkJCQl9Ci0JCQkJLy8JCQkJCX0KLQkJCQkvLwkJCQl9KTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy9UZXN0c1BsdWdpbiB0ZXN0c1BsdWdpbiA9IChUZXN0c1BsdWdpbikKLQkJLy8gUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcudGVzdHMiKTsKLQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBnZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCWZUZXN0UHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCS8vIHRoaXMgZm9ybSBjcmVhdGVzIHByb2plY3QgYXMgImxpbmtlZCIgYmFjayB0byAnZmlsZVJvb3QnCi0JCS8vY3JlYXRlUHJvamVjdCh0ZXN0UHJvamVjdCwgbmV3IFBhdGgoZmlsZVJvb3QpLCBudWxsKTsKLQkJY3JlYXRlUHJvamVjdChmVGVzdFByb2plY3QsIG51bGwsIG51bGwpOwotCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoZlRlc3RQcm9qZWN0LmV4aXN0cygpKTsKLQkJLy8JCUlDb250YWluZXIgZG90ZXN0RmlsZXMgPSB0ZXN0UHJvamVjdC5nZXRGb2xkZXIoImRvdGVzdEZpbGVzIik7Ci0JCS8vCQlhc3NlcnRUcnVlKGRvdGVzdEZpbGVzLmV4aXN0cygpKTsKLQkJLy8JCUlSZXNvdXJjZVtdIGFsbEZvbGRlcnMgPSBkb3Rlc3RGaWxlcy5tZW1iZXJzKCk7Ci0JCS8vCQlhc3NlcnROb3ROdWxsKGFsbEZvbGRlcnMpOwotCX0KLSAKLQlwcml2YXRlIHN0YXRpYyB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCX0KLQkJbW9uaXRvci5iZWdpblRhc2soImNyZWF0aW5nIHRlc3QgcHJvamVjdCIsIDEwKTsKLQkJLy8gY3JlYXRlIHRoZSBwcm9qZWN0Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qZWN0LmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJaWYgKFBsYXRmb3JtLmdldExvY2F0aW9uKCkuZXF1YWxzKGxvY2F0aW9uUGF0aCkpIHsKLQkJCQkJbG9jYXRpb25QYXRoID0gbnVsbDsKLQkJCQl9Ci0JCQkJZGVzYy5zZXRMb2NhdGlvbihsb2NhdGlvblBhdGgpOwotCQkJCXByb2plY3QuY3JlYXRlKGRlc2MsIG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQkJaWYgKCFwcm9qZWN0LmlzT3BlbigpKSB7Ci0JCQkJcHJvamVjdC5vcGVuKG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vbml0b3IgIT0gbnVsbCkgewotCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgd29ya3NwYWNlIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9leGFtcGxlcy9DcmVhdGluZ0pTUEV4cHJlc3Npb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvZXhhbXBsZXMvQ3JlYXRpbmdKU1BFeHByZXNzaW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzNDhhOGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9leGFtcGxlcy9DcmVhdGluZ0pTUEV4cHJlc3Npb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5leGFtcGxlczsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0Lk5vZGVGb3JtYXR0ZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgQ3JlYXRpbmdKU1BFeHByZXNzaW9uIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIENyZWF0aW5nSlNQRXhwcmVzc2lvbigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBDcmVhdGluZ0pTUEV4cHJlc3Npb24oU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZUpTUEV4cHJlc3Npb24oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiBsYW5ndWFnZT1cImphdmFcIiAlPiIpOwotCi0JCURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQotCQlFbGVtZW50IGpzcGV4cHJlc3Npb24gPSBkb2MuY3JlYXRlRWxlbWVudCgianNwOmV4cHJlc3Npb24iKTsKLQkJKChJRE9NRWxlbWVudCkganNwZXhwcmVzc2lvbikuc2V0SlNQVGFnKHRydWUpOwotCQlkb2MuYXBwZW5kQ2hpbGQoanNwZXhwcmVzc2lvbik7Ci0JCVRleHQgamF2YWNvZGUgPSBkb2MuY3JlYXRlVGV4dE5vZGUoIiAvLyBzb21lIGphdmEgY29kZSBoZXJlOyBpZiAoeCA8MCkgcmV0dXJuIG5ldyBTdHJpbmcoXCIwXCIpIGVsc2UgcmV0dXJuIG5ldyBTdHJpbmcgKFwiMVwiKTsgIik7Ci0JCWpzcGV4cHJlc3Npb24uYXBwZW5kQ2hpbGQoamF2YWNvZGUpOwotCi0KLQkJVGV4dCBjZGF0YXNlY3Rpb24gPSBkb2MuY3JlYXRlQ0RBVEFTZWN0aW9uKCIgLy8gc29tZSBjZGF0YSBqYXZhIGNvZGUgaGVyZTsgaWYgKHggPDApIHJldHVybiBuZXcgU3RyaW5nKFwiMFwiKSBlbHNlIHJldHVybiBuZXcgU3RyaW5nIChcIjFcIik7ICIpOwotCQlkb2MuYXBwZW5kQ2hpbGQoY2RhdGFzZWN0aW9uKTsKLQotCQkvLyBmb3JtYXQncyBub3QgbmVlZGVkLCBqdXN0IHByZXR0aWVyIC4uLiBub3Qgc3VyZSB3aHkgCi0JCS8vIGl0IHdvbid0IHdvcmsgcmlnaHQgb24gd2hvbGUgZG9jdW1lbnQuCi0JCW5ldyBOb2RlRm9ybWF0dGVyKCkuZm9ybWF0KGpzcGV4cHJlc3Npb24pOwotCQluZXcgTm9kZUZvcm1hdHRlcigpLmZvcm1hdChjZGF0YXNlY3Rpb24pOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImRvY3VtZW50IHRleHQ6ICIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4obW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuZ2V0KCkpOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxzRnJvbUZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlOWU0ZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxzRnJvbUZpbGVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb24zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnRleHQuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLmRvY3VtZW50LlVuemlwcGVkUHJvamVjdFRlc3RlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnRleHQuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV4Y2VwdGlvbnMuUmVzb3VyY2VBbHJlYWR5RXhpc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlSW5Vc2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5VdGlsaXRpZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5zc2Vtb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUw7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RNb2RlbHNGcm9tRmlsZXMgZXh0ZW5kcyBVbnppcHBlZFByb2plY3RUZXN0ZXIgewotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3Rub25leGlzdGVudC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50WE1MRG9jdW1lbnQoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdE5vbkV4aXN0ZW50RG9jdW1lbnQoInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRYTUxNb2RlbCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlTW9kZWxXaXRoTm9uRXhpc3RJRmlsZSgidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudEpTUCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3Rub25leGlzdGVudC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vbkV4aXN0ZW50SlNQRG9jdW1lbnQoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdE5vbkV4aXN0ZW50RG9jdW1lbnQoInRlc3RmaWxlcy9qc3AvdGVzdG5vbmV4aXN0ZW50LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRKU1BNb2RlbCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlTW9kZWxXaXRoTm9uRXhpc3RJRmlsZSgidGVzdGZpbGVzL2pzcC90ZXN0bm9uZXhpc3RlbnQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVDYXNlKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3ROb3RFbXB0eSgidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZURvY3VtZW50Q2FzZVhNTCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Tm90RW1wdHlEb2N1bWVudCgidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZURvY3VtZW50Q2FzZUpTUCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Tm90RW1wdHlEb2N1bWVudCgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcGxleENhc2UoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdE5vdEVtcHR5KCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZWxvYWQoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdFJlbG9hZCgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQV2l0aFhNTE91dHB1dCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0UmVsb2FkKCJ0ZXN0ZmlsZXMvanNwL2pzcC14bWwtb3V0cHV0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUxUcmFuc2l0aW9uYWwxKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94aHRtbC90ZXN0eC5odG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JIVE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUxUcmFuc2l0aW9uYWwyKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94aHRtbC90ZXN0eC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MVHJhbnNpdGlvbmFsMygpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveGh0bWwvdGVzdHgueGh0bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckhUTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MVHJhbnNpdGlvbmFsMSgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvaHRtbC90ZXN0aC5odG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JIVE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTFRyYW5zaXRpb25hbDIoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2h0bWwvdGVzdGguanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCS8qCi0JICogVE9ETzogdGhlc2UgdGVzdCBmaWxlcyBhcmUgbWlzc2luZywgZm9yIHNvbWUgcmVhc29uIHdoZW4gcnVubmluZyBvbgotCSAqIGJ1aWxkIG1hY2hpbmUgLi4uIG5lZWQgdG8gcmUtY29uc3RydWN0IHB1YmxpYyB2b2lkIHRlc3ROZWFyRW1wdHlKU1AoKQotCSAqIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkgKiBkb1Rlc3ROb3RFbXB0eSgidGVzdGZpbGVzL2pzcC9uZWFyRW1wdHkuanNwIiwKLQkgKiBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7IH0KLQkgKiAKLQkgKiBwdWJsaWMgdm9pZCB0ZXN0TmVhckVtcHR5WE1MKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywKLQkgKiBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JICogZG9UZXN0Tm90RW1wdHkoInRlc3RmaWxlcy94bWwvbmVhckVtcHR5LnhtbCIsCi0JICogQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOyB9Ci0JICogCi0JICogcHVibGljIHZvaWQgdGVzdE5lYXJFbXB0eUhUTUwoKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLAotCSAqIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkgKiBkb1Rlc3ROb3RFbXB0eSgidGVzdGZpbGVzL2h0bWwvbmVhckVtcHR5Lmh0bWwiLAotCSAqIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySFRNTC5jbGFzcyk7IH0KLQkgKi8KLQlwcml2YXRlIHZvaWQgZG9UZXN0Tm90RW1wdHkoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjb250ZW50cyA9IGRvVGVzdENyZWF0ZShmaWxlUGF0aCwgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBleHBlY3RlZFBhcnRpb25lcik7Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnRzIHdlcmUgbnVsbCIsIGNvbnRlbnRzKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudHMgd2VyZSBlbXB0eSIsIGNvbnRlbnRzLmxlbmd0aCgpID4gMCk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICogQHBhcmFtIGNsYXNzMQotCSAqIEBwYXJhbSBjbGFzczIKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBSZXNvdXJjZUluVXNlCi0JICogQHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMKLQkgKi8KLQlwcml2YXRlIHZvaWQgZG9UZXN0Tm90RW1wdHlEb2N1bWVudChTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoZmlsZSk7Ci0JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCUlEb2N1bWVudFBhcnRpdGlvbmVyIHNldHVwUGFydGl0aW9uZXIgPSBudWxsOwotCQlpZiAoVXRpbGl0aWVzLmNvbnRhaW5zKGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5nZXRJbnRlcmZhY2VzKCksIElEb2N1bWVudEV4dGVuc2lvbjMuY2xhc3MpKSB7Ci0JCQlzZXR1cFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJfQotCQllbHNlIHsKLQkJCXNldHVwUGFydGl0aW9uZXIgPSBkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShzZXR1cFBhcnRpdGlvbmVyKSk7Ci0JCWNvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnRzIHdlcmUgbnVsbCIsIGNvbnRlbnRzKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudHMgd2VyZSBlbXB0eSIsIGNvbnRlbnRzLmxlbmd0aCgpID4gMCk7Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Tm9uRXhpc3RlbnREb2N1bWVudChTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQkJYm9vbGVhbiBleHBlY3RlZEV4Y2VwdGlvbkNhdWdodCA9IGZhbHNlOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJZmlsZSA9IGZUZXN0UHJvamVjdC5nZXRGaWxlKGZpbGVQYXRoKTsKLQkJfQotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihmaWxlKTsKLQkJfQotCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCWV4cGVjdGVkRXhjZXB0aW9uQ2F1Z2h0ID0gdHJ1ZTsKLQkJfQotCi0JCWlmIChleHBlY3RlZEV4Y2VwdGlvbkNhdWdodCkgewotCQkJZG9jdW1lbnQgPSBtb2RlbE1hbmFnZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50Rm9yKGZpbGUpOwotCQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBzZXR1cFBhcnRpdGlvbmVyID0gbnVsbDsKLQkJCWlmIChVdGlsaXRpZXMuY29udGFpbnMoZXhwZWN0ZWREb2N1bWVudENsYXNzLmdldEludGVyZmFjZXMoKSwgSURvY3VtZW50RXh0ZW5zaW9uMy5jbGFzcykpIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNldHVwUGFydGl0aW9uZXIgPSBkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCk7Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCBleHBlY3RlZFBhcnRpb25lci5pc0luc3RhbmNlKHNldHVwUGFydGl0aW9uZXIpKTsKLQkJCWNvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb250ZW50cyB3ZXJlIG51bGwiLCBjb250ZW50cyk7Ci0JCQlhc3NlcnRUcnVlKCJjb250ZW50cyB3ZXJlICpub3QqIGVtcHR5IGFzIGV4cGVjdGVkIiwgY29udGVudHMubGVuZ3RoKCkgPT0gMCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlhc3NlcnRUcnVlKCJGaWxlTm90Rm91bmQgZXhjZXB0aW9uIHdhcyAqbm90KiB0aHJvd24gYXMgZXhwZWN0ZWQiLCBmYWxzZSk7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBzdHJpbmcKLQkgKiBAcGFyYW0gY2xhc3MxCi0JICogQHBhcmFtIGNsYXNzMgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIFJlc291cmNlSW5Vc2UKLQkgKiBAdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cwotCSAqLwotCXByaXZhdGUgdm9pZCBkb1Rlc3RSZWxvYWQoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KGZpbGUsIHRydWUpOwotCQl0cnkgewotCQkJYXNzZXJ0Tm90TnVsbChtb2RlbCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZXhwZWN0ZWREb2N1bWVudENsYXNzLmlzSW5zdGFuY2UoZG9jdW1lbnQpKTsKLQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHNldHVwUGFydGl0aW9uZXIgPSBudWxsOwotCQkJaWYgKFV0aWxpdGllcy5jb250YWlucyhleHBlY3RlZERvY3VtZW50Q2xhc3MuZ2V0SW50ZXJmYWNlcygpLCBJRG9jdW1lbnRFeHRlbnNpb24zLmNsYXNzKSkgewotCQkJCXNldHVwUGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpIGRvY3VtZW50KS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc2V0dXBQYXJ0aXRpb25lciA9IGRvY3VtZW50LmdldERvY3VtZW50UGFydGl0aW9uZXIoKTsKLQkJCX0KLQkJCWFzc2VydFRydWUoIndyb25nIHBhcnRpdGlvbmVyIGluIGRvY3VtZW50LiIsIGV4cGVjdGVkUGFydGlvbmVyLmlzSW5zdGFuY2Uoc2V0dXBQYXJ0aXRpb25lcikpOwotCi0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IG51bGw7Ci0JCQl0cnkgewotCQkJCWluU3RyZWFtID0gZmlsZS5nZXRDb250ZW50cygpOwotCQkJCW1vZGVsLnJlbG9hZChpblN0cmVhbSk7Ci0JCQkJYXNzZXJ0Tm90TnVsbChtb2RlbCk7Ci0JCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudFJlbG9hZGVkID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkJLy8gbm90ZTogTk9UIHNhbWUgaW5zdGFuY2Ugb2YgZG9jdW1lbnQKLQkJCQkvLyBGSVhNRTogdGhpcyB0ZXN0IGhhcyB0byBiZSBjaGFuZ2VkIGJhY2ssIG9uY2UgdGhlIHJlbG9hZAotCQkJCS8vIEFQSSBpcwotCQkJCS8vIGZpeGVkIHRvIHdvcmsgd2l0aCBkaWZmZXJlbnQgZG9jdW1lbnQuCi0JCQkJLy8gYXNzZXJ0RmFsc2UoZG9jdW1lbnQgPT0gZG9jdW1lbnRSZWxvYWRlZCk7Ci0JCQkJYXNzZXJ0VHJ1ZShkb2N1bWVudCA9PSBkb2N1bWVudFJlbG9hZGVkKTsKLQkJCX0KLQkJCWZpbmFsbHkgewotCQkJCWlmIChpblN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJCWluU3RyZWFtLmNsb3NlKCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICogQHBhcmFtIGNsYXNzMQotCSAqIEBwYXJhbSBjbGFzczIKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBSZXNvdXJjZUluVXNlCi0JICogQHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBkb1Rlc3RDcmVhdGUoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQkvLyBmaWxlIHdpbGwgYmUgbnVsbCBpZiB0aGUgcmVzb3VyY2UgZG9lcyBub3QgZXhpc3QKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJZmlsZSA9IGZUZXN0UHJvamVjdC5nZXRGaWxlKGZpbGVQYXRoKTsKLQkJfQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE5ld01vZGVsRm9yRWRpdChmaWxlLCB0cnVlKTsKLQkJdHJ5IHsKLQkJCWFzc2VydE5vdE51bGwobW9kZWwpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCQljb250ZW50cyA9IGRvY3VtZW50LmdldCgpOwotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgY2xhc3Mgb2YgZG9jdW1lbnQiLCBleHBlY3RlZERvY3VtZW50Q2xhc3MuaXNJbnN0YW5jZShkb2N1bWVudCkpOwotCQkJSURvY3VtZW50UGFydGl0aW9uZXIgc2V0dXBQYXJ0aXRpb25lciA9IG51bGw7Ci0JCQlpZiAoVXRpbGl0aWVzLmNvbnRhaW5zKGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5nZXRJbnRlcmZhY2VzKCksIElEb2N1bWVudEV4dGVuc2lvbjMuY2xhc3MpKSB7Ci0JCQkJc2V0dXBQYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMykgZG9jdW1lbnQpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gZG9jdW1lbnQuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcigpOwotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShzZXR1cFBhcnRpdGlvbmVyKSk7Ci0KLQkJCXRlc3RDbG9uZShtb2RlbCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JCXJldHVybiBjb250ZW50czsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGVzdENsb25lKElTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJRE9NRG9jdW1lbnQgZG9jdW1lbnQgPSAoKElET01Nb2RlbCkgc3RydWN0dXJlZE1vZGVsKS5nZXREb2N1bWVudCgpOwotCQlJTm9kZU5vdGlmaWVyIG5vdGlmaWVyID0gZG9jdW1lbnQ7Ci0JCU1vZGVsUXVlcnlBZGFwdGVyIG1vZGVsUXVlcnlBZGFwdGVyID0gKE1vZGVsUXVlcnlBZGFwdGVyKSBub3RpZmllci5nZXRBZGFwdGVyRm9yKE1vZGVsUXVlcnlBZGFwdGVyLmNsYXNzKTsKLQkJYXNzZXJ0Tm90TnVsbCgiaW5pdGlhbCBtb2RlbFF1ZXJ5QWRhcHRlciBzaG91bGQgbm90IGJlIG51bGwiLCBtb2RlbFF1ZXJ5QWRhcHRlcik7Ci0JCQotCQlJU3RydWN0dXJlZE1vZGVsIG5ld01vZGVsID0gc3RydWN0dXJlZE1vZGVsLm5ld0luc3RhbmNlKCk7Ci0JCUlET01Eb2N1bWVudCBuZXdEb2N1bWVudCA9ICgoSURPTU1vZGVsKSBuZXdNb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJSU5vZGVOb3RpZmllciBuZXdOb3RpZmllciA9IG5ld0RvY3VtZW50OwotCQlNb2RlbFF1ZXJ5QWRhcHRlciByZXN1bHQgPSAoTW9kZWxRdWVyeUFkYXB0ZXIpIG5ld05vdGlmaWVyLmdldEFkYXB0ZXJGb3IoTW9kZWxRdWVyeUFkYXB0ZXIuY2xhc3MpOwotCQlhc3NlcnROb3ROdWxsKCJuZXdJbnN0YW5jZSBtb2RlbFF1ZXJ5QWRhcHRlciBzaG91bGQgbm90IGJlIG51bGwiLCByZXN1bHQpOwotCi0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gc3RyaW5nCi0JICogQHBhcmFtIGNsYXNzMQotCSAqIEBwYXJhbSBjbGFzczIKLQkgKiBAdGhyb3dzIENvcmVFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBSZXNvdXJjZUluVXNlCi0JICogQHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMKLQkgKi8KLQlwcml2YXRlIFN0cmluZyBkb1Rlc3RDcmVhdGVNb2RlbFdpdGhOb25FeGlzdElGaWxlKFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJLy8gZmlsZSB3aWxsIGJlIG51bGwgaWYgdGhlIHJlc291cmNlIGRvZXMgbm90IGV4aXN0Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXROZXdNb2RlbEZvckVkaXQoZmlsZSwgZmFsc2UpOwotCQl0cnkgewotCQkJYXNzZXJ0Tm90TnVsbChtb2RlbCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlhc3NlcnROb3ROdWxsKGRvY3VtZW50KTsKLQkJCWNvbnRlbnRzID0gZG9jdW1lbnQuZ2V0KCk7Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBzZXR1cFBhcnRpdGlvbmVyID0gbnVsbDsKLQkJCWlmIChVdGlsaXRpZXMuY29udGFpbnMoZXhwZWN0ZWREb2N1bWVudENsYXNzLmdldEludGVyZmFjZXMoKSwgSURvY3VtZW50RXh0ZW5zaW9uMy5jbGFzcykpIHsKLQkJCQlzZXR1cFBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXNldHVwUGFydGl0aW9uZXIgPSBkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCk7Ci0JCQl9Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBwYXJ0aXRpb25lciBpbiBkb2N1bWVudC4iLCBleHBlY3RlZFBhcnRpb25lci5pc0luc3RhbmNlKHNldHVwUGFydGl0aW9uZXIpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JCXJldHVybiBjb250ZW50czsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL21vZGVscXVlcnkvTW9kZWxRdWVyeVRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9tb2RlbHF1ZXJ5L01vZGVsUXVlcnlUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFhYWQ4NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL21vZGVscXVlcnkvTW9kZWxRdWVyeVRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5tb2RlbHF1ZXJ5OwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5WZWN0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLWltcG9ydCBqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5KU1BVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLkpTUFVJVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5IVE1MNDBOYW1lc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNQ29udGVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRGF0YVR5cGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTm9kZUxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5LkNNRG9jdW1lbnRNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwubW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIE1vZGVsUXVlcnlUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGZpbmFsIGJvb2xlYW4gdGVzdFNoaXBwZWREVERMb29rdXAgPSBmYWxzZTsKLQotCS8vIE91ciBTdHJ1Y3R1cmVkIE1vZGVsLCB3aGljaCBzaG91bGQgYWx3YXlzIGJlIGFuIFhNTE1vZGVsIChvciBzdWJjbGFzcykKLQlwcm90ZWN0ZWQgSURPTU1vZGVsIGZNb2RlbCA9IG51bGw7Ci0KLQlwcm90ZWN0ZWQgTW9kZWxRdWVyeSBmTW9kZWxRdWVyeSA9IG51bGw7Ci0KLQlwdWJsaWMgTW9kZWxRdWVyeVRlc3RlcihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKE1vZGVsUXVlcnlUZXN0ZXIuY2xhc3MpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCWlmIChhcmdzID09IG51bGwgfHwgYXJncy5sZW5ndGggPT0gMCkgewotCQkJcnVuQWxsKCk7Ci0JCX0KLQkJZWxzZSBpZiAoYXJncy5sZW5ndGggPT0gMSkgewotCQkJU3RyaW5nIG1ldGhvZFRvUnVuID0gYXJnc1swXS50cmltKCk7Ci0JCQlydW5PbmUobWV0aG9kVG9SdW4pOwotCQl9Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgcnVuQWxsKCkgewotCQlUZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBydW5PbmUoU3RyaW5nIG1ldGhvZE5hbWUpIHsKLQkJVGVzdFN1aXRlIHRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQkJVGVzdENhc2UgdGVzdCA9IG5ldyBNb2RlbFF1ZXJ5VGVzdGVyKG1ldGhvZE5hbWUpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdCh0ZXN0KTsKLQkJanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKHRlc3RTdWl0ZSk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGFuIGVtcHR5IEhUTUwgbW9kZWwKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcEhUTUwoKSB7Ci0JCWZNb2RlbCA9IChJRE9NTW9kZWwpIGNyZWF0ZU1vZGVsKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWluaXRWYXJzKCk7Ci0JfQotCi0JLyoqCi0JICogQ3JlYXRlIGFuIGVtcHR5IFhNTCBtb2RlbAotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwWE1MKCkgewotCQlmTW9kZWwgPSAoSURPTU1vZGVsKSBjcmVhdGVNb2RlbChDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJaW5pdFZhcnMoKTsKLQl9Ci0KLQotCS8qKgotCSAqIEluaXRpYWxpemUgbG9jYWwgZmllbGRzIGZvciB0aGlzIHRlc3QKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBpbml0VmFycygpIHsKLQkJZk1vZGVsUXVlcnkgPSBNb2RlbFF1ZXJ5VXRpbC5nZXRNb2RlbFF1ZXJ5KGZNb2RlbC5nZXREb2N1bWVudCgpKTsKLQotCi0JfQotCi0JLyoqCi0JICogVGVzdCB0aGUgSFRNTCBCT0RZIEVsZW1lbnQgZm9yIHRoZSAiYmdjb2xvciIgYXR0cmlidXRlIGRlY2xhcmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJvZHlFbGVtZW50KCkgewotCQlzZXRVcEhUTUwoKTsKLQkJZk1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldCgiPGh0bWw+PGJvZHkgYmdjb2xvcj1cIiNmZmZmZmZcIj48Zm9ybSBtZXRob2Q9XCJwb3N0XCI+PC9mb3JtPjwvYm9keT48L2h0bWw+Iik7IC8vIHNldAotCQkvLyB0ZXh0Ci0KLQkJLy8gVEVTVCBnZXR0aW5nIGEgQ01FbGVtZW50RGVjbGFyYXRpb24KLQkJRWxlbWVudCBib2R5RWxlbWVudCA9IChFbGVtZW50KSBmTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbig3KTsgLy8gbm9kZSBhdAotCQkvLyBvZmZzZXQ3LS1zaG91bGQKLQkJLy8gYmUKLQkJLy8gPGJvZHk+Ci0JCUNNRWxlbWVudERlY2xhcmF0aW9uIGJvZHlEZWNsID0gZk1vZGVsUXVlcnkuZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oYm9keUVsZW1lbnQpOwotCi0JCWludCBjb250ZW50VHlwZSA9IGJvZHlEZWNsLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydFRydWUoIkNNRWxlbWVudERlY2xhcmF0aW9uIENPTlRFTlQgVFlQRSBJTkNPUlJFQ1QgRk9SIEJPRFkiLCAoY29udGVudFR5cGUgPT0gQ01FbGVtZW50RGVjbGFyYXRpb24uTUlYRUQpKTsKLQotCQkvLyBnZXQgcGVybWlzc2libGUgYXR0cnMKLQkJQ01OYW1lZE5vZGVNYXAgbWFwID0gYm9keURlY2wuZ2V0QXR0cmlidXRlcygpOwotCQlhc3NlcnRUcnVlKCJBVFRSSUJVVEVTIEZST00gRUxFTUVOVCBERUNMQVJBVElPTiA9PSBOVUxMIiwgKG1hcCAhPSBudWxsKSk7Ci0JCVZlY3RvciBhbGxvd2VkID0gbmV3IFZlY3RvcigpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG1hcC5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQlDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIG5vZGUgPSAoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikgbWFwLml0ZW0oaSk7Ci0JCQlTdHJpbmcgbmFtZSA9IG5vZGUuZ2V0Tm9kZU5hbWUoKTsKLQkJCWFsbG93ZWQuYWRkKG5hbWUpOwotCQkJaWYgKG5hbWUuZXF1YWxzSWdub3JlQ2FzZSgiYmdjb2xvciIpKSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiR09UIElOQ09SUkVDVCBBVFRSSUJVVEUgTk9ERSBUWVBFIiwgKG5vZGUuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuQVRUUklCVVRFX0RFQ0xBUkFUSU9OKSk7Ci0KLQkJCQlDTURhdGFUeXBlIGF0dHJUeXBlID0gbm9kZS5nZXRBdHRyVHlwZSgpOwotCQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiYXR0cmlidXRlIHR5cGUgPiAiICsgYXR0clR5cGUpOwotCQkJCWFzc2VydFRydWUoIkNPVUxEIE5PVCBHRVQgQVRUUklCVVRFIFRZUEUiLCAoYXR0clR5cGUgIT0gbnVsbCkpOwotCQkJCWFzc2VydFRydWUoIkNPVUxETidUIEdFVCBJTVBMSUVEIFZBTFVFIEtJTkQiLCAoYXR0clR5cGUuZ2V0SW1wbGllZFZhbHVlS2luZCgpID09IENNRGF0YVR5cGUuSU1QTElFRF9WQUxVRV9OT05FKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0IHRoZSBIVE1MIEhUTUwgRWxlbWVudCBmb3IgaXRzIGRlY2xhcmVkIGNoaWxkcmVuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEh0bWxDaGlsZHJlbigpIHsKLQkJc2V0VXBIVE1MKCk7Ci0JCWZNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoIjxodG1sPjwvaHRtbD4iKTsgLy8gc2V0IHRleHQKLQkJRWxlbWVudCBodG1sRWxlbWVudCA9IGZNb2RlbC5nZXREb2N1bWVudCgpLmdldERvY3VtZW50RWxlbWVudCgpOwotCQlDTUVsZW1lbnREZWNsYXJhdGlvbiBodG1sRGVjbCA9IGZNb2RlbFF1ZXJ5LmdldENNRWxlbWVudERlY2xhcmF0aW9uKGh0bWxFbGVtZW50KTsKLQotCQkvLyBIVE1MJ3MgY2hpbGRyZW4gYXJlIHdpdGhpbiBhIGdyb3VwCi0JCUNNQ29udGVudCBjb250ZW50cyA9IGh0bWxEZWNsLmdldENvbnRlbnQoKTsKLQotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaXMgbm90IGEgZ3JvdXAiLCBjb250ZW50cy5nZXROb2RlVHlwZSgpID09IENNTm9kZS5HUk9VUCk7Ci0KLQkJQ01Hcm91cCBncm91cCA9IChDTUdyb3VwKSBjb250ZW50czsKLQkJaW50IG9wZXJhdG9yID0gZ3JvdXAuZ2V0T3BlcmF0b3IoKTsKLQkJQ01Ob2RlTGlzdCBjaGlsZExpc3QgPSBncm91cC5nZXRDaGlsZE5vZGVzKCk7Ci0JCWludCBtYXggPSBjb250ZW50cy5nZXRNYXhPY2N1cigpOwotCQlpbnQgbWluID0gY29udGVudHMuZ2V0TWluT2NjdXIoKTsKLQotCQkvLyB0aGUgZ3JvdXAgc2hvdWxkIGJlIGFsbG93ZWQgb25jZSwgd2l0aCBhIHNlcXVlbmNlIHdob3NlIGZpcnN0IGVudHJ5Ci0JCS8vIGlzIHRoZSBkZWNsYXJhdGlvbiBmb3IgSEVBRAotCQlhc3NlcnRUcnVlKCJvY2N1cnJhbmNlIG9mIGdyb3VwIiwgbWluID09IDEgJiYgbWF4ID09IDEpOwotCQlhc3NlcnRUcnVlKCJyZWxhdGlvbnNoaXAgaW4gZ3JvdXAiLCBvcGVyYXRvciA9PSBDTUdyb3VwLlNFUVVFTkNFKTsKLQkJYXNzZXJ0VHJ1ZSgiY29udGVudCBkZXNjcmlwdG9yIHR5cGUsIHBvc2l0aW9uIDAiLCBjb250ZW50cy5nZXROb2RlVHlwZSgpID09IENNTm9kZS5HUk9VUCk7Ci0JCWFzc2VydFRydWUoImNoaWxkIG9yZGVyIChIRUFEIGZpcnN0KSIsIGNoaWxkTGlzdC5pdGVtKDApLmdldE5vZGVOYW1lKCkuZXF1YWxzSWdub3JlQ2FzZShIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuSEVBRCkpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnQgZGVzY3JpcHRvciB0eXBlLCBwb3NpdGlvbiAxIiwgY2hpbGRMaXN0Lml0ZW0oMSkuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuR1JPVVApOwotCQkvLyBUaGUgc2Vjb25kIGNoaWxkIHNob3VsZCBiZSBhIGdyb3VwIGFzIHdlbGwsIGNvbnRhaW5pbmcgQk9EWSBhbmQKLQkJLy8gRlJBTUVTRVQgd2l0aCBhbgotCQkvLyBvcGVyYXRvciBvZiBDTUdyb3VwLkNIT0lDRQotCQlhc3NlcnRUcnVlKCJjb250ZW50IGRlc2NyaXB0b3IgdHlwZSwgcG9zaXRpb24gMSAtIHJlbGF0aW9uc2hpcCBvZiBncm91cCIsICgoQ01Hcm91cCkgY2hpbGRMaXN0Lml0ZW0oMSkpLmdldE9wZXJhdG9yKCkgPT0gQ01Hcm91cC5DSE9JQ0UpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGb3JtTWV0aG9kQXR0cigpIHsKLQkJc2V0VXBIVE1MKCk7Ci0JCWZNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoIjxodG1sPjxib2R5IGJnY29sb3I9XCIjZmZmZmZmXCI+PGZvcm0gbWV0aG9kPVwicG9zdFwiPjwvZm9ybT48L2JvZHk+PC9odG1sPiIpOyAvLyBzZXQKLQkJLy8gdGV4dAotCi0JCS8vIFRFU1QgR0VUVElORyBBIENNQXR0cmlidXRlRGVjbGFyYXRvaW4KLQkJRWxlbWVudCBmb3JtRWxlbWVudCA9IChFbGVtZW50KSBmTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbigzMSk7IC8vIDxmb3JtPgotCQlBdHRyIGF0dHJOb2RlID0gZm9ybUVsZW1lbnQuZ2V0QXR0cmlidXRlTm9kZShIVE1MNDBOYW1lc3BhY2UuQVRUUl9OQU1FX01FVEhPRCk7Ci0JCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gbWV0aG9kQXR0ckRlY2wgPSBmTW9kZWxRdWVyeS5nZXRDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKGF0dHJOb2RlKTsKLQkJYXNzZXJ0VHJ1ZSgiQ29udGVudCBNb2RlbCBtaXNzaW5nIHRoZSBhdHRyaWJ1dGUgZGVjbGFyYXRpb24gZm9yIFwibWV0aG9kXCIiLCBtZXRob2RBdHRyRGVjbCAhPSBudWxsKTsKLQotCQlMaXN0IHZhbHVlcyA9IGdldFZhbGlkU3RyaW5ncyhmb3JtRWxlbWVudCwgbWV0aG9kQXR0ckRlY2wpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgdmFsdWVzIGZvciBhdHRyaWJ1dGUgXCJtZXRob2RcIiIsICh2YWx1ZXMuc2l6ZSgpID09IDIpKTsKLQkJYXNzZXJ0VHJ1ZSgiZGVmYXVsdCB2YWx1ZSBmb3IgYXR0cmlidXRlIFwibWV0aG9kXCIgaXMgd3JvbmciLCAobWV0aG9kQXR0ckRlY2wuZ2V0QXR0clR5cGUoKS5nZXRJbXBsaWVkVmFsdWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJnZXQiKSkpOwotCX0KLQotCS8qKgotCSAqIEEgc2hvcnQgdGVzdCB0byBlbnN1cmUgdGhhdCBhIERURCBjYW4gYmUgbG9hZGVkIGZyb20gYSBzeXN0ZW0KLQkgKiByZWZlcmVuY2UuCi0JICogCi0JICogTm90ZTogTWF5IHJlcXVpcmUgYSBmdW5jdGlvbmluZyBuZXR3b3JrIGNvbm5lY3Rpb24gZm9yIHRoZSByZWZlcmVuY2VzCi0JICogdG8gYmUgcmVzb2x2ZWQgcHJvcGVybHkuCi0JICogCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REVERMb2FkRnJvbVN5c3RlbUlEXzEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpZiAodGVzdFNoaXBwZWREVERMb29rdXApIHsKLQkJCXNldFVwWE1MKCk7Ci0JCQlVUkwgaW5zdGFsbGF0aW9uUGF0aCA9IFBsYXRmb3JtLmdldEJ1bmRsZShKU1BVSVRlc3RzUGx1Z2luLklEKS5nZXRFbnRyeSgiLyIpOwotCQkJU3RyaW5nIGRpc2tMb2NhdGlvbiA9IG51bGw7Ci0JCQlkaXNrTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxhdGlvblBhdGgpLnRvRXh0ZXJuYWxGb3JtKCk7Ci0KLQkJCWFzc2VydFRydWUoImZhaWxlZCB0byByZXNvbHZlIHBsdWdpbiBpbnN0YWxsIHBhdGgiLCBkaXNrTG9jYXRpb24gIT0gbnVsbCk7Ci0JCQlTdHJpbmcgY29udGVudCA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PjwhRE9DVFlQRSBodG1sIFNZU1RFTSAiICsgZGlza0xvY2F0aW9uICsgIlRlc3RGaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwyMC5kdGRcIiIgKyAiPjxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiIHhtbG5zOndtbD1cImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnLzIwMDEvd21sXCI+PC9odG1sPiI7Ci0JCQlmTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnQpOwotCQkJQ01Eb2N1bWVudE1hbmFnZXIgZG9jdW1lbnRNYW5hZ2FlciA9IGZNb2RlbFF1ZXJ5LmdldENNRG9jdW1lbnRNYW5hZ2VyKCk7Ci0JCQlkb2N1bWVudE1hbmFnYWVyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BU1lOQ19MT0FELCBmYWxzZSk7Ci0JCQlkb2N1bWVudE1hbmFnYWVyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BVVRPX0xPQUQsIHRydWUpOwotCi0JCQlOb2RlIGRvbU5vZGUgPSAoTm9kZSkgZk1vZGVsLmdldEluZGV4ZWRSZWdpb24oY29udGVudC5sZW5ndGgoKSAtIDIpOwotCQkJQ01Ob2RlIG5vZGUgPSBmTW9kZWxRdWVyeS5nZXRDTU5vZGUoZG9tTm9kZSk7Ci0JCQlhc3NlcnRUcnVlKCJ3bWwyMC5kdGQgZmFpbGVkIHRvIGxvYWQiLCBub2RlICE9IG51bGwgJiYgbm9kZS5nZXROb2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoImh0bWwiKSk7Ci0JCX0KLQl9Ci0KLQotCS8qKgotCSAqIEEgc2hvcnQgdGVzdCB0byBlbnN1cmUgdGhhdCBhIERURCwgdGhlIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwgb25lLCBjYW4KLQkgKiBiZSBsb2FkZWQgZnJvbSBhIHN5c3RlbSByZWZlcmVuY2UuCi0JICogCi0JICogTm90ZTogTWF5IHJlcXVpcmUgYSBmdW5jdGlvbmluZyBuZXR3b3JrIGNvbm5lY3Rpb24gZm9yIHRoZSByZWZlcmVuY2VzCi0JICogdG8gYmUgcmVzb2x2ZWQgcHJvcGVybHkuCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RFRETG9hZEZyb21TeXN0ZW1JRF8yKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKHRlc3RTaGlwcGVkRFRETG9va3VwKSB7Ci0JCQlVUkwgaW5zdGFsbGF0aW9uUGF0aCA9IFBsYXRmb3JtLmdldEJ1bmRsZShKU1BVSVRlc3RzUGx1Z2luLklEKS5nZXRFbnRyeSgiLyIpOwotCQkJU3RyaW5nIGRpc2tMb2NhdGlvbiA9IG51bGw7Ci0KLQkJCWRpc2tMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbGF0aW9uUGF0aCkudG9FeHRlcm5hbEZvcm0oKTsKLQotCQkJYXNzZXJ0VHJ1ZSgiZmFpbGVkIHRvIHJlc29sdmUgcGx1Z2luIGluc3RhbGwgcGF0aCIsIGRpc2tMb2NhdGlvbiAhPSBudWxsKTsKLQkJCXNldFVwWE1MKCk7Ci0JCQlTdHJpbmcgY29udGVudCA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PjwhRE9DVFlQRSBodG1sIFNZU1RFTSAiICsgZGlza0xvY2F0aW9uICsgInRlc3RmaWxlcy9YSFRNTC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZFwiIiArICI+PGh0bWw+PC9odG1sPiI7Ci0JCQlmTW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0KGNvbnRlbnQpOwotCi0JCQlDTURvY3VtZW50TWFuYWdlciBkb2N1bWVudE1hbmFnYWVyID0gZk1vZGVsUXVlcnkuZ2V0Q01Eb2N1bWVudE1hbmFnZXIoKTsKLQkJCWRvY3VtZW50TWFuYWdhZXIuc2V0UHJvcGVydHlFbmFibGVkKENNRG9jdW1lbnRNYW5hZ2VyLlBST1BFUlRZX0FTWU5DX0xPQUQsIGZhbHNlKTsKLQkJCWRvY3VtZW50TWFuYWdhZXIuc2V0UHJvcGVydHlFbmFibGVkKENNRG9jdW1lbnRNYW5hZ2VyLlBST1BFUlRZX0FVVE9fTE9BRCwgdHJ1ZSk7Ci0KLQkJCS8vIHNlZSBkZWZlY3QgMjgyNDI5Ci0JCQlDTUVsZW1lbnREZWNsYXJhdGlvbiBodG1sRGVjbCA9IChDTUVsZW1lbnREZWNsYXJhdGlvbikgZk1vZGVsUXVlcnkuZ2V0Q01Ob2RlKChOb2RlKSBmTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbihjb250ZW50Lmxlbmd0aCgpIC0gMikpOwotCQkJYXNzZXJ0VHJ1ZSgieGh0bWwxLXRyYW5zaXRpb25hbC5kdGQgbm90IGxvYWRlZCIsIGh0bWxEZWNsICE9IG51bGwpOwotCi0JCQkvLyBIVE1MJ3MgY2hpbGRyZW4gYXJlIHdpdGhpbiBhIGdyb3VwCi0JCQlDTUNvbnRlbnQgY29udGVudHMgPSBodG1sRGVjbC5nZXRDb250ZW50KCk7Ci0KLQkJCWFzc2VydFRydWUoImNvbnRlbnQgdHlwZSBpcyBub3QgYSBncm91cCIsIGNvbnRlbnRzLmdldE5vZGVUeXBlKCkgPT0gQ01Ob2RlLkdST1VQKTsKLQotCQkJQ01Hcm91cCBncm91cCA9IChDTUdyb3VwKSBjb250ZW50czsKLQkJCWludCBvcGVyYXRvciA9IGdyb3VwLmdldE9wZXJhdG9yKCk7Ci0JCQlDTU5vZGVMaXN0IGNoaWxkTGlzdCA9IGdyb3VwLmdldENoaWxkTm9kZXMoKTsKLQkJCWludCBtYXggPSBjb250ZW50cy5nZXRNYXhPY2N1cigpOwotCQkJaW50IG1pbiA9IGNvbnRlbnRzLmdldE1pbk9jY3VyKCk7Ci0KLQkJCS8vIHRoZSBncm91cCBzaG91bGQgYmUgYWxsb3dlZCBvbmNlLCB3aXRoIGEgc2VxdWVuY2Ugd2hvc2UgZmlyc3QKLQkJCS8vIGVudHJ5Ci0JCQkvLyBpcyB0aGUgZGVjbGFyYXRpb24gZm9yIEhFQUQKLQkJCWFzc2VydFRydWUoIm9jY3VycmFuY2Ugb2YgZ3JvdXAiLCBtaW4gPT0gMSAmJiBtYXggPT0gMSk7Ci0JCQlhc3NlcnRUcnVlKCJyZWxhdGlvbnNoaXAgaW4gZ3JvdXAiLCBvcGVyYXRvciA9PSBDTUdyb3VwLlNFUVVFTkNFKTsKLQkJCWFzc2VydFRydWUoImNvbnRlbnQgZGVzY3JpcHRvciB0eXBlLCBwb3NpdGlvbiAwIiwgY29udGVudHMuZ2V0Tm9kZVR5cGUoKSA9PSBDTU5vZGUuR1JPVVApOwotCQkJYXNzZXJ0VHJ1ZSgiY2hpbGQgb3JkZXIgKEhFQUQgZmlyc3QpIiwgY2hpbGRMaXN0Lml0ZW0oMCkuZ2V0Tm9kZU5hbWUoKS5lcXVhbHMoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLkhFQUQudG9Mb3dlckNhc2UoKSkpOwotCQkJYXNzZXJ0VHJ1ZSgiY2hpbGQgb3JkZXIgKEJPRFkgc2Vjb25kKSIsIGNoaWxkTGlzdC5pdGVtKDEpLmdldE5vZGVOYW1lKCkuZXF1YWxzKEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5CT0RZLnRvTG93ZXJDYXNlKCkpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEEgc2hvcnQgdGVzdCB0byBlbnN1cmUgdGhhdCB0aGUgRFREIGZvciBKU1AgMS4yIHRhZyBsaWJyYXJpZXMgY2FuIGJlCi0JICogbG9hZGVkIGZyb20gYSBwdWJsaWMgcmVmZXJlbmNlIHJlZ2lzdGVyZWQgaW4gdGhlIFhNTCBjYXRhbG9nCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERURExvYWRGcm9tUHVibGljSUQoKSB7Ci0JCS8vIE5vIGxvbmdlciBwcm92aWRlZCBpbiBXVFAKLQkJLy8gVE9ETzogcHJvdmlkZSBEVEQ/Ci0JCS8vIGlmICh0ZXN0U2hpcHBlZERURExvb2t1cCkgewotCQkvLyBzZXRVcFhNTCgpOwotCQkvLyBTdHJpbmcgY29udGVudHMgPSAiPCFET0NUWVBFIHRhZ2xpYiBQVUJMSUMgXCItLy9TdW4gTWljcm9zeXN0ZW1zLAotCQkvLyBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMi8vRU5cIj4KLQkJLy8gPHRhZ2xpYj48dGFnPmZvbzwvdGFnPjwvdGFnbGliPiI7Ci0JCS8vIGZNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXQoY29udGVudHMpOwotCQkvLwotCQkvLyBDTURvY3VtZW50TWFuYWdlciBkb2N1bWVudE1hbmFnYWVyID0KLQkJLy8gZk1vZGVsUXVlcnkuZ2V0Q01Eb2N1bWVudE1hbmFnZXIoKTsKLQkJLy8gZG9jdW1lbnRNYW5hZ2Flci5zZXRQcm9wZXJ0eUVuYWJsZWQoQ01Eb2N1bWVudE1hbmFnZXIuUFJPUEVSVFlfQVNZTkNfTE9BRCwKLQkJLy8gZmFsc2UpOwotCQkvLyBkb2N1bWVudE1hbmFnYWVyLnNldFByb3BlcnR5RW5hYmxlZChDTURvY3VtZW50TWFuYWdlci5QUk9QRVJUWV9BVVRPX0xPQUQsCi0JCS8vIHRydWUpOwotCQkvLwotCQkvLwotCQkvLyAvLyB0YWdsaWIKLQkJLy8gQ01Ob2RlIG5vZGUgPSBmTW9kZWxRdWVyeS5nZXRDTU5vZGUoKE5vZGUpCi0JCS8vIGZNb2RlbC5nZXRJbmRleGVkUmVnaW9uKGNvbnRlbnRzLmxlbmd0aCgpIC0gMikpOwotCQkvLyBhc3NlcnRUcnVlKCJ3ZWItanNwdGFnbGlicmFyeV8xXzIuZHRkIGZhaWxlZCB0byBsb2FkIHRocm91Z2gKLQkJLy8gY2F0YWxvZyIsIG5vZGUgIT0gbnVsbCAmJiBub2RlLmdldE5vZGVUeXBlKCkgPT0KLQkJLy8gQ01Ob2RlLkVMRU1FTlRfREVDTEFSQVRJT04gJiYKLQkJLy8gbm9kZS5nZXROb2RlTmFtZSgpLmVxdWFsc0lnbm9yZUNhc2UoInRhZ2xpYiIpKTsKLQkJLy8KLQkJLy8gLy8gdGFnCi0JCS8vIG5vZGUgPSBmTW9kZWxRdWVyeS5nZXRDTU5vZGUoKE5vZGUpCi0JCS8vIGZNb2RlbC5nZXRJbmRleGVkUmVnaW9uKGNvbnRlbnRzLmxlbmd0aCgpIC0gMTIpKTsKLQkJLy8gYXNzZXJ0VHJ1ZSgiQ01FbGVtZW50RGVjbGFyYXRpb24gZm9yIFwidGFnXCIgZnJvbQotCQkvLyB3ZWItanNwdGFnbGlicmFyeV8xXzIuZHRkIGlzIG1pc3NpbmciLCBub2RlICE9IG51bGwgJiYKLQkJLy8gbm9kZS5nZXROb2RlVHlwZSgpID09IENNTm9kZS5FTEVNRU5UX0RFQ0xBUkFUSU9OICYmCi0JCS8vIG5vZGUuZ2V0Tm9kZU5hbWUoKS5lcXVhbHNJZ25vcmVDYXNlKCJ0YWciKSk7Ci0JCS8vIENNQ29udGVudCBjb250ZW50ID0gKChDTUVsZW1lbnREZWNsYXJhdGlvbikgbm9kZSkuZ2V0Q29udGVudCgpOwotCQkvLyBhc3NlcnRUcnVlKCJvbmx5IG9uZSBvY2N1cnJlbmNlIG9mIGNoaWxkIGdyb3VwIGFsbG93ZWQiLAotCQkvLyBjb250ZW50LmdldE5vZGVUeXBlKCkgPT0gQ01Ob2RlLkdST1VQICYmIGNvbnRlbnQuZ2V0TWF4T2NjdXIoKSA9PQotCQkvLyAxKTsKLQkJLy8gfQotCX0KLQotCi0KLQlwdWJsaWMgc3RhdGljIElTdHJ1Y3R1cmVkTW9kZWwgY3JlYXRlTW9kZWwoU3RyaW5nIGNvbnRlbnRUeXBlSUQpIHsKLQkJLy8gY3JlYXRlIGFuIGVtcHR5IG1vZGVsIHdpdGggaXRzIGRlZmF1bHQgZmFjdG9yaWVzCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmNyZWF0ZVVuTWFuYWdlZFN0cnVjdHVyZWRNb2RlbEZvcihjb250ZW50VHlwZUlEKTsKLQotCQkvLyBhZGQgZWRpdG9yIGFkYXB0ZXIgZmFjdG9yaWVzCi0JCUFkYXB0ZXJGYWN0b3J5UmVnaXN0cnkgYWRhcHRlclJlZ2lzdHJ5ID0gSlNQVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEFkYXB0ZXJGYWN0b3J5UmVnaXN0cnkoKTsKLQkJSXRlcmF0b3IgYWRhcHRlckxpc3QgPSBhZGFwdGVyUmVnaXN0cnkuZ2V0QWRhcHRlckZhY3RvcmllcygpOwotCQkvLyBBbmQgYWxsIHRob3NlIGFwcHJvcHJpYXRlIGZvciB0aGlzIHBhcnRpY3VsYXIgdHlwZSBvZiBjb250ZW50Ci0JCXdoaWxlIChhZGFwdGVyTGlzdC5oYXNOZXh0KCkpIHsKLQkJCXRyeSB7Ci0JCQkJQWRhcHRlckZhY3RvcnlQcm92aWRlciBwcm92aWRlciA9IChBZGFwdGVyRmFjdG9yeVByb3ZpZGVyKSBhZGFwdGVyTGlzdC5uZXh0KCk7Ci0JCQkJaWYgKHByb3ZpZGVyLmlzRm9yKG1vZGVsLmdldE1vZGVsSGFuZGxlcigpKSkgewotCQkJCQlwcm92aWRlci5hZGRBZGFwdGVyRmFjdG9yaWVzKG1vZGVsKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQkJfQotCQl9Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm4gdGhlIHZhbGlkIHZhbHVlcyBmb3IgYW4gYXR0cmlidXRlIHdpdGggdGhlIGdpdmVuIGRlY2xhcmF0aW9uIG9uCi0JICogdGhlIGdpdmVuIGVsZW1lbnQuIERlcml2ZWQgZnJvbSBYTUxQcm9wZXJ0eVNvdXJjZQotCSAqLwotCXByaXZhdGUgTGlzdCBnZXRWYWxpZFN0cmluZ3MoRWxlbWVudCBlbGVtZW50LCBDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGF0dHJEZWNsKSB7Ci0JCUNNRGF0YVR5cGUgdmFsdWVzSGVscGVyID0gYXR0ckRlY2wuZ2V0QXR0clR5cGUoKTsKLQkJVmVjdG9yIHZhbHVlcyA9IG5ldyBWZWN0b3IoKTsKLQotCQlpZiAodmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZUtpbmQoKSA9PSBDTURhdGFUeXBlLklNUExJRURfVkFMVUVfRklYRUQgJiYgdmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZSgpICE9IG51bGwpIHsKLQkJCS8vIEZJWEVEIHZhbHVlCi0JCQl2YWx1ZXMuYWRkKHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWUoKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQkvLyBFTlVNRVJBVEVEIHZhbHVlcwotCQkJU3RyaW5nW10gdmFsdWVTdHJpbmdzID0gbnVsbDsKLQkJCS8vIG5ldyB3YXkKLQkJCXZhbHVlU3RyaW5ncyA9IGZNb2RlbFF1ZXJ5LmdldFBvc3NpYmxlRGF0YVR5cGVWYWx1ZXMoZWxlbWVudCwgYXR0ckRlY2wpOwotCQkJaWYgKHZhbHVlU3RyaW5ncyA9PSBudWxsKQotCQkJCS8vIG9sZGVyIHdheQotCQkJCXZhbHVlU3RyaW5ncyA9IGF0dHJEZWNsLmdldEF0dHJUeXBlKCkuZ2V0RW51bWVyYXRlZFZhbHVlcygpOwotCQkJaWYgKHZhbHVlU3RyaW5ncyAhPSBudWxsKSB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZVN0cmluZ3MubGVuZ3RoOyBpKyspIHsKLQkJCQkJdmFsdWVzLmFkZCh2YWx1ZVN0cmluZ3NbaV0pOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAodmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZUtpbmQoKSAhPSBDTURhdGFUeXBlLklNUExJRURfVkFMVUVfTk9ORSAmJiB2YWx1ZXNIZWxwZXIuZ2V0SW1wbGllZFZhbHVlKCkgIT0gbnVsbCkgewotCQkJaWYgKCF2YWx1ZXMuY29udGFpbnModmFsdWVzSGVscGVyLmdldEltcGxpZWRWYWx1ZSgpKSkKLQkJCQl2YWx1ZXMuYWRkKHZhbHVlc0hlbHBlci5nZXRJbXBsaWVkVmFsdWUoKSk7Ci0JCX0KLQotCQlyZXR1cm4gdmFsdWVzOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvQ29sb3JSZWdpb25zLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL0NvbG9yUmVnaW9ucy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmVjY2RmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvQ29sb3JSZWdpb25zLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLS8qKgotICogSW5zZXJ0IHRoZSB0eXBlJ3MgZGVzY3JpcHRpb24gaGVyZS4KLSAqIENyZWF0aW9uIGRhdGU6ICg3LzIxLzAwIDQ6MTQ6NDAgUE0pCi0gKiBAYXV0aG9yOiBEYXZpZCBXaWxsaWFtcwotICovCi1wdWJsaWMgY2xhc3MgQ29sb3JSZWdpb25zIGV4dGVuZHMgamF2YS51dGlsLlZlY3RvciB7Ci0JLyoqCi0JICogRGVmYXVsdCA8Y29kZT5zZXJpYWxWZXJzaW9uVUlEPC9jb2RlPgotCSAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGxvbmcgc2VyaWFsVmVyc2lvblVJRCA9IDFMOwotCi0JLyoqCi0JICogQ29sb3JSZWdpb25zIGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIENvbG9yUmVnaW9ucygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBDb2xvclJlZ2lvbnMgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKiBAcGFyYW0gaW5pdGlhbENhcGFjaXR5IGludAotCSAqLwotCXB1YmxpYyBDb2xvclJlZ2lvbnMoaW50IGluaXRpYWxDYXBhY2l0eSkgewotCQlzdXBlcihpbml0aWFsQ2FwYWNpdHkpOwotCX0KLQotCS8qKgotCSAqIENvbG9yUmVnaW9ucyBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqIEBwYXJhbSBpbml0aWFsQ2FwYWNpdHkgaW50Ci0JICogQHBhcmFtIGNhcGFjaXR5SW5jcmVtZW50IGludAotCSAqLwotCXB1YmxpYyBDb2xvclJlZ2lvbnMoaW50IGluaXRpYWxDYXBhY2l0eSwgaW50IGNhcGFjaXR5SW5jcmVtZW50KSB7Ci0JCXN1cGVyKGluaXRpYWxDYXBhY2l0eSwgY2FwYWNpdHlJbmNyZW1lbnQpOwotCX0KLQotCXB1YmxpYyBpbnRbXSBhc0ludEFycmF5KCkgewotCQl0cmltVG9TaXplKCk7Ci0JCWludCBhcnJheVNpemUgPSBlbGVtZW50RGF0YS5sZW5ndGg7Ci0JCWludFtdIHJlc3VsdHMgPSBuZXcgaW50W2FycmF5U2l6ZV07Ci0JCS8vCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXJyYXlTaXplOyBpKyspIHsKLQkJCXJlc3VsdHNbaV0gPSAoKEludGVnZXIpIGVsZW1lbnREYXRhW2ldKS5pbnRWYWx1ZSgpOwotCQl9Ci0JCS8vCi0JCXJldHVybiByZXN1bHRzOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL0RlYnVnRG9jdW1lbnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvRGVidWdEb2N1bWVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDY5OWMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvRGVidWdEb2N1bWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlcjsKLQotaW1wb3J0IGphdmEuaW8uUHJpbnRTdHJlYW07Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi0KLXB1YmxpYyBjbGFzcyBEZWJ1Z0RvY3VtZW50IHsKLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBkdW1wKERvY3VtZW50IGRvY3VtZW50KSB7Ci0JCWlmIChkb2N1bWVudCA9PSBudWxsKQotCQkJcmV0dXJuOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkR1bXAgb2YgRE9NIik7IC8vJE5PTi1OTFMtMSQKLQotCQlkdW1wKGRvY3VtZW50LCBTeXN0ZW0ub3V0KTsKLQotCQkvLwotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCI9ID0gPSA9ID0gPSIpOyAvLyROT04tTkxTLTEkCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCi0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGR1bXAoRG9jdW1lbnQgZG9jdW1lbnQsIFByaW50U3RyZWFtIG91dCkgewotCQlOb2RlIG5vZGUgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCXdoaWxlIChub2RlICE9IG51bGwpIHsKLQkJCWR1bXAobm9kZSwgb3V0KTsKLQkJCW5vZGUgPSBub2RlLmdldE5leHRTaWJsaW5nKCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBkdW1wKE5vZGUgdG9wTm9kZSkgewotCQlkdW1wKHRvcE5vZGUsIFN5c3RlbS5vdXQpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBkdW1wKE5vZGUgdG9wTm9kZSwgUHJpbnRTdHJlYW0gb3V0KSB7Ci0JCWlmICh0b3BOb2RlID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCS8vIHByaW50IG91dCB0aGlzIG5vZGUKLQkJLy8KLQkJcHJpbnROb2RlKHRvcE5vZGUsIG91dCk7Ci0KLQkJLy8gbm93IHByaW50IG91dCBpdHMgY2hpbGRyZW4KLQkJLy9Ob2RlTGlzdCBub2RlcyA9IHRvcE5vZGUuZ2V0Q2hpbGROb2RlcygpOwotCQkvL2ludCBsZW4gPSBub2Rlcy5nZXRMZW5ndGgoKTsKLQkJLy9mb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0KLQkJLy9Ob2RlIG5vZGUgPSBub2Rlcy5pdGVtKGkpOwotCQkvL2R1bXAobm9kZSwgb3V0KTsKLQkJLy99Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHByaW50Tm9kZShOb2RlIHRvcE5vZGUpIHsKLQkJcHJpbnROb2RlKHRvcE5vZGUsIFN5c3RlbS5vdXQpOwotCi0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHByaW50Tm9kZShOb2RlIHRvcE5vZGUsIFByaW50U3RyZWFtIG91dCkgewotCQkvLyBwcmludCBvdXQgdGhpcyBub2RlCi0JCS8vCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gPSAoKElET01Ob2RlKSB0b3BOb2RlKS5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGxhc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gPSAoKElET01Ob2RlKSB0b3BOb2RlKS5nZXRMYXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCWlmICgoZmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gPT0gbnVsbCkgfHwgKGxhc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gPT0gbnVsbCkpIHsKLQkJCS8vIG5vIHRleHQgdG8gb3V0cHV0Ci0JCX0gZWxzZSB7Ci0JCQlpbnQgc3RhcnQgPSBmaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbi5nZXRTdGFydCgpOwotCQkJaW50IGVuZCA9IGxhc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24uZ2V0RW5kKCk7Ci0KLQkJCVN0cmluZyBvdXRTdHJpbmcgPSB0b3BOb2RlLnRvU3RyaW5nKCk7Ci0JCQlvdXRTdHJpbmcgPSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHMuZXNjYXBlKG91dFN0cmluZyk7Ci0JCQlvdXQucHJpbnRsbigiWyIgKyBzdGFydCArICIsICIgKyBlbmQgKyAiXSIgKyBvdXRTdHJpbmcpOyAvLyROT04tTkxTLTMkLy8kTk9OLU5MUy0yJC8vJE5PTi1OTFMtMSQKLQkJfQotCQkvLyBub3cgZG8gaXRzIGNoaWxkcmVuCi0JCU5vZGVMaXN0IG5vZGVzID0gdG9wTm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0JCWludCBsZW4gPSBub2Rlcy5nZXRMZW5ndGgoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQkJTm9kZSBjaGlsZE5vZGUgPSBub2Rlcy5pdGVtKGkpOwotCQkJcHJpbnROb2RlKGNoaWxkTm9kZSwgb3V0KTsKLQkJfQotCi0JfQotCi0JcHVibGljIERlYnVnRG9jdW1lbnQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1NjYW5uZXJVbml0VGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU2Nhbm5lclVuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDQ5ODQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU2Nhbm5lclVuaXRUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwubW9kZWxoYW5kbGVyLk1vZGVsSGFuZGxlckZvckpTUDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5ET01KU1BSZWdpb25Db250ZXh0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLm1vZGVsaGFuZGxlci5JTW9kZWxIYW5kbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLkJsb2NrTWFya2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5sdGsucGFyc2VyLkJsb2NrVGFnUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQ29yZU5vZGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuTW9kZWxIYW5kbGVyRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5yZWdpb25zLkRPTVJlZ2lvbkNvbnRleHQ7Ci0KLS8qKgotICogQGF1dGhvciBOaXRpbiBEYWh5YWJoYWkgPG5pdGluZEB1cy5pYm0uY29tPgotICovCi1wdWJsaWMgY2xhc3MgU2Nhbm5lclVuaXRUZXN0cyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhJVGV4dFJlZ2lvbkxpc3QgcmVnaW9ucywgU3RyaW5nW10gY29udGV4dHMsIFN0cmluZ1tdW10gZW1iZWRkZWRDb250ZXh0cykgewotCi0JCWludCBlbWJlZENvdW50ID0gMDsKLQkJSXRlcmF0b3IgaXRlcmF0b3IgPSByZWdpb25zLml0ZXJhdG9yKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGV4dHMubGVuZ3RoOyBpKyspIHsKLQkJCWlmICghaXRlcmF0b3IuaGFzTmV4dCgpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IChJVGV4dFJlZ2lvbikgaXRlcmF0b3IubmV4dCgpOwotCQkJYXNzZXJ0RXF1YWxzKCJjb250ZXh0ICIgKyBpICsgIiBpbmNvcnJlY3QiLCBjb250ZXh0c1tpXSwgcmVnaW9uLmdldFR5cGUoKSk7Ci0JCQlpZiAocmVnaW9uIGluc3RhbmNlb2YgSVRleHRSZWdpb25Db250YWluZXIpIHsKLQkJCQlJVGV4dFJlZ2lvbkNvbnRhaW5lciBjb250YWluZXIgPSAoSVRleHRSZWdpb25Db250YWluZXIpIHJlZ2lvbjsKLQkJCQlib29sZWFuIGVtYmVkZGVkUmVzdWx0ID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudChjb250YWluZXIsIGVtYmVkZGVkQ29udGV4dHNbZW1iZWRDb3VudF0ubGVuZ3RoKSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKGNvbnRhaW5lci5nZXRSZWdpb25zKCksIGVtYmVkZGVkQ29udGV4dHNbZW1iZWRDb3VudF0pOwotCQkJCWVtYmVkQ291bnQrKzsKLQkJCQlhc3NlcnRUcnVlKGVtYmVkZGVkUmVzdWx0KTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2hlY2tNb2RlbExlbmd0aChJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50LCBpbnQgbGVuZ3RoKSB7Ci0JCXJldHVybiBjaGVja01vZGVsTGVuZ3RoKGRvY3VtZW50LmdldExhc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSwgbGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2hlY2tNb2RlbExlbmd0aChJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbiwgaW50IGxlbmd0aCkgewotCQlyZXR1cm4gcmVnaW9uLmdldEVuZE9mZnNldCgpID09IGxlbmd0aDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2hlY2tTaW1wbGVSZWdpb25Db3VudChJVGV4dFJlZ2lvbkNvbnRhaW5lciByZWdpb25Db250YWluZXIsIGludCBzaXplKSB7Ci0JCS8vIHllcywgdGhpcyBsb29rcyBzaWxseSwgYnV0IGl0IG1ha2VzIGl0IGVhc2llciB0byBmaW5kIHRoZSBleGFjdAotCQkvLyBmYWlsdXJlIHBvaW50Ci0JCWFzc2VydEVxdWFscygicmVnaW9uIGNvdW50Iiwgc2l6ZSwgcmVnaW9uQ29udGFpbmVyLmdldE51bWJlck9mUmVnaW9ucygpKTsKLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IHJlZ2lvbkNvbnRhaW5lcnMsIGludFtdIHNpemVzKSB7Ci0JCWludCBjb250YWluZXJzID0gcmVnaW9uQ29udGFpbmVycy5nZXRMZW5ndGgoKTsKLQkJYXNzZXJ0RXF1YWxzKCJkaWZmZXJlbnQgbnVtYmVyIG9mIGNvbnRhaW5lcnMiLCBzaXplcy5sZW5ndGgsIGNvbnRhaW5lcnMpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHNpemVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoImNvbnRhaW5lciAiICsgaSArICIgaXMgZGlmZmVyZW50Iiwgc2l6ZXNbaV0sIHJlZ2lvbkNvbnRhaW5lcnMuaXRlbShpKS5nZXROdW1iZXJPZlJlZ2lvbnMoKSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhJVGV4dFJlZ2lvbkxpc3QgcmVnaW9ucywgU3RyaW5nW10gY29udGV4dHMpIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZXh0cy5sZW5ndGg7IGkrKykgewotCQkJSVRleHRSZWdpb24gcmVnaW9uID0gcmVnaW9ucy5nZXQoaSk7Ci0JCQlhc3NlcnRFcXVhbHMoInJlZ2lvbiB0eXBlICIgKyBpLCBjb250ZXh0c1tpXSwgcmVnaW9uLmdldFR5cGUoKSk7Ci0JCX0KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgbG9hZENoYXJzKElucHV0U3RyZWFtIGlucHV0KSB7Ci0KLQkJU3RyaW5nQnVmZmVyIHMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCXRyeSB7Ci0JCQlpbnQgYyA9IC0xOwotCQkJd2hpbGUgKChjID0gaW5wdXQucmVhZCgpKSA+PSAwKSB7Ci0JCQkJaWYgKGMgPiAyNTUpCi0JCQkJCWJyZWFrOwotCQkJCXMuYXBwZW5kKChjaGFyKSBjKTsKLQkJCX0KLQkJCWlucHV0LmNsb3NlKCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQW4gSS9PIGVycm9yIG9jY3VyZWQgd2hpbGUgc2Nhbm5pbmcgOiIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gcy50b1N0cmluZygpOwotCX0KLQotCS8qKgotCSAqIFN0YXJ0cyB0aGUgYXBwbGljYXRpb24uCi0JICogCi0JICogQHBhcmFtIGFyZ3MKLQkgKiAgICAgICAgICAgIGFuIGFycmF5IG9mIGNvbW1hbmQtbGluZSBhcmd1bWVudHMKLQkgKi8KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCi0JCWlmIChhcmdzID09IG51bGwgfHwgYXJncy5sZW5ndGggPT0gMCkgewotCQkJcnVuQWxsKCk7Ci0JCX0KLQkJZWxzZSBpZiAoYXJncy5sZW5ndGggPT0gMSkgewotCQkJU3RyaW5nIG1ldGhvZFRvUnVuID0gYXJnc1swXS50cmltKCk7Ci0JCQlydW5PbmUobWV0aG9kVG9SdW4pOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHJ1bkFsbCgpIHsKLQotCQlqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4oc3VpdGUoKSk7Ci0JfQotCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIHJ1bk9uZShTdHJpbmcgbWV0aG9kTmFtZSkgewotCi0JCVRlc3RTdWl0ZSB0ZXN0U3VpdGUgPSBuZXcgVGVzdFN1aXRlKCk7Ci0JCVRlc3RDYXNlIHRlc3QgPSBuZXcgU2Nhbm5lclVuaXRUZXN0cyhtZXRob2ROYW1lKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3QodGVzdCk7Ci0JCWp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bih0ZXN0U3VpdGUpOwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQotCQlyZXR1cm4gbmV3IFRlc3RTdWl0ZShTY2FubmVyVW5pdFRlc3RzLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdmVyaWZ5TGVuZ3RocyhpbnQgc3RhcnRPZmZzZXQsIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZmlyc3REb2N1bWVudFJlZ2lvbiwgU3RyaW5nIHRleHQpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBob2xkUmVnaW9uID0gZmlyc3REb2N1bWVudFJlZ2lvbjsKLQkJYXNzZXJ0VHJ1ZSgiZG9jdW1lbnQgZG9lcyBub3Qgc3RhcnQgYXQgZXhwZWN0ZWQgb2Zmc2V0IiwgaG9sZFJlZ2lvbi5nZXRTdGFydE9mZnNldCgpID09IHN0YXJ0T2Zmc2V0KTsKLQkJaW50IGxhc3RFbmQgPSAwOwotCQl3aGlsZSAoaG9sZFJlZ2lvbiAhPSBudWxsICYmIGhvbGRSZWdpb24uZ2V0RW5kT2Zmc2V0KCkgPiAwKSB7Ci0JCQlhc3NlcnRUcnVlKCJ6ZXJvLWxlbmd0aCBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZm91bmQiLCBob2xkUmVnaW9uLmdldFN0YXJ0T2Zmc2V0KCkgPT0gbGFzdEVuZCk7Ci0JCQlhc3NlcnRUcnVlKCJUZXh0UmVnaW9ubGVzcyBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZm91bmQiLCBob2xkUmVnaW9uLmdldE51bWJlck9mUmVnaW9ucygpID4gMCk7Ci0JCQlJVGV4dFJlZ2lvbkxpc3QgbGlzdCA9IGhvbGRSZWdpb24uZ2V0UmVnaW9ucygpOwotCQkJaW50IGluZGV4ID0gMDsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5zaXplKCk7IGkrKykgewotCQkJCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IGxpc3QuZ2V0KGkpOwotCQkJCWFzc2VydFRydWUoInRleHQgcmVnaW9uIHNlYW1zIGRvbid0IG1hdGNoIiwgcmVnaW9uLmdldFN0YXJ0KCkgPT0gaW5kZXgpOwotCQkJCWluZGV4ICs9IHJlZ2lvbi5nZXRMZW5ndGgoKTsKLQkJCX0KLQkJCWxhc3RFbmQgPSBob2xkUmVnaW9uLmdldEVuZE9mZnNldCgpOwotCQkJaG9sZFJlZ2lvbiA9IGhvbGRSZWdpb24uZ2V0TmV4dCgpOwotCQl9Ci0KLQkJaG9sZFJlZ2lvbiA9IGZpcnN0RG9jdW1lbnRSZWdpb247Ci0JCXdoaWxlIChob2xkUmVnaW9uICE9IG51bGwgJiYgaG9sZFJlZ2lvbi5nZXROZXh0KCkgIT0gbnVsbCkgewotCQkJaG9sZFJlZ2lvbiA9IGhvbGRSZWdpb24uZ2V0TmV4dCgpOwotCQl9Ci0JCWNoZWNrTW9kZWxMZW5ndGgoaG9sZFJlZ2lvbiwgdGV4dC5sZW5ndGgoKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHZlcmlmeUxlbmd0aHMoaW50IHN0YXJ0T2Zmc2V0LCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBsaXN0LCBTdHJpbmcgdGV4dCkgewotCQl2ZXJpZnlMZW5ndGhzKHN0YXJ0T2Zmc2V0LCBsaXN0Lml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB2ZXJpZnlMZW5ndGhzKElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQsIFN0cmluZyB0ZXh0KSB7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgZG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHZlcmlmeUxlbmd0aHMoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCwgU3RyaW5nIHRleHQpIHsKLQkJdmVyaWZ5TGVuZ3Rocyhtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKSwgdGV4dCk7Ci0JfQotCi0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZk1vZGVsOwotCXByb3RlY3RlZCBTdHJpbmcgaW5wdXQ7Ci0JcHJpdmF0ZSBCbG9ja1RhZ1BhcnNlciBwYXJzZXI7Ci0JcHJvdGVjdGVkIE9iamVjdCB0eXBlOwotCi0JcHVibGljIFNjYW5uZXJVbml0VGVzdHMoU3RyaW5nIG5hbWUpIHsKLQotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhcHBlbmRUYWdCbG9jayhTdHJpbmdCdWZmZXIgYnVmZmVyLCBTdHJpbmcgdGFnbmFtZSwgaW50IGxlbmd0aCkgewotCi0JCWJ1ZmZlci5hcHBlbmQoJzwnKTsKLQkJYnVmZmVyLmFwcGVuZCh0YWduYW1lKTsKLQkJYnVmZmVyLmFwcGVuZCgnPicpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQotCQkJYnVmZmVyLmFwcGVuZCgnXycpOwotCQlidWZmZXIuYXBwZW5kKCI8LyIpOwotCQlidWZmZXIuYXBwZW5kKHRhZ25hbWUpOwotCQlidWZmZXIuYXBwZW5kKCc+Jyk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0KLQkJc2V0VXBYTUwobnVsbCk7Ci0JfQotCi0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IHNldFVwSlNQKFN0cmluZyB0ZXh0KSB7Ci0KLQkJc2V0dXBNb2RlbChuZXcgTW9kZWxIYW5kbGVyRm9ySlNQKCkpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJzY3JpcHQiLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIGZhbHNlKSk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoInN0eWxlIiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBmYWxzZSkpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJkaXNhbGxvd0pTUCIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgdHJ1ZSwgZmFsc2UpKTsKLQotCQkvKgotCQkgKiBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCJjb250ZW50IDxzY3JpcHQ+Ci0JCSAqIDwlPSBleHByZXNzaW9uICU+IDwvc2NyaXB0PiA8YT4gPC9hPiA8Zm9vOmRpc2FsbG93SlNQPiA8JT0gJT4KLQkJICogPC9mb286ZGlzYWxsb3dKU1A+ID4iKTsgcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldwotCQkgKiBCbG9ja01hcmtlcigianNwOmRlY2xhcmF0aW9uIiwgbnVsbCwKLQkJICogWE1MSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlQsIHRydWUpKTsgcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldwotCQkgKiBCbG9ja01hcmtlcigianNwOmV4cHJlc3Npb24iLCBudWxsLAotCQkgKiBYTUxKU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgdHJ1ZSkpOyBwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3Ci0JCSAqIEJsb2NrTWFya2VyKCJqc3A6c2NyaXB0bGV0IiwgbnVsbCwKLQkJICogWE1MSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlQsIHRydWUpKTsKLQkJICovCi0JCWlucHV0ID0gdGV4dDsKLQkJZk1vZGVsLnNldChpbnB1dCk7Ci0JCXJldHVybiBmTW9kZWwuZ2V0UmVnaW9uTGlzdCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldHVwTW9kZWwoSU1vZGVsSGFuZGxlciBjb250ZW50VHlwZSkgewotCi0JCWZNb2RlbCA9IChJU3RydWN0dXJlZERvY3VtZW50KSBjb250ZW50VHlwZS5nZXREb2N1bWVudExvYWRlcigpLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudCgpOwotCQl0aGlzLnBhcnNlciA9IChCbG9ja1RhZ1BhcnNlcikgZk1vZGVsLmdldFBhcnNlcigpOwotCX0KLQotCXByb3RlY3RlZCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBzZXRVcFhNTChTdHJpbmcgdGV4dCkgewotCi0JCXNldHVwTW9kZWwobmV3IE1vZGVsSGFuZGxlckZvclhNTCgpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigic2NyaXB0IiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBmYWxzZSkpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJzdHlsZSIsIG51bGwsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgZmFsc2UpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigiZGlzYWxsb3dKU1AiLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIHRydWUsIGZhbHNlKSk7Ci0JCWlucHV0ID0gdGV4dDsKLQkJZk1vZGVsLnNldChpbnB1dCk7Ci0JCXJldHVybiBmTW9kZWwuZ2V0UmVnaW9uTGlzdCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlc3RCbG9ja1NjYW5CdWZmZXJCb3VuZGFyaWVzKFN0cmluZyBjb250ZW50VHlwZUlEKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBudWxsOwotCQkvLyB0aGUgaW50ZXJlc3Rpbmcgb2Zmc2V0cyBhcmUgYXJvdW5kIDE2ayAoMTYzODQpCi0JCS8vIGZvciAoaW50IGkgPSAxNjUwMDsgaSA+IDE2MTAwOyBpLS0pIHsKLQkJLy8gZm9yIChpbnQgaSA9IDE3MDAwOyBpID4gMTUwMDA7IGktLSkgewotCQlmb3IgKGludCBpID0gMTYzODQgKyAyNTsgaSA+IDE2MzY0IC0gMjU7IGktLSkgewotCQkJU3RyaW5nQnVmZmVyIHRleHQgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCQlkb2N1bWVudCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKGNvbnRlbnRUeXBlSUQpOwotCQkJYXBwZW5kVGFnQmxvY2sodGV4dCwgInNjcmlwdCIsIGkpOwotCQkJU3RyaW5nIHN0cmluZyA9IHRleHQudG9TdHJpbmcoKTsKLQkJCXRyeSB7Ci0JCQkJZG9jdW1lbnQuc2V0VGV4dCh0aGlzLCBzdHJpbmcpOwotCQkJCXZlcmlmeUxlbmd0aHMoZG9jdW1lbnQsIHN0cmluZyk7Ci0JCQkJYXNzZXJ0VHJ1ZSgidG9vIGZldyBkb2N1bWVudCByZWdpb25zIFtydW4gdmFsdWUgIiArIGkgKyAiXSAiLCBuZXcgQ29yZU5vZGVMaXN0KGRvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCkpLmdldExlbmd0aCgpID09IDMpOwotCQkJCXZlcmlmeUxlbmd0aHMoZG9jdW1lbnQsIHN0cmluZyk7Ci0JCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBzdGFydFRhZyA9IGRvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBtaWRkbGVCbG9jayA9IHN0YXJ0VGFnLmdldE5leHQoKTsKLQkJCQkvLyBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGVuZFRhZyA9IG1pZGRsZUJsb2NrLmdldE5leHQoKTsKLQkJCQlhc3NlcnRUcnVlKCJub3QgYmxvY2sgdGV4dCBpbiBtaWRkbGUiLCBtaWRkbGVCbG9jay5nZXRGaXJzdFJlZ2lvbigpLmdldFR5cGUoKSA9PSBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJYXNzZXJ0TnVsbCgiZXhjZXB0aW9uIGNhdWdodCIgKyBlLCBlKTsKLQkJCX0KLQkJCS8vIFN5c3RlbS5nYygpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJsb2NrU2NhbkJ1ZmZlckJvdW5kYXJpZXNGb3JIVE1MKCkgewotCQl0ZXN0QmxvY2tTY2FuQnVmZmVyQm91bmRhcmllcygib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5odG1sc291cmNlIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJsb2NrU2NhbkJ1ZmZlckJvdW5kYXJpZXNGb3JKU1AoKSB7Ci0JCXRlc3RCbG9ja1NjYW5CdWZmZXJCb3VuZGFyaWVzKCJvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuanNwc291cmNlIik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RCbG9ja1RhZyhJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcykgewotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNiwgMSwgMywgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhUfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDMpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0VORF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg0KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCbG9ja1RhZ19KU1AoKSB7Ci0JCXRlc3RCbG9ja1RhZyhzZXRVcEpTUCgiYmVnaW4gPHNjcklQdCB0eXBlPVwicGwyXCI+IDwvc2NyaXAgdD48L3NjcmlwdHM+PC9zY3JpcHRzIDwvLy88IS0gLS0tPjwvc0NySVB0PiBlbmQiKSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgYmxvY2sgdGFnIHNjYW5uaW5nIGJldHdlZW4gWE1MIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QmxvY2tUYWdfWE1MKCkgewotCi0JCXRlc3RCbG9ja1RhZyhzZXRVcFhNTCgiYmVnaW4gPHNjcklQdCB0eXBlPVwicGwyXCI+IDwvc2NyaXAgdD48L3NjcmlwdHM+PC9zY3JpcHRzIDwvLy88IS0gLS0tPjwvc0NySVB0PiBlbmQiKSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgYmxvY2sgdGFnIHNjYW5uaW5nIGJldHdlZW4gWE1MIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QmxvY2tUYWdXaXRoSlNQRXhwcmVzc2lvbnMoKSB7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiYmVnaW4gPHNjcmlwdCB0eXBlPVwicGwyXCI+IDwlPSBcImV4cHJlc3Npb25cIiU+IDwvc2NySVB0PiA8YT48L2E+IDxkaXNhbGxvd0pTUD4gPCU9IFwiZXhwcmVzc2lvblwiICU+IDwvZGlzYWxsb3dKU1A+IGVuZCIpOwotCi0JCS8vIE9MRAotCQkvLyBib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNiwKLQkJLy8gMywgMywgMSwgMywgMywgMSwgMywgMywgMywgMX0pOwotCQkvLyBORVcKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDYsIDMsIDMsIDEsIDMsIDMsIDEsIDMsIDEsIDMsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlpbnQgaSA9IDA7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFR9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VYUFJFU1NJT05fT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DTE9TRX19KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkvLyBDT1JSRUNUIEJFSEFWSU9SCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVH0pCi0JCQkJCS8vIE9MRCwgQlJPS0VOIEJFSEFWSU9SCi0JCQkJCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpKyspLmdldFJlZ2lvbnMoKSwKLQkJCQkJLy8gbmV3Ci0JCQkJCS8vIFN0cmluZ1tdewotCQkJCQkvLyBYTUxSZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsCi0JCQkJCS8vIFhNTFJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwKLQkJCQkJLy8gWE1MUmVnaW9uQ29udGV4dC5CTE9DS19URVhUfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGkrKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgdGVzdEJ1ZmZlclVuZGVyUnVuXzEoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMpIHsKLQotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNiwgMn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX1RFWFR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlclVuZGVyUnVuXzFfSlNQKCkgewotCQl0ZXN0QnVmZmVyVW5kZXJSdW5fMShzZXRVcEpTUCgiY29udGVudCA8dGFnIGE9Yi8+PCEtLWMiKSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIGJ1ZmZlciB1bmRlci1ydW5zIG9uIGJsb2NrIHNjYW5uaW5nCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlclVuZGVyUnVuXzFfWE1MKCkgewotCQl0ZXN0QnVmZmVyVW5kZXJSdW5fMShzZXRVcFhNTCgiY29udGVudCA8dGFnIGE9Yi8+PCEtLWMiKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RCdWZmZXJVbmRlclJ1bl8yKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0KLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDYsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfT1BFTn0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyVW5kZXJSdW5fMl9KU1AoKSB7Ci0KLQkJdGVzdEJ1ZmZlclVuZGVyUnVuXzIoc2V0VXBKU1AoImNvbnRlbnQgPHRhZyBhPWIvPjwhLS0iKSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgZm9yIGJ1ZmZlciB1bmRlci1ydW5zIG9uIGJsb2NrIHNjYW5uaW5nCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlclVuZGVyUnVuXzJfWE1MKCkgewotCi0JCXRlc3RCdWZmZXJVbmRlclJ1bl8yKHNldFVwWE1MKCJjb250ZW50IDx0YWcgYT1iLz48IS0tIikpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0Q0RBVEEoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMpIHsKLQotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMywgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ0RBVEFfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFfSlNQKCkgewotCi0JCXRlc3RDREFUQShzZXRVcEpTUCgiYSA8IVtDREFUQVs8PiEhPCEhPjwvJiYmLS08IS0tXV0+IGIiKSk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgQ0RBVEEgc2VjdGlvbiBzY2FubmluZyBiZXR3ZWVuIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFfWE1MKCkgewotCi0JCXRlc3RDREFUQShzZXRVcFhNTCgiYSA8IVtDREFUQVs8PiEhPCEhPjwvJiYmLS08IS0tXV0+IGIiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDEoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBWyBjb250ZW50c11dPjwvc2NyaXB0PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1AyKCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVs8L3NjcmlwdD5dXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQMmEoKSB7Ci0JCXNldFVwSlNQKCI8c2NyaXB0PjwhW0NEQVRBW2NvbnRlbnRzPC9zY3JpcHQ+XV0+PC9zY3JpcHQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja0pTUDJiKCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVs8L3NjcmlwdD5jb250ZW50c11dPjwvc2NyaXB0PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1AzKCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVtdXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQNCgpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbIF1dPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1A1KCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVsgXV1dPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1A2KCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVsgXV0iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrSlNQNygpIHsKLQkJc2V0VXBKU1AoIjxzY3JpcHQ+PCFbQ0RBVEFbICIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tKU1A4KCkgewotCQlzZXRVcEpTUCgiPHNjcmlwdD48IVtDREFUQVsiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MMSgpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbIF1dPjwvc2NyaXB0PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDREFUQWluQmxvY2tYTUwyKCkgewotCQlzZXRVcFhNTCgiPHNjcmlwdD48IVtDREFUQVs8L3NjcmlwdD5dXT48L3NjcmlwdD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MMygpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbXV0+PC9zY3JpcHQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDQoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBWyBdXT4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MNSgpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbIF1dXT4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MNigpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbIF1dIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENEQVRBaW5CbG9ja1hNTDcoKSB7Ci0JCXNldFVwWE1MKCI8c2NyaXB0PjwhW0NEQVRBWyAiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q0RBVEFpbkJsb2NrWE1MOCgpIHsKLQkJc2V0VXBYTUwoIjxzY3JpcHQ+PCFbQ0RBVEFbIik7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgY29tbWVudHMgYmV0d2VlbiBYTUwgY29udGVudAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb21tZW50c19KU1AoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gImEgPCEtLSAtLT48IS0tLS0+PCUtLSAtLSU+IGIiOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMywgMiwgMywgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDMpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgY29tbWVudHMgYmV0d2VlbiBKU1AgY29udGVudAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb21tZW50c19YTUwoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gImEgPCEtLSAtLT48PCEtLS0tPmIiOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwWE1MKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMywgMSwgMiwgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU59KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHRlc3RDb250ZW50KElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBzaW1wbGUgY29udGVudCBzY2FubmluZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50SlNQKCkgewotCi0JCXRlc3RDb250ZW50KHNldFVwSlNQKCJoZWxsbyB3b3JsZCIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q29udGVudFhNTCgpIHsKLQotCQl0ZXN0Q29udGVudChzZXRVcFhNTCgiaGVsbG8gd29ybGQiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvbGxhcnNpZ25fTGVhZGluZygpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIiQgXCIvPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2xsYXJzaWduX1NpbmdsZSgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIiRcIi8+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvbGxhcnNpZ25fU2luZ2xlV2l0aFNwYWNlcygpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIiAkIFwiLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RUxpbkNvbnRlbnQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIiR7b3V0LmZvb30iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCXNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDApKSwgMyk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoMCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEVMdG9sZXJhbmNlX3RyYW5zcGFyZW5jeV9EcXVvdGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9XCIke291dC5mb299XCIvPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlzaXplQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25Db3VudCgoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLCA1KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQl0eXBlQ2hlY2sgJj0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RUx0b2xlcmFuY2VfdHJhbnNwYXJlbmN5X0RxdW90ZVdpdGhTcGFjZXMoKSB7Ci0JCS8vIG5vdGU6IHdoaXRlc3BhY2Ugb24gZWl0aGVyIHNpZGUgcmV0dXJucyBhIFdISVRFX1NQQUNFIGNvbnRleHQKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIl8ke291dC5mb299X1wiLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJc2l6ZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNyk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NMT1NFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEV9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVMdG9sZXJhbmNlX3RyYW5zcGFyZW5jeV9TcXVvdGUoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjxhIHR5cGU9JyR7b3V0LmZvb30nLz4iKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJc2l6ZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9TUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FTF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRUxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0VMX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9TUVVPVEV9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkSlNQRGVjbGFyYXRpb24oKSB7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiY29udGVudCA8Zm9vIGJhcj1cIjwlISBpbnQgZm9vOyAlPlwiIGJhej1cImlsXCI+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA5fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0UsfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0RFQ0xBUkFUSU9OX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5XSElURV9TUEFDRX19KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkSlNQRGVjbGFyYXRpb25JbkNEQVRBKCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8IVtDREFUQVs8JSElPl1dPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117M30pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9DTE9TRSx9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0RFQ0xBUkFUSU9OX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DTE9TRX19KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkSlNQRXhwcmVzc2lvbigpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiY29udGVudCA8Zm9vIGJhcj1cIjwlPSBcIkhlbGxvLCBXb3JsZFwiJT5cIiBiYXo9XCJpbFwiPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgOX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFLH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FWFBSRVNTSU9OX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5XSElURV9TUEFDRX19KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtYmVkZGVkSlNQRXhwcmVzc2lvbkluQ0RBVEEoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AoIjwhW0NEQVRBWzwlPSU+XV0+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXszfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX0NMT1NFLH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRVhQUkVTU0lPTl9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUFNjcmlwdGxldCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiY29udGVudCA8Zm9vIGJhcj1cIjwlICAlPlwiIGJhej1cImlsXCI+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA5fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0UsfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1NDUklQVExFVF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuV0hJVEVfU1BBQ0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUFNjcmlwdGxldEluQ0RBVEEoKSB7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPCFbQ0RBVEFbPCUlPl1dPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117M30pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DREFUQV9DTE9TRSx9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1NDUklQVExFVF9PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ0xPU0V9fSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZFRhZ0luQXR0cigpIHsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCI8YSBocmVmPVwiPGpzcDpnZXRQcm9wZXJ0eS8+XCI+Iik7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0UsIERPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URX19KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUF9ESFRNTGltcG9ydCgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGE+IDw/aW1wb3J0IHR5cGU9XCJmb29cIj4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MywgMSwgNn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2RlcywgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUF9QSSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiYmVnaW4gPD9waHAgYXNkYTtsc2dqYWxnO2xhc2psYWpnbGFqc2xrYWpsZ2Fqc2xqZ2FsamdsYWo/PmVuZCI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA0LCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DT05URU5ULCBET01SZWdpb25Db250ZXh0LlhNTF9QSV9DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BBbXBlcnNhbmRJblRhZ05hbWVJbkF0dFZhbHVlKCkgewotCQlTdHJpbmcgdGV4dCA9ICI8YSBocmVmPVwiPGEmYj5cIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezcsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQgKHRhZykiLCBzaXplQ2hlY2spOwotCQlzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDQpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCAoYnJva2VuIGVtYmVkZGVkIHRhZykiLCBzaXplQ2hlY2spOwotCi0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAodGFnKSIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5VTkRFRklORUR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAoYnJva2VuIGVtYmVkZGVkIHRhZykiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIChjb250ZW50KSIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMsIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BDb21tZW50SW5YTUxDb21tZW50KCkgewotCQlTdHJpbmcgdGV4dCA9ICJzPCEtLVxuPCUtLWMtLSU+XG4tLT5cbjxodG1sPlxuPGJvZHk+PHNjcmlwdD4gPCUtLWMtLSU+IDwvc2NyaXB0PlxuIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDUsIDEsIDMsIDEsIDMsIDMsIDMsIDMsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlpbnQgaXRlbSA9IDA7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX1RFWFQsCi0JCQkJCQkJCURPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfQ0xPU0V9LCBuZXcgU3RyaW5nW11bXXt7RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfVEVYVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTU1FTlRfQ0xPU0V9fSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JCQkJCSYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja0NvbXBsZXhSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVH0sIG5ldyBTdHJpbmdbXVtde3tET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9PUEVOLAotCQkJCQkJCQlET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9URVhULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfQ09NTUVOVF9DTE9TRX19KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQQ29tbWVudEF0U3RhcnRPZlhNTENvbW1lbnRBbmRCbG9ja1RhZygpIHsKLQkJU3RyaW5nIHRleHQgPSAiczwhLS08JS0tYy0tJT5cbi0tPlxuPGh0bWw+XG48Ym9keT48c2NyaXB0PjwlLS1jLS0lPiA8L3NjcmlwdD5cbiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA0LCAxLCAzLCAxLCAzLCAzLCAyLCAzLCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJaW50IGl0ZW0gPSAwOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTU1FTlRfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5YTUxfQ09NTUVOVF9URVhULCBET01SZWdpb25Db250ZXh0LlhNTF9DT01NRU5UX0NMT1NFfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX0NMT1NFfX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayA9IHR5cGVDaGVjayAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhUfSwgbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX0NMT1NFfX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayA9IHR5cGVDaGVjayAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BDb21tZW50aW5YTUxUYWcoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gInM8YSA8JS0tYy0tJT4gYj1jLz5cbiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCA3LCAxfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJaW50IGl0ZW0gPSAwOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbShpdGVtKyspLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJdHlwZUNoZWNrID0gdHlwZUNoZWNrICYmIGNoZWNrQ29tcGxleFJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oaXRlbSsrKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0sbmV3IFN0cmluZ1tdW117e0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX1RFWFQsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT01NRU5UX0NMT1NFLCBET01SZWdpb25Db250ZXh0LldISVRFX1NQQUNFfX0pOwotCQl0eXBlQ2hlY2sgPSB0eXBlQ2hlY2sgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKGl0ZW0rKykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayB0aGF0IGpzcDpkaXJlY3RpdmUuKGluY2x1ZGV8cGFnZXx0YWdsaWIpIGFyZSByZWNvZ25pemVkIGFuZAotCSAqIHRyZWF0ZWQgcHJvcGVybHkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRGlyZWN0aXZlVGFncygpIHsKLQkJU3RyaW5nIHRleHQgPSAiYmVnaW4gPGpzcDpkaXJlY3RpdmUudGFnbGliPiA8anNwOmRpcmVjdGl2ZS5wYWdlIGE+IDxqc3A6ZGlyZWN0aXZlLmluY2x1ZGUgYT0+IDxqc3A6ZGlyZWN0aXZlLnBhZ2VzIGE9Yj4gZW5kIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDEsIDQsIDEsIDUsIDEsIDYsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRElSRUNUSVZFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDMpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfRElSRUNUSVZFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ESVJFQ1RJVkVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkKLQkJCQkJJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDYpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRG9sbGFyc2lnbl9UcmFpbGluZygpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT1cIiAkXCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUERvbGxhcnNpZ25fVHJhaWxpbmdJbkNvbnRlbnQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIm5ubiQ8YSB0eXBlPVwiICRcIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDEsIDZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKGNvbnRlbnQpIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAoY29udGVudCkiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayAodGFnKSIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQ2hlY2sgSlNQIGNvZGUgc2VjdGlvbnMgYmV0d2VlbiBIVE1MIGNvbnRlbnQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQRXhwcmVzc2lvbigpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiYmVnaW4gPCU9IFwiSGVsbG8sV29ybGRcIiAlPiBlbmQiKTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDEsIDEsIDEsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9FWFBSRVNTSU9OX09QRU59KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUEdyZWF0ZXJUaGFuSW5BdHRWYWx1ZSgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCgiPGEgdHlwZT1cIj5uZXh0XCIvPiIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBpcyBub3Qgc29tcGxlIiwgIShub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkgaW5zdGFuY2VvZiBJVGV4dFJlZ2lvbkNvbnRhaW5lcikpOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQSW52YWxpZFRhZ05hbWVJbkF0dFZhbHVlKCkgewotCQlTdHJpbmcgdGV4dCA9ICJTPGEgdHlwZT1cImE8NFwiLz4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgNn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCAodGFnKSIsIHNpemVDaGVjayk7Ci0JCXNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50IChhdHQgdmFsdWUpIiwgc2l6ZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKHRhZykiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKGF0dCB2YWx1ZSkiLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1BMZXNzVGhhbkluQXR0VmFsdWUoKSB7Ci0JCS8vIGJhaWxzIG91dCBvZiB0aGUgYXR0cmlidXRlIHZhbHVlIHdpdGggYW4gVU5ERUZJTkVEIHJlZ2lvbiBmb3IgdGhlCi0JCS8vIGVuZCBxdW90ZQotCQlTdHJpbmcgdGV4dCA9ICI8YnV0dG9uIGxhYmVsPVwiPHByZXZpb3VzXCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudCgoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLCA0KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQgKGF0dCB2YWx1ZSkiLCBzaXplQ2hlY2spOwotCQlib29sZWFuIHR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRX0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoNCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFX0RRVU9URSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlVOREVGSU5FRH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIChhdHQgdmFsdWUpIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TGVuZ3RocygwLCBub2Rlcy5pdGVtKDApLCB0ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBDaGVjayBKU1AgY29kZSBzZWN0aW9ucywgYXMgYSB0YWcsIHNjYW5uaW5nIGJldHdlZW4gSFRNTCBjb250ZW50Ci0JICovCi0JLy8gcHVibGljIHZvaWQgdGVzdEpTUFNjcmlwdGxldFRhZygpIHsKLQkvLyBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCJiZWdpbiA8anNwOnNjcmlwdGxldD4KLQkvLyBpbnQgZm9vID0gYmFyOyAvLzxqc3A6U2NyaXB0bGV0Pi8vPC9qc3A6c2NyaXB0bGV0czwvanNwOnNjcmlwdGxldD4KLQkvLyBlbmQiKTsKLQkvLwkKLQkvLyBib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMywgMSwKLQkvLyAzLAotCS8vIDF9KTsKLQkvLyBhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsCi0JLy8gc2l6ZUNoZWNrKTsKLQkvLwotCS8vIGJvb2xlYW4gdHlwZUNoZWNrID0KLQkvLyBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDEpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLAotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLAotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5UfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMykuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MUmVnaW9uQ29udGV4dC5YTUxfRU5EX1RBR19PUEVOLAotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLAotCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9DT05URU5UfSk7Ci0JLy8gYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JLy8JCQotCS8vIHZlcmlmeU1vZGVsTGVuZ3RoKCk7Ci0JLy8gfQotCS8qKgotCSAqIENoZWNrIEpTUCBjb2RlIHNlY3Rpb25zLCBhcyBhIHRhZywgc2Nhbm5pbmcgYmV0d2VlbiBIVE1MIGNvbnRlbnQKLQkgKi8KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0SlNQVGV4dFRhZygpIHsKLQkvLyBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCJiZWdpbiA8anNwOnRleHQ+IGludAotCS8vIGZvbwotCS8vID0gYmFyOyAvLzxqc3A6VEVYVD4vLzwvanNwOlRleHRzPC9qc3A6dGV4dD4gPGE+IDwvYT4gZW5kIik7Ci0JLy8JCi0JLy8gYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDMsIDEsCi0JLy8gMywKLQkvLyAxLCAzLCAxLCAzLCAxfSk7Ci0JLy8gYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLAotCS8vIHNpemVDaGVjayk7Ci0JLy8KLQkvLyBib29sZWFuIHR5cGVDaGVjayA9Ci0JLy8gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9DT05URU5UfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19PUEVOLAotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfTkFNRSwKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0NMT1NFfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX0NEQVRBX1RFWFR9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgzKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfRU5EX1RBR19PUEVOLAotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfTkFNRSwKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0NMT1NFfSkKLQkvLyAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117Ci0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX0NPTlRFTlR9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg1KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX09QRU4sCi0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19OQU1FLAotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQ0xPU0V9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg2KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfQ09OVEVOVH0pCi0JLy8gJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDcpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tdewotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9FTkRfVEFHX09QRU4sCi0JLy8gWE1MSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19OQU1FLAotCS8vIFhNTEpTUFJlZ2lvbkNvbnRleHRzLlhNTF9UQUdfQ0xPU0V9KQotCS8vICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg4KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXsKLQkvLyBYTUxKU1BSZWdpb25Db250ZXh0cy5YTUxfQ09OVEVOVH0pOwotCS8vIGFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCS8vCQkKLQkvLyB2ZXJpZnlNb2RlbExlbmd0aCgpOwotCS8vIH0KLQkvKioKLQkgKiBDaGVjayB0aGF0IGpzcDpyb290IGlzIHJlY29nbml6ZWQgYW5kIHRyZWF0ZWQgcHJvcGVybHkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQUm9vdFRhZygpIHsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKCJiZWdpbiA8anNwOnJvb3Q+IDxqc3A6cm9vdHMgYT4gPGpzcDpyb28gYT0+IDwvanNwOnJvb3QgYT1iPjxhPmVuZCIpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MSwgMywgMSwgNCwgMSwgNSwgMSwgNiwgMywgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ST09UX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgzKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDQpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KQotCQkJCQkmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oNikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSg3KS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9FTkRfVEFHX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9ST09UX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oOSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdmVyaWZ5TW9kZWxMZW5ndGgoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQVGFnSW5BdHRWYWx1ZSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT1cIjxhLz5cIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCQlzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDUpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKHRhZykiLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX0VNUFRZX1RBR19DTE9TRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2sgKGF0dCB2YWx1ZSkiLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm90aGluZ2luQmxvY2tKU1A5KCkgewotCQlTdHJpbmcgdGV4dCA9ICI8c2NyaXB0PiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXszfSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vdGhpbmdpbkJsb2NrWE1MOSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPHNjcmlwdD4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwWE1MKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117M30pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXByaXZhdGUgdm9pZCB0ZXN0U2ltcGxlVGFnKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXsxLCAxMCwgMX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0pICYmIGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgyKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlNb2RlbExlbmd0aCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVUYWdfSlNQKCkgewotCQl0ZXN0U2ltcGxlVGFnKHNldFVwSlNQKCIwIDx0YWduYW1lIGF0dHIxIGF0dHIyPXZhbHVlMiBhdHRyMz1cInZhbHVlM1wiPiAxIikpOwotCX0KLQotCS8qKgotCSAqIENoZWNrIHNpbXBsZSB0YWcgc2Nhbm5pbmcgYmV0d2VlbiBYTUwgY29udGVudAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVUYWdfWE1MKCkgewotCQl0ZXN0U2ltcGxlVGFnKHNldFVwWE1MKCIwIDx0YWduYW1lIGF0dHIxIGF0dHIyPXZhbHVlMiBhdHRyMz1cInZhbHVlM1wiPiAxIikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RWQkxpbkNvbnRlbnQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIiN7b3V0LmZvb30iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117MX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCXNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDApKSwgMyk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfQ09OVEVOVH0pOwotCQlhc3NlcnRUcnVlKCJyZWdpb24gY29udGV4dCB0eXBlIGNoZWNrIiwgdHlwZUNoZWNrKTsKLQkJdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcygoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKS5nZXQoMCkpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RWQkx0b2xlcmFuY2VfdHJhbnNwYXJlbmN5X0RxdW90ZSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT1cIiN7b3V0LmZvb31cIi8+IjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcEpTUCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezZ9KTsKLQkJc2l6ZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnQoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKSwgNSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfRVFVQUxTLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01SZWdpb25Db250ZXh0LlhNTF9FTVBUWV9UQUdfQ0xPU0V9KTsKLQkJdHlwZUNoZWNrICY9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMoKChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgbm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCkuZ2V0KDQpKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEUsIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfT1BFTiwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DT05URU5ULCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX0NMT1NFLCBET01KU1BSZWdpb25Db250ZXh0cy5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRV9EUVVPVEV9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFZCTHRvbGVyYW5jZV90cmFuc3BhcmVuY3lfRHF1b3RlV2l0aFNwYWNlcygpIHsKLQkJLy8gbm90ZTogd2hpdGVzcGFjZSBvbiBlaXRoZXIgc2lkZSByZXR1cm5zIGEgV0hJVEVfU1BBQ0UgY29udGV4dAotCQlTdHJpbmcgdGV4dCA9ICI8YSB0eXBlPVwiXyN7b3V0LmZvb31fXCIvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCXNpemVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDcpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX1ZBTFVFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DTE9TRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfRFFVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RWQkx0b2xlcmFuY2VfdHJhbnNwYXJlbmN5X1NxdW90ZSgpIHsKLQkJU3RyaW5nIHRleHQgPSAiPGEgdHlwZT0nI3tvdXQuZm9vfScvPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBKU1AodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXs2fSk7Ci0JCXNpemVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50KCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSksIDUpOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCXR5cGVDaGVjayAmPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKCgoSVRleHRSZWdpb25Db250YWluZXIpIG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLmdldCg0KSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfU1FVT1RFLCBET01KU1BSZWdpb25Db250ZXh0cy5KU1BfVkJMX09QRU4sIERPTUpTUFJlZ2lvbkNvbnRleHRzLkpTUF9WQkxfQ09OVEVOVCwgRE9NSlNQUmVnaW9uQ29udGV4dHMuSlNQX1ZCTF9DTE9TRSwgRE9NSlNQUmVnaW9uQ29udGV4dHMuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUVfU1FVT1RFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MX0RIVE1MaW1wb3J0KCkgewotCQlTdHJpbmcgdGV4dCA9ICI8YT4gPD9pbXBvcnQgdHlwZT1cImZvb1wiPiI7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzID0gc2V0VXBYTUwodGV4dCk7Ci0JCWJvb2xlYW4gc2l6ZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25Db3VudHMobm9kZXMsIG5ldyBpbnRbXXszLCAxLCA2fSk7Ci0JCWFzc2VydFRydWUoIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYW5kIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJYm9vbGVhbiB0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMCkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX09QRU4sIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQ0xPU0V9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXR5cGVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uVHlwZXMobm9kZXMuaXRlbSgxKS5nZXRSZWdpb25zKCksIG5ldyBTdHJpbmdbXXtET01SZWdpb25Db250ZXh0LlhNTF9DT05URU5UfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl0eXBlQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMikuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfUElfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9FUVVBTFMsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfVkFMVUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLCB0ZXh0KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MX1BJKCkgewotCQlTdHJpbmcgdGV4dCA9ICJiZWdpbiA8P3BocCBhc2RhO2xzZ2phbGc7bGFzamxhamdsYWpzbGthamxnYWpzbGpnYWxqZ2xhaj8+ZW5kIjsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Qgbm9kZXMgPSBzZXRVcFhNTCh0ZXh0KTsKLQkJYm9vbGVhbiBzaXplQ2hlY2sgPSBjaGVja1NpbXBsZVJlZ2lvbkNvdW50cyhub2RlcywgbmV3IGludFtdezEsIDQsIDF9KTsKLQkJYXNzZXJ0VHJ1ZSgiSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBhbmQgSVRleHRSZWdpb24gY291bnQiLCBzaXplQ2hlY2spOwotCi0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KSAmJiBjaGVja1NpbXBsZVJlZ2lvblR5cGVzKG5vZGVzLml0ZW0oMSkuZ2V0UmVnaW9ucygpLCBuZXcgU3RyaW5nW117RE9NUmVnaW9uQ29udGV4dC5YTUxfUElfT1BFTiwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX0NPTlRFTlQsIERPTVJlZ2lvbkNvbnRleHQuWE1MX1BJX0NMT1NFfSkgJiYgY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDIpLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX0NPTlRFTlR9KTsKLQkJYXNzZXJ0VHJ1ZSgicmVnaW9uIGNvbnRleHQgdHlwZSBjaGVjayIsIHR5cGVDaGVjayk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTERvbGxhcnNpZ25fVHJhaWxpbmcoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjxhIHR5cGU9XCIgJFwiLz4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwWE1MKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117Nn0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBJVGV4dFJlZ2lvbiBjb3VudCIsIHNpemVDaGVjayk7Ci0JCWJvb2xlYW4gdHlwZUNoZWNrID0gY2hlY2tTaW1wbGVSZWdpb25UeXBlcyhub2Rlcy5pdGVtKDApLmdldFJlZ2lvbnMoKSwgbmV3IFN0cmluZ1tde0RPTVJlZ2lvbkNvbnRleHQuWE1MX1RBR19PUEVOLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfTkFNRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9OQU1FLCBET01SZWdpb25Db250ZXh0LlhNTF9UQUdfQVRUUklCVVRFX0VRVUFMUywgRE9NUmVnaW9uQ29udGV4dC5YTUxfVEFHX0FUVFJJQlVURV9WQUxVRSwgRE9NUmVnaW9uQ29udGV4dC5YTUxfRU1QVFlfVEFHX0NMT1NFfSk7Ci0JCWFzc2VydFRydWUoInJlZ2lvbiBjb250ZXh0IHR5cGUgY2hlY2siLCB0eXBlQ2hlY2spOwotCQl2ZXJpZnlMZW5ndGhzKDAsIG5vZGVzLml0ZW0oMCksIHRleHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RVbmRlZmluZWRSZWdpb25Db250YWluZXIoKSB7Ci0JCS8vIHNlZSBSQVRMQyBSQVRMQzAwMjg0Nzc2Ci0JCVN0cmluZyB0ZXh0ID0gIjxvcHRpb24gPGVsbXM6aW5wdXRWYWx1ZSB2YWx1ZT1cIjwlPXVvbXZveC51b21JRCU+XCIvPjwlPXVvbXZveC51b21JRC5lcXVhbHModW9tSUQpID8gXCIgc2VsZWN0ZWRcIiA6IFwiXCIlPj4iOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBub2RlcyA9IHNldFVwSlNQKHRleHQpOwotCQlib29sZWFuIHNpemVDaGVjayA9IGNoZWNrU2ltcGxlUmVnaW9uQ291bnRzKG5vZGVzLCBuZXcgaW50W117NX0pOwotCQlhc3NlcnRUcnVlKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGFuZCBvdmVyYWxsIElUZXh0UmVnaW9uIGNvdW50Iiwgc2l6ZUNoZWNrKTsKLQkJLy8gY2hlY2tDb21wbGV4UmVnaW9uVHlwZXMobm9kZXMuaXRlbSgwKS5nZXRSZWdpb25zKCksIG5ldwotCQkvLyBTdHJpbmdbXXtYTUxSZWdpb25Db250ZXh0LlhNTF9UQUdfT1BFTiwKLQkJLy8gWE1MUmVnaW9uQ29udGV4dC5YTUxfVEFHX05BTUUsCi0JCS8vIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19BVFRSSUJVVEVfTkFNRSwKLQkJLy8gWE1MUmVnaW9uQ29udGV4dC5VTkRFRklORUQsIFhNTFJlZ2lvbkNvbnRleHQuWE1MX1RBR19DTE9TRX0sIG5ldwotCQkvLyBTdHJpbmdbXVtdIHt7fX0pOwotCQl2ZXJpZnlFbWJlZGRlZENvbnRhaW5lclBhcmVudGFnZShub2Rlcyk7Ci0JCXZlcmlmeUxlbmd0aHMoMCwgbm9kZXMuaXRlbSgwKSwgdGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5vZGVzCi0JICovCi0JcHJpdmF0ZSB2b2lkIHZlcmlmeUVtYmVkZGVkQ29udGFpbmVyUGFyZW50YWdlKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25MaXN0IG5vZGVzKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbm9kZXMuZ2V0TGVuZ3RoKCk7IGkrKykgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByID0gbm9kZXMuaXRlbShpKTsKLQkJCUlUZXh0UmVnaW9uTGlzdCBsaXN0ID0gci5nZXRSZWdpb25zKCk7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IGxpc3Quc2l6ZSgpOyBqKyspIHsKLQkJCQlJVGV4dFJlZ2lvbiByZWdpb24gPSBsaXN0LmdldChqKTsKLQkJCQlpZiAocmVnaW9uIGluc3RhbmNlb2YgSVRleHRSZWdpb25Db250YWluZXIpIHsKLQkJCQkJYXNzZXJ0Tm90TnVsbCgicGFyZW50IGlzIG51bGwgZm9yICIgKyByZWdpb24sICgoSVRleHRSZWdpb25Db250YWluZXIpIHJlZ2lvbikuZ2V0UGFyZW50KCkpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBib29sZWFuIHZlcmlmeU1vZGVsTGVuZ3RoKCkgewotCQlyZXR1cm4gY2hlY2tNb2RlbExlbmd0aChmTW9kZWwsIGlucHV0Lmxlbmd0aCgpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TY2FubmluZ1Rlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1NjYW5uaW5nVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMzY2YyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1NjYW5uaW5nVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnBhcnNlci5KU1BTb3VyY2VQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5wYXJzZXIuQmxvY2tNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5wYXJzZXIuUmVnaW9uUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkNvbnRhaW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuU3RydWN0dXJlZERvY3VtZW50UmVnaW9uSXRlcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuRGVidWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wYXJzZXIuWE1MU291cmNlUGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5yZWdpb25zLkRPTVJlZ2lvbkNvbnRleHQ7Ci0KLS8qKgotICogdGVzdCBjbGFzcyBmb3IgYmFzaWMgcGFyc2luZyBhbmQgc2Nhbm5pbmcKLSAqLwotCi1wdWJsaWMgY2xhc3MgU2Nhbm5pbmdUZXN0cyB7Ci0JcHJpdmF0ZSBzdGF0aWMgSVN0cnVjdHVyZWREb2N1bWVudCB0ZXh0U3RvcmUgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIGxvbmcgc3RhcnRUaW1lID0gMDsKLQlwcml2YXRlIHN0YXRpYyBsb25nIHN0b3BUaW1lID0gMDsKLQotCS8qKgotCSAqIFNjYW5uaW5nVGVzdHMgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgU2Nhbm5pbmdUZXN0cygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgY2hlY2tOb2RlU2VhbXMoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQ0hFQ0tJTkcgTk9ERSBCT1VOREFSSUVTIEFORCBDT05URU5UUyBGT1IgIiArIGZpbGVOYW1lKTsKLQkJRW51bWVyYXRpb24gZSA9IHBhcnNlRmlsZShmaWxlTmFtZSkuZWxlbWVudHMoKTsKLQkJaW50IGxhc3RFbmQgPSAwOwotCQl3aGlsZSAoZS5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pIGUubmV4dEVsZW1lbnQoKTsKLQkJCWlmIChyLmdldFN0YXJ0T2Zmc2V0KCkgIT0gbGFzdEVuZCkKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SOiBkcm9wcGVkIGluICIgKyByKTsKLQkJCWlmIChyLmdldE51bWJlck9mUmVnaW9ucygpIDwgMSkKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVSUk9SOiBlbXB0eSBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uICIgKyByKTsKLQkJCWxhc3RFbmQgPSByLmdldEVuZE9mZnNldCgpOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiRE9ORSIpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBjaGVja1BhcnNlKFN0cmluZyBmaWxlTmFtZSkgewotCQljaGVja1Rva2VuU2VhbXMoZmlsZU5hbWUpOwotCQljaGVja05vZGVTZWFtcyhmaWxlTmFtZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGNoZWNrVG9rZW5TZWFtcyhTdHJpbmcgZmlsZU5hbWUpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJDSEVDS0lORyBUT0tFTklaRVIgUkVHSU9OIEJPVU5EQVJJRVMgRk9SICIgKyBmaWxlTmFtZSk7Ci0JCUl0ZXJhdG9yIGUgPSB0b2tlbml6ZUZpbGUoZmlsZU5hbWUpLml0ZXJhdG9yKCk7Ci0JCWludCBsYXN0RW5kID0gMDsKLQkJd2hpbGUgKGUuaGFzTmV4dCgpKSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHIgPSAoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbikgZS5uZXh0KCk7Ci0JCQlpZiAoci5nZXRTdGFydE9mZnNldCgpICE9IGxhc3RFbmQpCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJFUlJPUjogZHJvcHBlZCBpbiAiICsgcik7Ci0JCQlsYXN0RW5kID0gci5nZXRFbmRPZmZzZXQoKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkRPTkUiKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGNoYXJbXSBsb2FkQ2hhcnMoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCWNoYXJbXSBjaGFycyA9IG51bGw7Ci0JCWludCBjID0gMDsKLQkJaW50IGxlbmd0aCA9IDA7Ci0JCWludCBjb3VudCA9IDA7Ci0JCUZpbGUgZmlsZSA9IG51bGw7Ci0JCUZpbGVJbnB1dFN0cmVhbSBmaXMgPSBudWxsOwotCQl0cnkgewotCQkJZmlsZSA9IG5ldyBGaWxlKGZpbGVOYW1lKTsKLQkJCWxlbmd0aCA9IChpbnQpIGZpbGUubGVuZ3RoKCk7Ci0JCQljaGFycyA9IG5ldyBjaGFyW2xlbmd0aF07Ci0JCQlmaXMgPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQkJd2hpbGUgKCgoYyA9IGZpcy5yZWFkKCkpID49IDApICYmIChjb3VudCA8IGxlbmd0aCkpIHsKLQkJCQljaGFyc1tjb3VudCsrXSA9IChjaGFyKSBjOwotCQkJfQotCQl9Ci0JCWNhdGNoIChGaWxlTm90Rm91bmRFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJGaWxlIG5vdCBmb3VuZCA6IFwiIiArIGZpbGVOYW1lICsgIlwiIik7Ci0JCQlTeXN0ZW0uZXhpdCgxKTsKLQkJfQotCQljYXRjaCAoQXJyYXlJbmRleE91dE9mQm91bmRzRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVXNhZ2UgOiBqYXZhIEpTUExleGVyMyA8aW5wdXRmaWxlPiIpOwotCQkJU3lzdGVtLmV4aXQoMSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiQW4gSS9PIGVycm9yIG9jY3VyZWQgd2hpbGUgc2Nhbm5pbmcgOiIpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGUpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gY2hhcnM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWdpb25QYXJzZXIgbmV3UGFyc2VyKCkgewotCQlKU1BTb3VyY2VQYXJzZXIgcGFyc2VyID0gbmV3IEpTUFNvdXJjZVBhcnNlcigpOwotCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJmb28iLCBudWxsLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIHRydWUpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigiZ2xvYmFsRm9vIiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCB0cnVlKSk7Ci0JCS8vCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJqc3A6ZXhwcmVzc2lvbiIsIG51bGwsIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCB0cnVlKSk7Ci0JCS8vCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJqc3A6c2NyaXB0bGV0IiwgbnVsbCwgWE1MSlNQUmVnaW9uQ29udGV4dHMuSlNQX0NPTlRFTlQsIHRydWUpKTsKLQkJLy8JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoImpzcDpkZWNsYXJhdGlvbiIsIG51bGwsIFhNTEpTUFJlZ2lvbkNvbnRleHRzLkpTUF9DT05URU5ULCB0cnVlKSk7Ci0JCS8vCQlwYXJzZXIuYWRkQmxvY2tNYXJrZXIobmV3IEJsb2NrTWFya2VyKCJqc3A6dGV4dCIsIG51bGwsIFhNTFJlZ2lvbkNvbnRleHQuWE1MX0NEQVRBX1RFWFQsIHRydWUpKTsKLQkJcmV0dXJuIHBhcnNlcjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFJlZ2lvblBhcnNlciBuZXdYTUxQYXJzZXIoKSB7Ci0JCVhNTFNvdXJjZVBhcnNlciBwYXJzZXIgPSBuZXcgWE1MU291cmNlUGFyc2VyKCk7Ci0JCXBhcnNlci5hZGRCbG9ja01hcmtlcihuZXcgQmxvY2tNYXJrZXIoIlNjcmlwdCIsIERPTVJlZ2lvbkNvbnRleHQuQkxPQ0tfVEVYVCwgZmFsc2UpKTsKLQkJcGFyc2VyLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigic3R5bEUiLCBET01SZWdpb25Db250ZXh0LkJMT0NLX1RFWFQsIGZhbHNlKSk7Ci0JCXJldHVybiBwYXJzZXI7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBWZWN0b3IgcGFyc2UoU3RyaW5nIHN0cmluZ2RhdGEpIHsKLQkJcmV0dXJuIHBhcnNlKHN0cmluZ2RhdGEsIGZhbHNlKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFZlY3RvciBwYXJzZShTdHJpbmcgc3RyaW5nZGF0YSwgYm9vbGVhbiB1c2VYTUwpIHsKLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJfQotCQlSZWdpb25QYXJzZXIgcGFyc2VyID0gbnVsbDsKLQkJaWYgKHVzZVhNTCkKLQkJCXBhcnNlciA9IG5ld1hNTFBhcnNlcigpOwotCQllbHNlCi0JCQlwYXJzZXIgPSBuZXdQYXJzZXIoKTsKLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdG9wVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTY2FubmluZ1Rlc3RzIHNwZW50ICIgKyAoc3RvcFRpbWUgLSBzdGFydFRpbWUpICsgIiAobXNlY3MpIGNyZWF0aW5nIGEgIiArIHBhcnNlci5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0JCX0KLQkJLy8gQ2F1dGlvbjogY2FzdAotCQlwYXJzZXIucmVzZXQobmV3IFN0cmluZ1JlYWRlcihzdHJpbmdkYXRhKSk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYU5vZGUgPSBzZXROb2RlRG9jdW1lbnQocGFyc2VyLmdldERvY3VtZW50UmVnaW9ucygpKTsKLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJfQotCQl0ZXh0U3RvcmUgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKHBhcnNlcik7Ci0JCXRleHRTdG9yZS5zZXRUZXh0KG51bGwsIHN0cmluZ2RhdGEpOwotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25JdGVyYXRvci5zZXRQYXJlbnREb2N1bWVudChhTm9kZSwgdGV4dFN0b3JlKTsKLQkJVmVjdG9yIHYgPSBuZXcgVmVjdG9yKCk7Ci0JCXdoaWxlIChhTm9kZSAhPSBudWxsKSB7Ci0JCQl2LmFkZEVsZW1lbnQoYU5vZGUpOwotCQkJYU5vZGUgPSBhTm9kZS5nZXROZXh0KCk7Ci0JCX0KLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdG9wVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTY2FubmluZ1Rlc3RzIHNwZW50ICIgKyAoc3RvcFRpbWUgLSBzdGFydFRpbWUpICsgIiAobXNlY3MpIHNldHRpbmcgdGV4dCBhbmQgc3RvcmluZyBub2RlcyIpOwotCQl9Ci0JCXJldHVybiB2OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVmVjdG9yIHBhcnNlRmlsZShTdHJpbmcgZmlsZU5hbWUpIHsKLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJfQotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQl9Ci0JCWNoYXJbXSBpbnB1dCA9IGxvYWRDaGFycyhmaWxlTmFtZSk7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RvcFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2Nhbm5pbmdUZXN0cyBzcGVudCAiICsgKHN0b3BUaW1lIC0gc3RhcnRUaW1lKSArICIgKG1zZWNzKSBsb2FkaW5nICIgKyBmaWxlTmFtZSk7Ci0JCX0KLQkJcmV0dXJuIHBhcnNlKG5ldyBTdHJpbmcoaW5wdXQpKTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHNldE5vZGVEb2N1bWVudChJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHN0YXJ0Tm9kZSkgewotCQkvLyBDYXV0aW9uOiBjYXN0Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gYU5vZGUgPSBzdGFydE5vZGU7Ci0JCXdoaWxlIChhTm9kZSAhPSBudWxsKSB7Ci0JCQlhTm9kZS5zZXRQYXJlbnREb2N1bWVudCh0ZXh0U3RvcmUpOwotCQkJYU5vZGUgPSBhTm9kZS5nZXROZXh0KCk7Ci0JCX0KLQkJcmV0dXJuIHN0YXJ0Tm9kZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgdG9rZW5pemVGaWxlKFN0cmluZyBmaWxlTmFtZSkgewotCQlMaXN0IHYgPSBudWxsOwotCQlTdHJpbmdCdWZmZXIgYnVmZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJdHJ5IHsKLQkJCS8vY2hhcltdIGlucHV0ID0gbG9hZENoYXJzKGZpbGVOYW1lKTsKLQkJCVJlYWRlciBpbnB1dCA9IG5ldyBGaWxlUmVhZGVyKGZpbGVOYW1lKTsKLQkJCVJlZ2lvblBhcnNlciBwYXJzZXIgPSBuZXdQYXJzZXIoKTsKLQkJCS8vIHBhcnNlciBtdXN0IGJlIGdpdmVuIGlucHV0LCBiZWZvcmUgdG9rZW5pemVyIGlzIHZhbGlkCi0JCQlwYXJzZXIucmVzZXQoaW5wdXQpOwotCQkJaW50IGMgPSAwOwotCQkJcGFyc2VyLmdldERvY3VtZW50UmVnaW9ucygpOwotCQkJdiA9IHBhcnNlci5nZXRSZWdpb25zKCk7Ci0JCQlpbnB1dC5yZXNldCgpOwotCQkJd2hpbGUgKChjID0gaW5wdXQucmVhZCgpKSA+PSAwKSB7Ci0JCQkJYnVmZi5hcHBlbmQoKGNoYXIpIGMpOwotCQkJfQotCQkJdGV4dFN0b3JlID0gU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRJbnN0YW5jZShwYXJzZXIpOwotCQkJdGV4dFN0b3JlLnNldFRleHQobnVsbCwgYnVmZi50b1N0cmluZygpKTsKLQkJfQotCQljYXRjaCAoRmlsZU5vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRmlsZSBub3QgZm91bmQgOiBcIiIgKyBmaWxlTmFtZSArICJcIiIpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCX0KLQkJY2F0Y2ggKEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlVzYWdlIDogamF2YSBKU1BMZXhlcjMgPGlucHV0ZmlsZT4iKTsKLQkJfQotCQlyZXR1cm4gdjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB2aWV3YWJsZVRva2VuaXplV2l0aFNlcGFyYXRvcihTdHJpbmcgZGF0YSkgewotCQlTdHJpbmdCdWZmZXIgcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJcy5hcHBlbmQoIlwiIik7Ci0JCXMuYXBwZW5kKGRhdGEpOwotCQlzLmFwcGVuZCgiXCJcbiIpOwotCQlzLmFwcGVuZCh2aWV3YWJsZVRva2VuaXplKGRhdGEpKTsKLQkJcy5hcHBlbmQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQkJcmV0dXJuIHMudG9TdHJpbmcoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB2aWV3YWJsZVRva2VuaXplKFN0cmluZyBzdHJpbmdkYXRhKSB7Ci0JCXJldHVybiB2aWV3YWJsZVRva2VuaXplKHN0cmluZ2RhdGEsIGZhbHNlKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB2aWV3YWJsZVRva2VuaXplKFN0cmluZyBzdHJpbmdkYXRhLCBib29sZWFuIHVzZVhNTCkgewotCQlqYXZhLnV0aWwuTGlzdCBsID0gcGFyc2Uoc3RyaW5nZGF0YSwgdXNlWE1MKTsKLQkJU3RyaW5nIHMgPSAiIjsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsLnNpemUoKTsgaSsrKSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIG5vZGUgPSAoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbikgbC5nZXQoaSk7Ci0JCQl0cnkgewotCQkJCXMgKz0gU3RyaW5nVXRpbHMuZXNjYXBlKG5vZGUudG9TdHJpbmcoKSkgKyAiXG4iOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJcyArPSAiWyIgKyBub2RlLmdldFN0YXJ0KCkgKyAiLCAiICsgbm9kZS5nZXRFbmQoKSArICJdIChVTlBSSU5UQUJMRSAiICsgZSArICIpIjsKLQkJCX0KLQkJCUlUZXh0UmVnaW9uTGlzdCBtID0gbm9kZS5nZXRSZWdpb25zKCk7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IG0uc2l6ZSgpOyBqKyspCi0JCQkJaWYgKG0uZ2V0KGopIGluc3RhbmNlb2YgSVRleHRSZWdpb25Db250YWluZXIpIHsKLQkJCQkJcyA9IHMgKyAiXHQiICsgU3RyaW5nVXRpbHMuZXNjYXBlKG0uZ2V0KGopLnRvU3RyaW5nKCkpICsgIlxuIjsKLQkJCQkJSVRleHRSZWdpb25MaXN0IG4gPSAoKElUZXh0UmVnaW9uQ29udGFpbmVyKSBtLmdldChqKSkuZ2V0UmVnaW9ucygpOwotCQkJCQlmb3IgKGludCBrID0gMDsgayA8IG4uc2l6ZSgpOyBrKyspCi0JCQkJCQlzID0gcyArICJcdFx0IiArIFN0cmluZ1V0aWxzLmVzY2FwZShuLmdldChrKS50b1N0cmluZygpKSArICJcbiI7Ci0JCQkJfQotCQkJCWVsc2UKLQkJCQkJcyA9IHMgKyAiXHQiICsgU3RyaW5nVXRpbHMuZXNjYXBlKG0uZ2V0KGopLnRvU3RyaW5nKCkpICsgIlxuIjsKLQkJfQotCQlyZXR1cm4gczsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyB2aWV3YWJsZVRva2VuaXplRmlsZShTdHJpbmcgZmlsZU5hbWUpIHsKLQkJaWYgKERlYnVnLnBlcmZUZXN0KSB7Ci0JCQlzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJfQotCQlpZiAoRGVidWcucGVyZlRlc3QpIHsKLQkJCXN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQl9Ci0JCWNoYXJbXSBpbnB1dCA9IGxvYWRDaGFycyhmaWxlTmFtZSk7Ci0JCWlmIChEZWJ1Zy5wZXJmVGVzdCkgewotCQkJc3RvcFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU2Nhbm5pbmdUZXN0cyBzcGVudCAiICsgKHN0b3BUaW1lIC0gc3RhcnRUaW1lKSArICIgKG1zZWNzKSBsb2FkaW5nICIgKyBmaWxlTmFtZSk7Ci0JCX0KLQkJcmV0dXJuIHZpZXdhYmxlVG9rZW5pemUobmV3IFN0cmluZyhpbnB1dCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0cnVjdHVyZWREb2N1bWVudFRvRE9NVW5pdFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0cnVjdHVyZWREb2N1bWVudFRvRE9NVW5pdFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhMzkxMDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9vdGhlci9TdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuTmV3RG9jdW1lbnRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5vQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnV0aWwuRGVidWc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5ET01Nb2RlbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotCi1wdWJsaWMgY2xhc3MgU3RydWN0dXJlZERvY3VtZW50VG9ET01Vbml0VGVzdHMgaW1wbGVtZW50cyBJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIgewotCXB1YmxpYyBTdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlTdHJpbmcgZ2V0VGVzdFN0cmluZzEoKSB7Ci0JCXJldHVybiAiPGE+YTxiIC8+YjwvYT4iOyAvLyAtPiA8YT5hYjwvYT47Ci0JfQotCi0JU3RyaW5nIGdldFRlc3RTdHJpbmcyKCkgewotCQlyZXR1cm4gIjxtZW51PlxuPHJuYW1lPlxuTGlhbSdzIENob3dkZXIgSG91c2UgYW5kIEdyaWxsXG48L3JuYW1lPlxuPC9tZW51PiI7Ci0JfQotCi0JU3RyaW5nIGdldFRlc3RTdHJpbmczKCkgewotCQkvLyByZXR1cm4gIiA8P3htbCB2ZXJzaW9uPVwiMS4wXCIgPz5cbgotCQkvLyA8dGVzdFRvcFNpYmxpbmc+PHA+dGV4dDwvcD48L3Rlc3RUb3BTaWJsaW5nPiI7Ci0JCXJldHVybiAiPHRlc3QvPlxuXG4gPGh0bWw+XG48L2h0bWw+IjsKLQl9Ci0KLQlTdHJpbmcgZ2V0VGVzdFN0cmluZzQoKSB7Ci0JCXJldHVybiAiPD94bWwgdmVyc2lvbj1cIjEuMFwiID8+IjsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKiBAcGFyYW0gYXJncwotCSAqICAgICAgICAgICAgamF2YS5sYW5nLlN0cmluZ1tdCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCi0JCXRyeSB7Ci0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cyBpbnN0YW5jZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0cygpOwotCQkJaW5zdGFuY2UudGVzdE5vZGVEZWxldGlvbjQoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIHQpIHsKLQkJCXQucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQl2b2lkIG1ha2VDaGFuZ2UxKElET01Nb2RlbCB0cmVlKSB7Ci0KLQkJLy8JCi0JCS8vIHBpY2sgYSBwYXJlbnQgYW5kIG9uZXMgb2YgaXRzIGNoaWxkcmVuIHRvIGRlbGV0ZQotCQkvLyAobm90ZTogdmFsaWRpdHkgb2YgdGhpcyBjb2RlIGlzIGhpZ2hseSBkZXBlbmRlbnQgb24gaW5wdXQgc3RyaW5nKQotCQlvcmcudzNjLmRvbS5Eb2N1bWVudCBkb20gPSB0cmVlLmdldERvY3VtZW50KCk7Ci0JCU5vZGVMaXN0IG5vZGVzID0gZG9tLmdldENoaWxkTm9kZXMoKTsKLQkJLy8KLQkJLyoKLQkJICogZm9yICJmaXJzdCIgdGVzdCBjYXNlIE5vZGUgdGVzdFBhcmVudE5vZGUgPSBub2Rlcy5pdGVtKDApOyBOb2RlCi0JCSAqIHRlc3RDaGlsZE5vZGUgPSB0ZXN0UGFyZW50Tm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0JCSAqLwotCQkvLyBmb3IgInNlY29uZCIgdGVzdCBjYXNlCi0JCU5vZGUgdGVzdFBhcmVudE5vZGUgPSBub2Rlcy5pdGVtKDApOwotCQlOb2RlIHRlc3RDaGlsZE5vZGUgPSB0ZXN0UGFyZW50Tm9kZS5nZXRGaXJzdENoaWxkKCk7Ci0JCXRlc3RDaGlsZE5vZGUgPSB0ZXN0Q2hpbGROb2RlLmdldE5leHRTaWJsaW5nKCk7Ci0KLQkJdGVzdFBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGVzdENoaWxkTm9kZSk7Ci0KLQl9Ci0KLQl2b2lkIG1ha2VDaGFuZ2UyKElTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50KSB7Ci0KLQkJLy8gZGVsZXRlIHRoZSBhcG9zdHJvcGUgaW4gdGVzdCBzdHJpbmcgLy8gNCwgND8KLQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDE5LCAxLCBudWxsKTsKLQl9Ci0KLQl2b2lkIG1ha2VDaGFuZ2UzKElET01Nb2RlbCB0cmVlKSB7Ci0KLQkJLy8JCi0JCS8vIHBpY2sgYSBwYXJlbnQgYW5kIG9uZXMgb2YgaXRzIGNoaWxkcmVuIHRvIGRlbGV0ZQotCQkvLyAobm90ZTogdmFsaWRpdHkgb2YgdGhpcyBjb2RlIGlzIGhpZ2hseSBkZXBlbmRlbnQgb24gaW5wdXQgc3RyaW5nKQotCQlvcmcudzNjLmRvbS5Eb2N1bWVudCBkb20gPSB0cmVlLmdldERvY3VtZW50KCk7Ci0JCS8vIE5vZGVMaXN0IG5vZGVzID0gZG9tLmdldENoaWxkTm9kZXMoKTsKLQkJLy8KLQkJTm9kZSB0ZXN0Q2hpbGROb2RlID0gZG9tLmdldExhc3RDaGlsZCgpOwotCi0JCWRvbS5yZW1vdmVDaGlsZCh0ZXN0Q2hpbGROb2RlKTsKLQotCX0KLQotCS8qKgotCSAqIG5ld01vZGVsIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIG5ld01vZGVsKE5ld0RvY3VtZW50RXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJuZXdNb2RlbDoiKTsKLQl9Ci0KLQkvKioKLQkgKiBub0NoYW5nZSBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCBub0NoYW5nZShOb0NoYW5nZUV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCS8vIGxvZyBmb3Igbm93LCB1bmxlc3Mgd2UgZmluZCByZWFzb24gbm90IHRvCi0JCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJTdHJ1Y3R1cmVkRG9jdW1lbnRUb0RPTVVuaXRUZXN0czo6bm9DaGFuZ2UgbmVlZHMgdG8gYmUgaW1wbGVtZW50ZWQiKTsKLQl9Ci0KLQkvKioKLQkgKiBub2Rlc1JlcGxhY2VkIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIG5vZGVzUmVwbGFjZWQoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJub2Rlc1JlcGxhY2VkOiIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0TmV3RmxhdE5vZGVzOiIpOwotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdCBmbGF0Tm9kZUxpc3QgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudC5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCk7Ci0JCWludCBsZW4gPSBmbGF0Tm9kZUxpc3QuZ2V0TGVuZ3RoKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJCVN0cmluZyBvdXRTdHJpbmcgPSBmbGF0Tm9kZUxpc3QuaXRlbShpKS50b1N0cmluZygpOwotCQkJb3V0U3RyaW5nID0gU3RyaW5nVXRpbHMuZXNjYXBlKG91dFN0cmluZyk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0XHQiICsgb3V0U3RyaW5nKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0T2xkRmxhdE5vZGVzOiIpOwotCQlmbGF0Tm9kZUxpc3QgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudC5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCk7Ci0JCWxlbiA9IGZsYXROb2RlTGlzdC5nZXRMZW5ndGgoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQkJU3RyaW5nIG91dFN0cmluZyA9IGZsYXROb2RlTGlzdC5pdGVtKGkpLnRvU3RyaW5nKCk7Ci0JCQlvdXRTdHJpbmcgPSBTdHJpbmdVdGlscy5lc2NhcGUob3V0U3RyaW5nKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXHRcdCIgKyBvdXRTdHJpbmcpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogcmVnaW9uQ2hhbmdlZCBtZXRob2QgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgdm9pZCByZWdpb25DaGFuZ2VkKFJlZ2lvbkNoYW5nZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlZ2lvbkNoYW5nZWQ6Iik7Ci0JfQotCi0JLyoqCi0JICogcmVnaW9uc1JlcGxhY2VkIG1ldGhvZCBjb21tZW50LgotCSAqLwotCXB1YmxpYyB2b2lkIHJlZ2lvbnNSZXBsYWNlZChSZWdpb25zUmVwbGFjZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlZ2lvbnNSZXBsYWNlZDoiKTsKLQl9Ci0KLQkvKioKLQkgKiBVbml0IHRlc3QgLS0gdGVzdHMgYmFzaWMgcGFyc2luZyByZXN1bHRzIG9mIGluc2VydGluZyBhIHRlc3Qgc3RyaW5nCi0JICogaW50byBhbiBpbml0aWFsIHN0cmluZy4KLQkgKi8KLQl2b2lkIHRlc3ROb2RlRGVsZXRpb24oKSB7Ci0JCS8vIFN0cmluZyBpbml0aWFsU3RyaW5nID0KLQkJLy8gIjxwYXI+PHg+XG50ZXh0eFxuPC94PlxuPHk+XG50ZXh0eVxuPC95PjwvcGFyPiI7Ci0JCS8vIFN0cmluZyBpbml0aWFsU3RyaW5nID0gIjxwYXI+PHg+dGV4dHg8L3g+PHk+dGV4dHk8L3k+PC9wYXI+IjsKLQkJLy8gdGVzdCBjYXNlcyBmb3IgdHdvIHRleHQgbm9kZXMgbGVmdCB0b2dldGhlciAocmVtb3ZlIDxiLz4pOgotCQkvLyBmaXJzdCBjYXNlIHdvcmtzLCBzZWNvbmQgZG9lc24ndAotCQkvLyBTdHJpbmcgaW5pdGlhbFN0cmluZyA9ICI8YT5hPGIgLz48L2E+IjsgLy8gLT4gPGE+YTwvYT4KLQkJLy8gU3RyaW5nIGluaXRpYWxTdHJpbmcgPSAiPGE+YTxiIC8+YjwvYT4iOyAvLyAtPiA8YT5hYjwvYT4KLQkJLy8gU3RyaW5nIGluaXRpYWxTdHJpbmcgPSBnZXRUZXN0U3RyaW5nMSgpOwotCQlTdHJpbmcgaW5pdGlhbFN0cmluZyA9IGdldFRlc3RTdHJpbmcyKCk7Ci0KLQkJLy8gcHJpbnQgb3V0IHdoYXQgd2UgYWx3YXlzIGNhbgotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0tLS0tLS0tIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBOb2RlIERlbGV0aW9uIik7Ci0JCVN0cmluZyBvdXRTdHJpbmcgPSBTdHJpbmdVdGlscy5lc2NhcGUoaW5pdGlhbFN0cmluZyk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSW5pdGlhbCBTdHJpbmc6ICIgKyBvdXRTdHJpbmcpOwotCQkvLyBhbHdheXMgc3RhcnQgd2l0aCBmcmVzaCBtb2RlbAotCQlJU3RydWN0dXJlZERvY3VtZW50IGYgPSBudWxsOwotCi0JCUlNb2RlbE1hbmFnZXIgbW0gPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQl0cnkgewotCQkJZiA9IG1tLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigiZHVtbXkueG1sIiwgKElucHV0U3RyZWFtKSBudWxsLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gZG8gbm90aGluZywgc2luY2UgZHVtbXkKLQkJfQotCi0KLQkJLy8KLQkJLy8gd2UnbGwgbGlzdGVuIHRvIHN0cnVjdHVyZWREb2N1bWVudCBldmVudHMgdG8gcHJpbnQgb3V0IGRpYWdub3N0aWNzCi0JCWYuYWRkRG9jdW1lbnRDaGFuZ2VkTGlzdGVuZXIodGhpcyk7Ci0JCS8vCi0KLQkJSURPTU1vZGVsIHRyZWUgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0JCWYuYWRkRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKChJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIpIHRyZWUpOwotCi0JCS8vIHNldCB0ZXh0IHRvIHN0cnVjdHVyZWREb2N1bWVudCAod2hpY2ggdXBkYXRlcyB0cmVlKQotCQlmLnNldFRleHQobnVsbCwgaW5pdGlhbFN0cmluZyk7Ci0KLQkJLy8gZHVtcCBpbml0aWFsIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIGluaXRpYWwgZG9tCi0JCURlYnVnRG9jdW1lbnQuZHVtcCh0cmVlLmdldERvY3VtZW50KCkpOwotCQkvLwotCQkvLwotCQkvLyBtYWtlQ2hhbmdlMSh0cmVlKTsKLQkJbWFrZUNoYW5nZTIoZik7Ci0KLQkJLy8gZGlzcGxheSByZXN1bHRpbmcgdGV4dAotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdFN0cmluZyAoZnJvbSBzdHJ1Y3R1cmVkRG9jdW1lbnQpOiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKFN0cmluZ1V0aWxzLmVzY2FwZShmLmdldFRleHQoKSkpOwotCQkvLwotCQkvLwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIERPTQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQotCQkvLwotCi0JfQotCi0JLyoqCi0JICogVW5pdCB0ZXN0IC0tIHRlc3RzIGJhc2ljIHBhcnNpbmcgcmVzdWx0cyBvZiBpbnNlcnRpbmcgYSB0ZXN0IHN0cmluZwotCSAqIGludG8gYW4gaW5pdGlhbCBzdHJpbmcuCi0JICovCi0Jdm9pZCB0ZXN0Tm9kZURlbGV0aW9uMygpIHsKLQkJU3RyaW5nIGluaXRpYWxTdHJpbmcgPSBnZXRUZXN0U3RyaW5nMygpOwotCi0JCS8vIHByaW50IG91dCB3aGF0IHdlIGFsd2F5cyBjYW4KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tLS0tLS0tLSIpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIlRlc3QgTm9kZSBEZWxldGlvbiIpOwotCQlTdHJpbmcgb3V0U3RyaW5nID0gU3RyaW5nVXRpbHMuZXNjYXBlKGluaXRpYWxTdHJpbmcpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkluaXRpYWwgU3RyaW5nOiAiICsgb3V0U3RyaW5nKTsKLQkJLy8gYWx3YXlzIHN0YXJ0IHdpdGggZnJlc2ggbW9kZWwKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBmID0gbnVsbDsKLQotCQlJTW9kZWxNYW5hZ2VyIG1tID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJdHJ5IHsKLQkJCWYgPSBtbS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoImR1bW15LnhtbCIsIChJbnB1dFN0cmVhbSkgbnVsbCwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGRvIG5vdGhpbmcsIHNpbmNlIGR1bW15Ci0JCX0KLQkJLy8KLQkJLy8gd2UnbGwgbGlzdGVuIHRvIHN0cnVjdHVyZWREb2N1bWVudCBldmVudHMgdG8gcHJpbnQgb3V0IGRpYWdub3N0aWNzCi0JCWYuYWRkRG9jdW1lbnRDaGFuZ2VkTGlzdGVuZXIodGhpcyk7Ci0JCS8vCi0KLQkJSURPTU1vZGVsIHRyZWUgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0JCWYuYWRkRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKChJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIpIHRyZWUpOwotCi0JCS8vIHNldCB0ZXh0IHRvIHN0cnVjdHVyZWREb2N1bWVudCAod2hpY2ggdXBkYXRlcyB0cmVlKQotCQlmLnNldFRleHQobnVsbCwgaW5pdGlhbFN0cmluZyk7Ci0KLQkJLy8gZHVtcCBpbml0aWFsIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIGluaXRpYWwgZG9tCi0JCURlYnVnRG9jdW1lbnQuZHVtcCh0cmVlLmdldERvY3VtZW50KCkpOwotCQkvLwotCQkvLwotCQkvLyBtYWtlQ2hhbmdlMSh0cmVlKTsKLQkJbWFrZUNoYW5nZTModHJlZSk7Ci0KLQkJLy8gZGlzcGxheSByZXN1bHRpbmcgdGV4dAotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdFN0cmluZyAoZnJvbSBzdHJ1Y3R1cmVkRG9jdW1lbnQpOiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKFN0cmluZ1V0aWxzLmVzY2FwZShmLmdldFRleHQoKSkpOwotCQkvLwotCQkvLwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIERPTQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQotCQkvLwotCi0JfQotCi0JLyoqCi0JICogVW5pdCB0ZXN0IC0tIHRlc3QgaW5zZXJ0IGZvbGxvd2VkIGJ5IGRlbGV0ZSBhdCBiZWdpbm5pbmcgb2Ygc3RyaW5nLgotCSAqLwotCXZvaWQgdGVzdE5vZGVEZWxldGlvbjQoKSB7Ci0JCVN0cmluZyBpbml0aWFsU3RyaW5nID0gZ2V0VGVzdFN0cmluZzQoKTsKLQotCQkvLyBwcmludCBvdXQgd2hhdCB3ZSBhbHdheXMgY2FuCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0iKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJUZXN0IE5vZGUgSW5zZXJ0IGFuZCBEZWxldGUiKTsKLQkJU3RyaW5nIG91dFN0cmluZyA9IFN0cmluZ1V0aWxzLmVzY2FwZShpbml0aWFsU3RyaW5nKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJbml0aWFsIFN0cmluZzogIiArIG91dFN0cmluZyk7Ci0JCS8vIGFsd2F5cyBzdGFydCB3aXRoIGZyZXNoIG1vZGVsCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZiA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtbSA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCXRyeSB7Ci0JCQlmID0gbW0uY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS54bWwiLCAoSW5wdXRTdHJlYW0pIG51bGwsIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBkbyBub3RoaW5nLCBzaW5jZSBkdW1teQotCQl9Ci0JCS8vCi0JCS8vIHdlJ2xsIGxpc3RlbiB0byBzdHJ1Y3R1cmVkRG9jdW1lbnQgZXZlbnRzIHRvIHByaW50IG91dCBkaWFnbm9zdGljcwotCQlmLmFkZERvY3VtZW50Q2hhbmdlZExpc3RlbmVyKHRoaXMpOwotCQkvLwotCi0JCUlET01Nb2RlbCB0cmVlID0gbmV3IERPTU1vZGVsSW1wbCgpOwotCQlmLmFkZERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcigoSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyKSB0cmVlKTsKLQotCQkvLyBzZXQgdGV4dCB0byBzdHJ1Y3R1cmVkRG9jdW1lbnQgKHdoaWNoIHVwZGF0ZXMgdHJlZSkKLQkJZi5zZXRUZXh0KG51bGwsIGluaXRpYWxTdHJpbmcpOwotCi0JCS8vIGR1bXAgaW5pdGlhbCBzdHJ1Y3R1cmVkRG9jdW1lbnQKLQkJRGVidWcuZHVtcChmKTsKLQkJLy8gZHVtcCBpbml0aWFsIGRvbQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQkJLy8KLQkJLy8KLQkJZi5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiYSIpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiID09PT0gUmVzdWx0cyBhZnRlciBpbnNlcnQiKTsKLQkJLy8gZGlzcGxheSByZXN1bHRpbmcgdGV4dAotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdFN0cmluZyAoZnJvbSBzdHJ1Y3R1cmVkRG9jdW1lbnQpOiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKFN0cmluZ1V0aWxzLmVzY2FwZShmLmdldFRleHQoKSkpOwotCQkvLwotCQkvLwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIERPTQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQotCQkvLwotCi0JCWYucmVwbGFjZVRleHQobnVsbCwgMCwgMSwgIiIpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiID09PT0gUmVzdWx0cyBhZnRlciBkZWxldGUiKTsKLQkJLy8gZGlzcGxheSByZXN1bHRpbmcgdGV4dAotCQlTeXN0ZW0ub3V0LnByaW50bG4oInJlc3VsdFN0cmluZyAoZnJvbSBzdHJ1Y3R1cmVkRG9jdW1lbnQpOiAiKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKFN0cmluZ1V0aWxzLmVzY2FwZShmLmdldFRleHQoKSkpOwotCQkvLwotCQkvLwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIHN0cnVjdHVyZWREb2N1bWVudAotCQlEZWJ1Zy5kdW1wKGYpOwotCQkvLyBkdW1wIHBvc3QgY2hhbmdlIERPTQotCQlEZWJ1Z0RvY3VtZW50LmR1bXAodHJlZS5nZXREb2N1bWVudCgpKTsKLQotCQkvLwotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3R5bGVkVGV4dENvbnRlbnRTcGVjLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0eWxlZFRleHRDb250ZW50U3BlYy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWE2ZTBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3R5bGVkVGV4dENvbnRlbnRTcGVjLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLm90aGVyOwotCi0vKioKLSAqIFVzZSB0aGlzIHRlc3QgY2xhc3MgdG8gdmFsaWRhdGUgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFN0eWxlZFRleHRDb250ZW50Ci0gKiBpbnRlcmZhY2UuIFRvIHBlcmZvcm0gdGhlIHZhbGlkYXRpb24sIGNvcHkgdGhpcyBjbGFzcyB0byB0aGUgcGFja2FnZSB3aGVyZQotICogeW91ciBTdHlsZWRUZXh0Q29udGVudCBpbXBsZW1lbnRhdGlvbiBsaXZlcy4gVGhlbiBzcGVjaWZ5IHRoZSBmdWxseQotICogcXVhbGlmaWVkIG5hbWUgb2YgeW91ciBTdHlsZWRUZXh0Q29udGVudCBjbGFzcyBhcyBhbiBhcmd1bWVudCB0byB0aGUgbWFpbgotICogbWV0aG9kIG9mIHRoaXMgY2xhc3MuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBjbGFzcyBhc3N1bWVzIHRoYXQgeW91ciBTdHlsZWRUZXh0Q29udGVudCBpbXBsZW1lbnRhdGlvbgotICogaGFuZGxlcyB0aGUgZm9sbG93aW5nIGRlbGltaXRlcnM6Ci0gKiAgL3IgL24gL3IvbgotICogIAotICovCi0vLyBUaGlzIGNsYXNzIGNvbWVzIGNvdXJ0ZXN5IG9mIEx5bm5lIEt1ZXMuIE91ciBTdHlsZWRUZXh0Q29udGVudCBmYWlscyB0ZXN0Ci0vLyBjYXNlcyA2eCBvZgotLy8gIlNwZWNpYWwgY2FzZXMiIHNpbmNlIHdlIChub3IgSkZhY2UpIGhhbmRsZSBpbnNlcnRpb24gYmV0d2VlbiBDUiBhbmQgTEYuIEEKLS8vIG1pbm9yIG1vZGlmaWNhdGlvbgotLy8gd2FzIG5lZWRlZCB0byBnZXRDb250ZW50SW5zdGFuY2UgZm9yIG91dCB2ZXJzaW9uIG9mIFN0eWxlVGV4dENvbnRlbnQKLS8vIChTdHJ1Y3R1cmVkRG9jdW1lbnRUb1RleHRBZGFwdGVyKS4KLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZWRUZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dENvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5UZXh0Q2hhbmdlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5UZXh0Q2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uVGV4dENoYW5naW5nRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5NZXNzYWdlQm94OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkRG9jdW1lbnRUb1RleHRBZGFwdGVyOwotCi1wdWJsaWMgY2xhc3MgU3R5bGVkVGV4dENvbnRlbnRTcGVjIGltcGxlbWVudHMgVGV4dENoYW5nZUxpc3RlbmVyIHsKLQlzdGF0aWMgU3RyaW5nIGNvbnRlbnRDbGFzc05hbWU7Ci0Jc3RhdGljIGludCBmYWlsQ291bnQgPSAwOwotCXN0YXRpYyBpbnQgZXJyb3JDb3VudCA9IDA7Ci0JQ2xhc3MgY29udGVudENsYXNzID0gbnVsbDsKLQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50SW5zdGFuY2UgPSBudWxsOwotCWludCB2ZXJpZnkgPSAwOwotCU1ldGhvZCBjdXJyZW50TWV0aG9kID0gbnVsbDsKLQlib29sZWFuIGZhaWxlZCA9IGZhbHNlOwotCVN0eWxlZFRleHQgd2lkZ2V0ID0gbnVsbDsKLQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0KLQlwdWJsaWMgU3R5bGVkVGV4dENvbnRlbnRTcGVjKCkgewotCX0KLQotCXB1YmxpYyB2b2lkIGFzc2VydFdpdGhNZXNzYWdlKFN0cmluZyBtZXNzYWdlLCBib29sZWFuIGNvbmRpdGlvbikgewotCQlTeXN0ZW0ub3V0LnByaW50KCJcdCIgKyBjdXJyZW50TWV0aG9kLmdldE5hbWUoKSArICIgIiArIG1lc3NhZ2UpOwotCQlpZiAoIWNvbmRpdGlvbikKLQkJCWZhaWwobWVzc2FnZSk7Ci0JCWVsc2UKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiIHBhc3NlZCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIGZhaWwoU3RyaW5nIG1lc3NhZ2UpIHsKLQkJZmFpbGVkID0gdHJ1ZTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCIgRkFJTEVEIik7Ci0JCWZhaWxDb3VudCsrOwotCX0KLQotCXB1YmxpYyBTdHlsZWRUZXh0Q29udGVudCBnZXRDb250ZW50SW5zdGFuY2UoKSB7Ci0JCWNvbnRlbnRJbnN0YW5jZS5zZXRUZXh0KCIiKTsKLQkJd2lkZ2V0LnNldENvbnRlbnQoY29udGVudEluc3RhbmNlKTsKLQkJLy8gZHcuIEhhZCB0byBhZGQgZm9yIG91ciBzcGVjaWFsIHZlcnNpb24gb2YgU3R5bGVkVGV4dENvbnRlbnQKLQkJLy8gTmVlZHMgdG8gYmUgcmVtb3ZlZCBmb3IgdGVzdGluZyBqZmFjZSdzIERvY3VtZW50QWRhcHRlcgotCQkoKFN0cnVjdHVyZWREb2N1bWVudFRvVGV4dEFkYXB0ZXIpIGNvbnRlbnRJbnN0YW5jZSkuc2V0V2lkZ2V0KHdpZGdldCk7Ci0JCXJldHVybiBjb250ZW50SW5zdGFuY2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0VGVzdFRleHQoKSB7Ci0JCXJldHVybiAiVGhpcyBpcyB0aGUgZmlyc3QgbGluZS5cclxuIiArICJUaGlzIGlzIHRoZSBzZWNvbmQgbGluZS5cclxuIiArICJUaGlzIGlzIHRoZSB0aGlyZCBsaW5lLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZvdXJ0aCBsaW5lLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZpZnRoIGxpbmUuXHJcbiIgKyAiXHJcbiIgKyAiVGhpcyBpcyB0aGUgZmlyc3QgbGluZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSBzZWNvbmQgbGluZSBhZ2Fpbi5cclxuIiArICJUaGlzIGlzIHRoZSB0aGlyZCBsaW5lIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZvdXJ0aCBsaW5lIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZpZnRoIGxpbmUgYWdhaW4uXHJcbiIgKyAiXHJcbiIgKyAiVGhpcyBpcyB0aGUgZmlyc3QgbGluZSBvbmNlIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIHNlY29uZCBsaW5lIG9uY2UgYWdhaW4uXHJcbiIgKyAiVGhpcyBpcyB0aGUgdGhpcmQgbGluZSBvbmNlIGFnYWluLlxyXG4iICsgIlRoaXMgaXMgdGhlIGZvdXJ0aCBsaW5lIG9uY2UgYWdhaW4uXHJcbiIgKyAiVGhpcyBpcyB0aGUgZmlmdGggbGluZSBvbmNlIGFnYWluLiI7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCQlTdHlsZWRUZXh0Q29udGVudFNwZWMgc3BlYyA9IG5ldyBTdHlsZWRUZXh0Q29udGVudFNwZWMoKTsKLQkJaWYgKGFyZ3MubGVuZ3RoID4gMCkgewotCQkJY29udGVudENsYXNzTmFtZSA9IGFyZ3NbMF07Ci0JCQkvL1N0cmluZyBwYXRoID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmxpYnJhcnkucGF0aCIpOwotCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIkphdmEgTGlicmFyeSBQYXRoOiAiICsgcGF0aCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlNZXNzYWdlQm94IGJveCA9IG5ldyBNZXNzYWdlQm94KGdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLCBTV1QuSUNPTl9FUlJPUik7Ci0JCQlib3guc2V0TWVzc2FnZSgiQ29udGVudCBjbGFzcyBtdXN0IGJlIHNwZWNpZmllZCBhcyBhbiBleGVjdXRpb24gYXJndW1lbnQuIik7IC8vJE5PTi1OTFMtMSQKLQkJCWJveC5vcGVuKCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc3BlYy5ydW4oKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihmYWlsQ291bnQgKyAiIFRFU1QgRkFJTFVSRVMuIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihlcnJvckNvdW50ICsgIiBVTkVYUEVDVEVEIEVSUk9SUy4iKTsKLQl9Ci0KLQlzdGF0aWMgcHJpdmF0ZSBEaXNwbGF5IGdldERpc3BsYXkoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCWlmIChjb250ZW50Q2xhc3NOYW1lLmVxdWFscygiIikpIHsKLQkJCU1lc3NhZ2VCb3ggYm94ID0gbmV3IE1lc3NhZ2VCb3goZ2V0RGlzcGxheSgpLmdldEFjdGl2ZVNoZWxsKCksIFNXVC5JQ09OX0VSUk9SKTsKLQkJCWJveC5zZXRNZXNzYWdlKCJDb250ZW50IGNsYXNzIG11c3QgYmUgc3BlY2lmaWVkIGFzIGFuIGV4ZWN1dGlvbiBhcmd1bWVudC4iKTsgLy8kTk9OLU5MUy0xJAotCQkJYm94Lm9wZW4oKTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoY29udGVudENsYXNzID09IG51bGwpIHsKLQkJCXRyeSB7Ci0JCQkJY29udGVudENsYXNzID0gQ2xhc3MuZm9yTmFtZShjb250ZW50Q2xhc3NOYW1lKTsKLQkJCX0KLQkJCWNhdGNoIChDbGFzc05vdEZvdW5kRXhjZXB0aW9uIGUpIHsKLQkJCQlNZXNzYWdlQm94IGJveCA9IG5ldyBNZXNzYWdlQm94KGdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLCBTV1QuSUNPTl9FUlJPUik7Ci0JCQkJYm94LnNldE1lc3NhZ2UoIkNvbnRlbnQgY2xhc3M6XG4iICsgY29udGVudENsYXNzTmFtZSArICJcbm5vdCBmb3VuZCIpOyAvLyROT04tTkxTLTEkCi0JCQkJYm94Lm9wZW4oKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJdHJ5IHsKLQkJCWNvbnRlbnRJbnN0YW5jZSA9IChTdHlsZWRUZXh0Q29udGVudCkgY29udGVudENsYXNzLm5ld0luc3RhbmNlKCk7Ci0JCX0KLQkJY2F0Y2ggKElsbGVnYWxBY2Nlc3NFeGNlcHRpb24gZSkgewotCQkJTWVzc2FnZUJveCBib3ggPSBuZXcgTWVzc2FnZUJveChnZXREaXNwbGF5KCkuZ2V0QWN0aXZlU2hlbGwoKSwgU1dULklDT05fRVJST1IpOwotCQkJYm94LnNldE1lc3NhZ2UoIlVuYWJsZSB0byBhY2Nlc3MgY29udGVudCBjbGFzczpcbiIgKyBjb250ZW50Q2xhc3NOYW1lKTsgLy8kTk9OLU5MUy0xJAotCQkJYm94Lm9wZW4oKTsKLQkJCXJldHVybjsKLQkJfQotCQljYXRjaCAoSW5zdGFudGlhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlNZXNzYWdlQm94IGJveCA9IG5ldyBNZXNzYWdlQm94KGdldERpc3BsYXkoKS5nZXRBY3RpdmVTaGVsbCgpLCBTV1QuSUNPTl9FUlJPUik7Ci0JCQlib3guc2V0TWVzc2FnZSgiVW5hYmxlIHRvIGluc3RhbnRpYXRlIGNvbnRlbnQgY2xhc3M6XG4iICsgY29udGVudENsYXNzTmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJCWJveC5vcGVuKCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJQ2xhc3MgY2xheno7Ci0JCWNsYXp6ID0gdGhpcy5nZXRDbGFzcygpOwotCQlNZXRob2RbXSBtZXRob2RzID0gY2xhenouZ2V0RGVjbGFyZWRNZXRob2RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewotCQkJc2V0VXAoKTsKLQkJCWN1cnJlbnRNZXRob2QgPSBtZXRob2RzW2ldOwotCQkJZmFpbGVkID0gZmFsc2U7Ci0JCQl0cnkgewotCQkJCWlmIChjdXJyZW50TWV0aG9kLmdldE5hbWUoKS5zdGFydHNXaXRoKCJ0ZXN0XyIpKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY3VycmVudE1ldGhvZC5nZXROYW1lKCkgKyAiLi4uIik7Ci0JCQkJCWN1cnJlbnRNZXRob2QuaW52b2tlKHRoaXMsIG5ldyBPYmplY3RbMF0pOwotCQkJCQlpZiAoIWZhaWxlZCkgewotCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCJQQVNTRUQuIik7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkZBSUxFRCIpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24gZXgpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlx0IiArIGN1cnJlbnRNZXRob2QuZ2V0TmFtZSgpICsgIiBFUlJPUiA9PT4gIiArIGV4LmdldFRhcmdldEV4Y2VwdGlvbigpLnRvU3RyaW5nKCkpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRkFJTEVEIik7Ci0JCQkJZXJyb3JDb3VudCsrOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXHQiICsgY3VycmVudE1ldGhvZC5nZXROYW1lKCkgKyAiIEVSUk9SID09PiAiICsgZXgudG9TdHJpbmcoKSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJGQUlMRUQiKTsKLQkJCQllcnJvckNvdW50Kys7Ci0JCQl9Ci0JCQlpZiAodmVyaWZ5ICE9IDApIHsKLQkJCQl2ZXJpZnkgPSAwOwotCQkJCWNvbnRlbnRJbnN0YW5jZS5yZW1vdmVUZXh0Q2hhbmdlTGlzdGVuZXIodGhpcyk7Ci0JCQl9Ci0JCQl0ZWFyRG93bigpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB7Ci0JCS8vIGNyZWF0ZSBzaGVsbAotCQlzaGVsbCA9IG5ldyBTaGVsbCgpOwotCQlHcmlkTGF5b3V0IGxheW91dCA9IG5ldyBHcmlkTGF5b3V0KCk7Ci0JCWxheW91dC5udW1Db2x1bW5zID0gMTsKLQkJc2hlbGwuc2V0U2l6ZSg1MDAsIDMwMCk7Ci0JCXNoZWxsLnNldExheW91dChsYXlvdXQpOwotCQkvLyBjcmVhdGUgd2lkZ2V0Ci0JCXdpZGdldCA9IG5ldyBTdHlsZWRUZXh0KHNoZWxsLCBTV1QuQk9SREVSIHwgU1dULk1VTFRJIHwgU1dULlZfU0NST0xMIHwgU1dULkhfU0NST0xMKTsKLQkJR3JpZERhdGEgc3BlYyA9IG5ldyBHcmlkRGF0YSgpOwotCQlzcGVjLmhvcml6b250YWxBbGlnbm1lbnQgPSBHcmlkRGF0YS5GSUxMOwotCQlzcGVjLmdyYWJFeGNlc3NIb3Jpem9udGFsU3BhY2UgPSB0cnVlOwotCQlzcGVjLnZlcnRpY2FsQWxpZ25tZW50ID0gR3JpZERhdGEuRklMTDsKLQkJc3BlYy5ncmFiRXhjZXNzVmVydGljYWxTcGFjZSA9IHRydWU7Ci0JCXdpZGdldC5zZXRMYXlvdXREYXRhKHNwZWMpOwotCQlzaGVsbC5vcGVuKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB7Ci0JCWlmIChzaGVsbCAhPSBudWxsICYmICFzaGVsbC5pc0Rpc3Bvc2VkKCkpCi0JCQlzaGVsbC5kaXNwb3NlKCk7Ci0JCXNoZWxsID0gbnVsbDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X0RlbGV0ZSgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQlTdHJpbmcgbmV3VGV4dDsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNiwgMiwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmlhIHRlc3RcciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFjOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImlhIHRlc3QiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDUsIDksICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5cciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIlRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcbmxpbmUgM1xubGluZSA0Iik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyMSwgNywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmlzIGEgdGVzdFxubGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2M6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2U6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygibGluZSAzIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxubGluZSAzXG5saW5lIDQiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDUsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRhOiIsIG5ld1RleHQuZXF1YWxzKCJpcyBhIHRlc3RcbmxpbmUgM1xubGluZSA0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImxpbmUgMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJsaW5lIDQiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxNiwgNywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGY6IiwgbmV3VGV4dC5lcXVhbHMoImlzIGEgdGVzdFxubGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRnOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0aDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJsaW5lIDMiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg5LCA3LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0aToiLCBuZXdUZXh0LmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRqOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDgsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRrOiIsIG5ld1RleHQuZXF1YWxzKCJpIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRsOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImkiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAxLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0bToiLCBuZXdUZXh0LmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRuOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgOSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcblxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjViOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIkwxXHJcbkwyXHJcbkwzXHJcbkw0XHJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNCwgOCwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmE6IiwgbmV3VGV4dC5lcXVhbHMoIkwxXHJcbkw0XHJcbiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkwxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkw0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJcbkwxXHJcbkwyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAxLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YToiLCBuZXdUZXh0LmVxdWFscygiTDFcclxuTDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2I6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMMiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJcbkwxXHJcbkwyXHJcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNywgMiwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuTDFcclxuTDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTDIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXG5MaW5lIDFcbkxpbmUgMlxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCA3LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YToiLCBuZXdUZXh0LmVxdWFscygiXG5MaW5lIDJcbiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjljOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxuTGluZSAyXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDYsIDgsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwYToiLCBuZXdUZXh0LmVxdWFscygiTGluZSAxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMaW5lIDEiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSBvbmUgaXMgc2hvcnRcclxuTGluZSAyIGlzIGEgbG9uZ2VyIGxpbmVcclxuTGluZSAzXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEyLCAxNywgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFhOiIsIG5ld1RleHQuZXF1YWxzKCJMaW5lIG9uZSBpcyBhIGxvbmdlciBsaW5lXHJcbkxpbmUgM1xuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJMaW5lIG9uZSBpcyBhIGxvbmdlciBsaW5lIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjExZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X0VtcHR5KCkgewotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgidGVzdCIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgNCwgIiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfSW5zZXJ0KCkgewotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCVN0cmluZyBuZXdUZXh0OwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAidGVzdFxuICIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgbmV3VGV4dC5lcXVhbHMoInRlc3RcbiBUaGlzXG5pcyBhIHRlc3RcciIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDQpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoInRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIFRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiaXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFmOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgIioqKiAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG4qKiogaXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIioqKiBpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxyXG5MaW5lIDIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJcciIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgbmV3VGV4dC5lcXVhbHMoIlxyTGluZSAxXHJcbkxpbmUgMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2U6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTGluZSAyIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoOSwgMCwgIlxyIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZjoiLCBuZXdUZXh0LmVxdWFscygiXHJMaW5lIDFcclxuXHJMaW5lIDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2c6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozaDoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2k6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZSAxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNqOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozazoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJMaW5lIDIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XHIiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuVGhpc1xuaXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGY6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg3LCAwLCAiXHJcbm5ld0xpbmUiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG5pc1xyXG5uZXdMaW5lIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjViOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJuZXdMaW5lIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiVGhpc1xuaXNcclxubmV3TGluZSBhIHRlc3RcciIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmlzXHJcbm5ld0xpbmUgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA0KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIm5ld0xpbmUgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZmOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIiIpKTsKLQkJLy8gaW5zZXJ0IGF0IGVuZAotCQljb250ZW50LnNldFRleHQoIlRoaXMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDQsIDAsICJcbiAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG4gIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2M6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIgIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xuXG4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2Y6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdoOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3aToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCS8vIGluc2VydCBhdCBiZWdpbm5pbmcKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhhOiIsIG5ld1RleHQuZXF1YWxzKCJcblRoaXMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiVGhpcyIpKTsKLQkJLy8gaW5zZXJ0IHRleHQKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgIioqKiAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlhOiIsIG5ld1RleHQuZXF1YWxzKCJUaGlzXG4qKiogaXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIioqKiBpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgMCwgImxpbmUiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEwYToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xubGluZSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygibGluZSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoOCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTBmOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDkpID09IDEpOwotCQkvLyBpbnNlcnQgYXQgYmVnaW5uaW5nCi0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAibGluZVxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWE6IiwgbmV3VGV4dC5lcXVhbHMoImxpbmVcblRoaXNcbiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygibGluZSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMWU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNSkgPT0gMSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSAxXHJcbkxpbmUgMlxyXG5MaW5lIDMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJcciIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTJhOiIsIG5ld1RleHQuZXF1YWxzKCJcckxpbmUgMVxyXG5MaW5lIDJcclxuTGluZSAzIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDQpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTJkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMmU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTGluZSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJMaW5lIDMiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSAxXG5MaW5lIDJcbkxpbmUgMyIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNywgMCwgIkxpbmUxYVxuTGluZTFiXG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEzYToiLCBuZXdUZXh0LmVxdWFscygiTGluZSAxXG5MaW5lMWFcbkxpbmUxYlxuTGluZSAyXG5MaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2Q6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZTFhIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEzZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJMaW5lMWIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTNmOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIkxpbmUgMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2c6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygiTGluZSAzIikpOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxuTGluZSAyXG5MaW5lIDMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDExLCAwLCAibDFhIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNGE6IiwgbmV3VGV4dC5lcXVhbHMoIkxpbmUgMVxuTGluZWwxYSAyXG5MaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIkxpbmUgMSIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNGQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGluZWwxYSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE0ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJMaW5lIDMiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSAxXG5MaW5lIDIgaXMgYSB2ZXJ5IGxvbmcgbGluZSB0aGF0IHNwYW5zIG1hbnkgd29yZHNcbkxpbmUgMyIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMTksIDAsICJ2ZXJ5LCB2ZXJ5LCAiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1YToiLCBuZXdUZXh0LmVxdWFscygiTGluZSAxXG5MaW5lIDIgaXMgYSB2ZXJ5LCB2ZXJ5LCB2ZXJ5IGxvbmcgbGluZSB0aGF0IHNwYW5zIG1hbnkgd29yZHNcbkxpbmUgMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTGluZSAxIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1ZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJMaW5lIDIgaXMgYSB2ZXJ5LCB2ZXJ5LCB2ZXJ5IGxvbmcgbGluZSB0aGF0IHNwYW5zIG1hbnkgd29yZHMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MTVlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIkxpbmUgMyIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X0xpbmVfQ29udmVyc2lvbigpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxycmVwZWF0XG5lbmRcciIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWY6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMSkgPT0gNSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWc6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygicmVwZWF0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFoOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDIpID09IDE1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxaToiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJlbmQiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWo6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMykgPT0gMjIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFrOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxbDoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSg0KSA9PSAyNik7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xyXG5pcyBhIHRlc3QiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImlzIGEgdGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg0KSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZDoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg1KSA9PSAwKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXHJcbmlzIGEgdGVzdFxyIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2E6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJpcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2M6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMTUpID09IDEpOwotCQljb250ZW50LnNldFRleHQoIlxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YzoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGQ6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMSkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGY6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMikgPT0gMSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXHJcblxuXHJcclxuIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWM6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVlOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVmOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1aDoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWk6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMykgPT0gNCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWo6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVrOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDQpID09IDYpOwotCQljb250ZW50LnNldFRleHQoInRlc3RcclxydGVzdDJcclxyIik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2YjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJ0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZToiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgxKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZjoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJ0ZXN0MiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZzoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgyKSA9PSA2KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2aDoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6Nmk6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMykgPT0gMTIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZqOiIsIGNvbnRlbnQuZ2V0TGluZSg0KS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2azoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSg0KSA9PSAxMyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9MaW5lX1RvX09mZnNldCgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxycmVwZWF0XG5lbmRcciIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFiOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDUpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDIpID09IDE1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgzKSA9PSAyMik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoNCkgPT0gMjYpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcclxuaXMgYSB0ZXN0Iik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMCkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRPZmZzZXRBdExpbmUoMSkgPT0gNik7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNiOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDIpOwotCQljb250ZW50LnNldFRleHQoIlxyXG5cblxyXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDIpID09IDMpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRkOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDMpID09IDQpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRlOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDQpID09IDYpOwotCQljb250ZW50LnNldFRleHQoIlxyXG50ZXN0XHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjViOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDEpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDIpID09IDgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RfT2Zmc2V0X1RvX0xpbmUoKSB7Ci0JCVN0eWxlZFRleHRDb250ZW50IGNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RccnJlcGVhdFxuZW5kXHIiKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgzKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg0KSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgyNSkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMjYpID09IDQpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcclxuaXMgYSB0ZXN0Iik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNSkgPT0gMCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmI6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoNikgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmM6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMTApID09IDEpOwotCQljb250ZW50LnNldFRleHQoIlxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgxKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgyKSA9PSAxKTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxuXG5cclxyXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgwKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgxKSA9PSAwKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgyKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZDoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCgzKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZToiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg0KSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZjoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg1KSA9PSAzKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZzoiLCBjb250ZW50LmdldExpbmVBdE9mZnNldCg2KSA9PSA0KTsKLQkJY29udGVudC5zZXRUZXh0KCJcclxuXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjViOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDEpID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVjOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDIpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVkOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDMpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVlOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDQpID09IDIpOwotCQljb250ZW50LnNldFRleHQoIlxyXHJcclxuXHJcbiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDApID09IDApOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZiOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDEpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZjOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDIpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZkOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDQpID09IDMpOwotCQljb250ZW50LnNldFRleHQoIiIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdhOiIsIGNvbnRlbnQuZ2V0TGluZUF0T2Zmc2V0KDApID09IDApOwotCQljb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGE6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMCkgPT0gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdF9SZXBsYWNlKCkgewotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCVN0cmluZyBuZXdUZXh0OwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCA0LCAiYSIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWE6IiwgbmV3VGV4dC5lcXVhbHMoIlRoaXNcbmEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQljb250ZW50LnNldFRleHQoIlRoaXNcbmlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCAyLCAid2FzIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBuZXdUZXh0LmVxdWFscygiVGhpc1xud2FzIGEgdGVzdFxyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMyk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiVGhpcyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJ3YXMgYSB0ZXN0IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJlOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzIGlzIGEgdGVzdFxyIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCAyLCAid2FzIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYToiLCBuZXdUZXh0LmVxdWFscygiVGhpcyB3YXMgYSB0ZXN0XHIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJUaGlzIHdhcyBhIHRlc3QiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2Q6IiwgY29udGVudC5nZXRMaW5lQXRPZmZzZXQoMTUpID09IDApOwotCQljb250ZW50LnNldFRleHQoIkxpbmUgMVxuTGluZSAyXG5MaW5lIDMiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDcsICJMYVxuTGJcbiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgbmV3VGV4dC5lcXVhbHMoIkxhXG5MYlxuTGluZSAyXG5MaW5lIDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTGEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGM6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTGIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGQ6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTGluZSAyIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRlOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIkxpbmUgMyIpKTsKLQkJY29udGVudC5zZXRUZXh0KGdldFRlc3RUZXh0KCkpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWludCBzdGFydCA9IGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDYpOwotCQlpbnQgZW5kID0gY29udGVudC5nZXRPZmZzZXRBdExpbmUoMTEpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2Uoc3RhcnQsIGVuZCAtIHN0YXJ0LCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEyKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldExpbmUoNSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lKDYpLmVxdWFscygiIikpOwotCQlzdGFydCA9IGNvbnRlbnQuZ2V0T2Zmc2V0QXRMaW5lKDcpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2Uoc3RhcnQsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkgLSBzdGFydCwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA4KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YToiLCBjb250ZW50LmdldExpbmUoNSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgY29udGVudC5nZXRMaW5lKDYpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVhOiIsIGNvbnRlbnQuZ2V0TGluZSg3KS5lcXVhbHMoIiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X1NwZWNpYWxfQ2FzZXMoKSB7Ci0JCVN0cmluZyBuZXdUZXh0OwotCQlTdHlsZWRUZXh0Q29udGVudCBjb250ZW50ID0gZ2V0Q29udGVudEluc3RhbmNlKCk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MGE6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjowYjoiLCBjb250ZW50LmdldE9mZnNldEF0TGluZSgwKSA9PSAwKTsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYToiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgxLCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyLCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgzLCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZDoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg0LCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZToiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg1LCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg2LCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg3LCAwLCAiXG4iKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxaDoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYToiLCBuZXdUZXh0LmVxdWFscygiXG5UaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJiOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYzoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZDoiLCBuZXdUZXh0LmVxdWFscygiXG5cblRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6MmU6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjJmOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyZzoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMiwgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYToiLCBuZXdUZXh0LmVxdWFscygiXG5cblxuVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozYjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2M6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNkOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZToiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMywgMCwgIlxuIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozZjoiLCBuZXdUZXh0LmVxdWFscygiXG5cblxuXG5UaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNnOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozaDoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6M2k6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNqOiIsIGNvbnRlbnQuZ2V0TGluZSgzKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjozazoiLCBjb250ZW50LmdldExpbmUoNCkuZXF1YWxzKCJUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMywgMSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuXG5cblRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGI6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRjOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZDoiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGU6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDIsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRmOiIsIG5ld1RleHQuZXF1YWxzKCJcblxuVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0ZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NGg6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRpOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoIlRoaXMgaXMgdGhlIGlucHV0L291dHB1dCB0ZXh0IGNvbXBvbmVudC4iKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyLCAwLCAiYSIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgbmV3VGV4dC5lcXVhbHMoIlxuXG5hVGhpcyBpcyB0aGUgaW5wdXQvb3V0cHV0IHRleHQgY29tcG9uZW50LiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWM6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjVkOiIsIGNvbnRlbnQuZ2V0TGluZSgyKS5lcXVhbHMoImFUaGlzIGlzIHRoZSBpbnB1dC9vdXRwdXQgdGV4dCBjb21wb25lbnQuIikpOwotCQkvLyBkZWxldGUgb25seSBwYXJ0IG9mIGEgZGVsaW1pdGVyCi0JCWNvbnRlbnQuc2V0VGV4dCgiTDFcclxuTDJcclxuTDNcclxuTDRcclxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAzLCAiIik7Ci0JCW5ld1RleHQgPSBjb250ZW50LmdldFRleHRSYW5nZSgwLCBjb250ZW50LmdldENoYXJDb3VudCgpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZToiLCBuZXdUZXh0LmVxdWFscygiXG5MMlxyXG5MM1xyXG5MNFxyXG4iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWY6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA1KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1ZzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWg6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiTDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWk6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiTDMiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWo6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiTDQiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NWs6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygiIikpOwotCQkvLyByZXBsYWNlIHBhcnQgb2YgYSBkZWxpbWl0ZXIKLQkJY29udGVudC5zZXRUZXh0KCJMMVxyXG5MMlxyXG5MM1xyXG5MNFxyXG4iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDMsIDEsICJ0ZXN0XG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIG5ld1RleHQuZXF1YWxzKCJMMVxydGVzdFxuTDJcclxuTDNcclxuTDRcclxuIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZiOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gNik7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmM6IiwgY29udGVudC5nZXRMaW5lKDApLmVxdWFscygiTDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6NmQ6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygidGVzdCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZToiLCBjb250ZW50LmdldExpbmUoMikuZXF1YWxzKCJMMiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZjoiLCBjb250ZW50LmdldExpbmUoMykuZXF1YWxzKCJMMyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2ZzoiLCBjb250ZW50LmdldExpbmUoNCkuZXF1YWxzKCJMNCIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo2aDoiLCBjb250ZW50LmdldExpbmUoNSkuZXF1YWxzKCIiKSk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiYWJjXHJcbmRlZiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2E6IiwgbmV3VGV4dC5lcXVhbHMoImFjXHJcbmRlZiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3YjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdjOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImFjIikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoImRlZiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdlOiIsIG5ld1RleHQuZXF1YWxzKCJhXHJcbmRlZiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3ZjoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdnOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2g6IiwgY29udGVudC5nZXRMaW5lKDEpLmVxdWFscygiZGVmIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMiwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2k6IiwgbmV3VGV4dC5lcXVhbHMoImFkZWYiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2o6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSAxKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3azoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJhZGVmIikpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMSwgMSwgIiIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6N2w6IiwgbmV3VGV4dC5lcXVhbHMoImFlZiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3bToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjduOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImFlZiIpKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDEsIDEsICIiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdvOiIsIG5ld1RleHQuZXF1YWxzKCJhZiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo3cDoiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDEpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjdxOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoImFmIikpOwotCQljb250ZW50LnNldFRleHQoImFiYyIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMSwgIjEiKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhhOiIsIGNvbnRlbnQuZ2V0TGluZUNvdW50KCkgPT0gMSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OGI6IiwgbmV3VGV4dC5lcXVhbHMoIjFiYyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCIxYmMiKSk7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJbmV3VGV4dCA9IGNvbnRlbnQuZ2V0VGV4dFJhbmdlKDAsIGNvbnRlbnQuZ2V0Q2hhckNvdW50KCkpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhkOiIsIG5ld1RleHQuZXF1YWxzKCJcbjFiYyIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4ZToiLCBjb250ZW50LmdldExpbmVDb3VudCgpID09IDIpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhmOiIsIGNvbnRlbnQuZ2V0TGluZSgwKS5lcXVhbHMoIiIpKTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4ZzoiLCBjb250ZW50LmdldExpbmUoMSkuZXF1YWxzKCIxYmMiKSk7Ci0JCWNvbnRlbnQgPSBnZXRDb250ZW50SW5zdGFuY2UoKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDAsICJhIik7Ci0JCWNvbnRlbnQuc2V0VGV4dCgicGFja2FnZSB0ZXN0O1xuLyogTGluZSAxXG4gKiBMaW5lIDJcbiAqL1xucHVibGljIGNsYXNzIFNpbXBsZUNsYXNzIHtcbn0iKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDE0LCAyMywgIlx0LypMaW5lIDFcblx0ICogTGluZSAyXG5cdCAqLyIpOwotCQluZXdUZXh0ID0gY29udGVudC5nZXRUZXh0UmFuZ2UoMCwgY29udGVudC5nZXRDaGFyQ291bnQoKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWE6IiwgbmV3VGV4dC5lcXVhbHMoInBhY2thZ2UgdGVzdDtcblx0LypMaW5lIDFcblx0ICogTGluZSAyXG5cdCAqL1xucHVibGljIGNsYXNzIFNpbXBsZUNsYXNzIHtcbn0iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWI6IiwgY29udGVudC5nZXRMaW5lQ291bnQoKSA9PSA2KTsKLQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YzoiLCBjb250ZW50LmdldExpbmUoMCkuZXF1YWxzKCJwYWNrYWdlIHRlc3Q7IikpOwotCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjlkOiIsIGNvbnRlbnQuZ2V0TGluZSgxKS5lcXVhbHMoIlx0LypMaW5lIDEiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWU6IiwgY29udGVudC5nZXRMaW5lKDIpLmVxdWFscygiXHQgKiBMaW5lIDIiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWY6IiwgY29udGVudC5nZXRMaW5lKDMpLmVxdWFscygiXHQgKi8iKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWc6IiwgY29udGVudC5nZXRMaW5lKDQpLmVxdWFscygicHVibGljIGNsYXNzIFNpbXBsZUNsYXNzIHsiKSk7Ci0JCWFzc2VydFdpdGhNZXNzYWdlKCI6OWg6IiwgY29udGVudC5nZXRMaW5lKDUpLmVxdWFscygifSIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0X1RleHRfQ2hhbmdlZF9FdmVudCgpIHsKLQkJU3R5bGVkVGV4dENvbnRlbnQgY29udGVudCA9IGdldENvbnRlbnRJbnN0YW5jZSgpOwotCQljb250ZW50LmFkZFRleHRDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKLQkJdmVyaWZ5ID0gMTsKLQkJY29udGVudC5zZXRUZXh0KCJ0ZXN0aW5nIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAwLCAiXG4iKTsKLQkJdmVyaWZ5ID0gMjsKLQkJY29udGVudC5zZXRUZXh0KCJcblxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgwLCAyLCAiYSIpOwotCQl2ZXJpZnkgPSAzOwotCQljb250ZW50LnNldFRleHQoImEiKTsKLQkJY29udGVudC5yZXBsYWNlVGV4dFJhbmdlKDAsIDEsICJcblxuIik7Ci0JCXZlcmlmeSA9IDU7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTGluZSAxXHJcbkxpbmUgMiIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMCwgMCwgIlxyIik7Ci0JCXZlcmlmeSA9IDY7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiVGhpc1xuaXMgYSB0ZXN0XG5saW5lIDNcbmxpbmUgNCIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoMjEsIDcsICIiKTsKLQkJdmVyaWZ5ID0gNzsKLQkJY29udGVudC5zZXRUZXh0KCJUaGlzXG5pcyBhIHRlc3RcciIpOwotCQljb250ZW50LnJlcGxhY2VUZXh0UmFuZ2UoNSwgOSwgIiIpOwotCQl2ZXJpZnkgPSA4OwotCQljb250ZW50LnNldFRleHQoIlxuTDFcclxuTDJcclxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSg3LCAyLCAiIik7Ci0JCXZlcmlmeSA9IDk7Ci0JCWNvbnRlbnQuc2V0VGV4dCgiTDFcclxuIik7Ci0JCWNvbnRlbnQucmVwbGFjZVRleHRSYW5nZSgyLCAyLCAidGVzdCIpOwotCQl2ZXJpZnkgPSAwOwotCQljb250ZW50LnJlbW92ZVRleHRDaGFuZ2VMaXN0ZW5lcih0aGlzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXh0Q2hhbmdlZChUZXh0Q2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JfQotCi0JcHVibGljIHZvaWQgdGV4dENoYW5naW5nKFRleHRDaGFuZ2luZ0V2ZW50IGV2ZW50KSB7Ci0JCXN3aXRjaCAodmVyaWZ5KSB7Ci0JCQljYXNlIDEgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxYToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjFiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MmE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAyKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoyYjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMyA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjNhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6M2I6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDIpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDQgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo0YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjRiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA1IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6NWE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo1YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNiA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjZhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6NmI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDggOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo4YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDEpOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjhiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA5IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6OWE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAxKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjo5YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTAgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxMGI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDExIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTFiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAwKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxMiA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjEyYjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTMgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2E6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxM2I6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE0IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTRiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNSA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDEpOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE1YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTYgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNmE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxNmI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDEpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE3IDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTdhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MTdiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxOCA6Ci0JCQkJewotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE4YToiLCBldmVudC5yZXBsYWNlTGluZUNvdW50ID09IDApOwotCQkJCQlhc3NlcnRXaXRoTWVzc2FnZSgiOjE4YjoiLCBldmVudC5uZXdMaW5lQ291bnQgPT0gMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTkgOgotCQkJCXsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxOWE6IiwgZXZlbnQucmVwbGFjZUxpbmVDb3VudCA9PSAwKTsKLQkJCQkJYXNzZXJ0V2l0aE1lc3NhZ2UoIjoxOWI6IiwgZXZlbnQubmV3TGluZUNvdW50ID09IDQpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDIwIDoKLQkJCQl7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MjBhOiIsIGV2ZW50LnJlcGxhY2VMaW5lQ291bnQgPT0gMCk7Ci0JCQkJCWFzc2VydFdpdGhNZXNzYWdlKCI6MjBiOiIsIGV2ZW50Lm5ld0xpbmVDb3VudCA9PSAyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGV4dFNldChUZXh0Q2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3R5bGVkVGV4dFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvU3R5bGVkVGV4dFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg3NmY0OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1N0eWxlZFRleHRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMub3RoZXI7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5CdXR0b247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5FdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLQotLyoqCi0gKiBJbnNlcnQgdGhlIHR5cGUncyBkZXNjcmlwdGlvbiBoZXJlLgotICogQ3JlYXRpb24gZGF0ZTogKDMvMjAvMjAwMSA2OjE5OjU4IFBNKQotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIFN0eWxlZFRleHRUZXN0IHsKLQkvKioKLQkgKiBTdHlsZWRUZXh0VGVzdCBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBTdHlsZWRUZXh0VGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBEb24ndCBmb3JnZXQsIHRoZSAqc3d0Ki5kbGwgd2lsbCBoYXZlIHRvIGJlIGNvcGllZCB0byBwcm9ncmFtIGRpcmVjdG9yeSBmb3IgdGhpcyB0byB3b3JrLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQotCQl0cnkgewotCQkJU2hlbGwgc2hlbGwgPSBuZXcgU2hlbGwoKTsKLQkJCUdyaWRMYXlvdXQgbGF5b3V0ID0gbmV3IEdyaWRMYXlvdXQoKTsKLQkJCXNoZWxsLnNldExheW91dChsYXlvdXQpOwotCi0JCQlCdXR0b24gYnV0dG9uID0gbmV3IEJ1dHRvbihzaGVsbCwgU1dULlBVU0gpOwotCQkJYnV0dG9uLnNldFRleHQoIkFjdGlvbiIpOwotCQkJYnV0dG9uLmFkZExpc3RlbmVyKFNXVC5TZWxlY3Rpb24sIG5ldyBMaXN0ZW5lcigpIHsKLQkJCQlwdWJsaWMgdm9pZCBoYW5kbGVFdmVudChFdmVudCBlKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiYnV0dG9uIHB1c2hlZCIpOwotCQkJCX0KLQkJCX0pOwotCi0JCQlTdHlsZWRUZXh0IHRleHQgPSBuZXcgU3R5bGVkVGV4dChzaGVsbCwgU1dULkJPUkRFUiArIFNXVC5IX1NDUk9MTCArIFNXVC5WX1NDUk9MTCk7Ci0JCQlHcmlkRGF0YSBkYXRhID0gbmV3IEdyaWREYXRhKEdyaWREYXRhLkZJTExfQk9USCk7Ci0JCQl0ZXh0LnNldExheW91dERhdGEoZGF0YSk7Ci0KLQkJCS8vCi0JCQkvLwkJU3RyaW5nIGZpbGVOYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLmRpciIpICsgIlxcIiArICJqYXBhbmVzZV91dGYtMTYudHh0IjsKLQkJCS8vCQlTdHJpbmcgZW5jb2RpbmcgPSAiVW5pY29kZUJpZyI7Ci0KLQkJCVN0cmluZyBmaWxlTmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgidXNlci5kaXIiKSArICJcXCIgKyAiamFwYW5lc2VfY3AxMjUyLnR4dCI7Ci0JCQlTdHJpbmcgZW5jb2RpbmcgPSAiQ3AxMjUyIjsKLQkJCS8vc3VuLmlvLkJ5dGVUb0NoYXJDb252ZXJ0ZXIuZ2V0RGVmYXVsdCgpLnRvU3RyaW5nKCk7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGVzdCBmaWxlOiAiICsgZmlsZU5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICBFbmNvZGluZzogIiArIGVuY29kaW5nKTsKLQotCQkJSW5wdXRTdHJlYW0gaW4gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGVOYW1lKTsKLQkJCUlucHV0U3RyZWFtUmVhZGVyIGluU3RyZWFtID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGluLCBlbmNvZGluZyk7Ci0JCQkvL1JlYWRlciBpblN0cmVhbSA9IG5ldyBGaWxlUmVhZGVyKGZpbGVOYW1lKTsKLQkJCVN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCXdoaWxlIChpblN0cmVhbS5yZWFkeSgpKSB7Ci0JCQkJc2IuYXBwZW5kKChjaGFyKSBpblN0cmVhbS5yZWFkKCkpOwotCQkJfQotCQkJU3RyaW5nIGlucHV0U3RyaW5nID0gc2IudG9TdHJpbmcoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiTGVuZ3RoIG9mIGlucHV0OiAiICsgaW5wdXRTdHJpbmcubGVuZ3RoKCkpOwotCQkJLy8KLQkJCXRleHQuc2V0VGV4dChpbnB1dFN0cmluZyk7Ci0KLQkJCXNoZWxsLnNldFNpemUoNDAwLCAyMDApOwotCQkJc2hlbGwub3BlbigpOwotCi0JCQlEaXNwbGF5IGRpc3BsYXkgPSBzaGVsbC5nZXREaXNwbGF5KCk7Ci0JCQl3aGlsZSAoc2hlbGwgIT0gbnVsbCAmJiAhc2hlbGwuaXNEaXNwb3NlZCgpKSB7Ci0JCQkJaWYgKCFkaXNwbGF5LnJlYWRBbmREaXNwYXRjaCgpKQotCQkJCQlkaXNwbGF5LnNsZWVwKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiB0KSB7Ci0JCQl0LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvVW5pdFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL290aGVyL1VuaXRUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NWE1ZGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvb3RoZXIvVW5pdFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODUxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5vdGhlcjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnBhcnNlci5KU1BTb3VyY2VQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5wYXJzZXIuQmxvY2tNYXJrZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5JU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5OZXdEb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuTm9DaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuU3RydWN0dXJlZERvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25Db250YWluZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb25MaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC51dGlsLkRlYnVnOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5ET01Nb2RlbEltcGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnBhcnNlci5YTUxTb3VyY2VQYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucmVnaW9ucy5ET01SZWdpb25Db250ZXh0OwotCi1wdWJsaWMgY2xhc3MgVW5pdFRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJvdGVjdGVkIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZk1vZGVsOwotCXByb3RlY3RlZCBJRE9NTW9kZWwgdHJlZTsKLQlwcm90ZWN0ZWQgaW50IGV2ZW50Q2FzZSA9IDE7Ci0JcHJvdGVjdGVkIGJvb2xlYW4gZXZlbnRSZXN1bHQ7Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRU5FUklDX05PREVTX1JFUExBQ0VEX0VWRU5UX0NBU0UgPSAxMDAxOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFTkVSSUNfUkVHSU9OU19SRVBMQUNFRF9FVkVOVF9DQVNFID0gMTAwMjsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBHRU5FUklDX1JFR0lPTl9DSEFOR0VEX0VWRU5UX0NBU0UgPSAxMDAzOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFTkVSSUNfTkVXX01PREVMX0VWRU5UX0NBU0UgPSAxMDA0OwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEdFTkVSSUNfTk9fQ0hBTkdFX0VWRU5UX0NBU0UgPSAxMDA1OwotCi0JcHJvdGVjdGVkIGNsYXNzIFN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyUHJveHkgaW1wbGVtZW50cyBJU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXIgewotCQlwdWJsaWMgdm9pZCBuZXdNb2RlbChOZXdEb2N1bWVudEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQloYW5kbGVFdmVudChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBub0NoYW5nZShOb0NoYW5nZUV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQloYW5kbGVFdmVudChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBub2Rlc1JlcGxhY2VkKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQloYW5kbGVFdmVudChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZWdpb25DaGFuZ2VkKFJlZ2lvbkNoYW5nZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJaGFuZGxlRXZlbnQoc3RydWN0dXJlZERvY3VtZW50RXZlbnQpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVnaW9uc1JlcGxhY2VkKFJlZ2lvbnNSZXBsYWNlZEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQloYW5kbGVFdmVudChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgU3RydWN0dXJlZERvY3VtZW50TGlzdGVuZXJQcm94eSBwcm94eSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lclByb3h5KCk7Ci0KLQkvKioKLQkgKiBNaW5pbWl6YXRpb25UZXN0IGNvbnN0cnVjdG9yIGNvbW1lbnQuCi0JICovCi0JcHVibGljIFVuaXRUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBoYW5kbGVFdmVudChTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQlldmVudFJlc3VsdCA9IGZhbHNlOwotCQlzd2l0Y2ggKGV2ZW50Q2FzZSkgewotCQkJY2FzZSAxIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIE5vQ2hhbmdlRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDIgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgTm9DaGFuZ2VFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMyA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDMgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQlpZiAoMyA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA2IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMCA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCWlmICgyID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJCWlmICgiPEI+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDApLmdldFRleHQoKSkpCi0JCQkJCQkJCQlpZiAoIjwvQj4iLmVxdWFscygoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLml0ZW0oMSkuZ2V0VGV4dCgpKSkgewotCQkJCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDcgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgwID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJaWYgKDEgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA4IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMCA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCWlmICgyID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJCS8vaWYgKCI8Qj4iLmVxdWFscygoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLml0ZW0oMCkuZ2V0VGV4dCgpKSkKLQkJCQkJCQkJLy9pZiAoIjwvQj4iLmVxdWFscygoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLml0ZW0oMSkuZ2V0VGV4dCgpKSkgewotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSA5IDoKLQkJCWNhc2UgMTAgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgyID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJaWYgKDAgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQkJaWYgKCI8VEQ+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDApLmdldFRleHQoKSkpCi0JCQkJCQkJCQlpZiAoIjwvVEQ+Ii5lcXVhbHMoKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5pdGVtKDEpLmdldFRleHQoKSkpCi0JCQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTEgOgotCQkJY2FzZSAxMiA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDIgPT0gKChTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKS5nZXRMZW5ndGgoKSkKLQkJCQkJCQlpZiAoMCA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCQlpZiAoIjxURD4iLmVxdWFscygoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLml0ZW0oMCkuZ2V0VGV4dCgpKSkKLQkJCQkJCQkJCWlmICgiPC9URD4iLmVxdWFscygoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLml0ZW0oMSkuZ2V0VGV4dCgpKSkKLQkJCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxMyA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDMgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1JlZ2lvbnMoKS5zaXplKCkpCi0JCQkJCQkJaWYgKDMgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFJlZ2lvbnMoKS5zaXplKCkpCi0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE0IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMyA9PSAoKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkU3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygpLmdldExlbmd0aCgpKQotCQkJCQkJCWlmICgxID09ICgoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCkuZ2V0TGVuZ3RoKCkpCi0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE1IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCQkJUmVnaW9uQ2hhbmdlZEV2ZW50IHJlZ2lvbkNoYW5nZWRFdmVudCA9IChSZWdpb25DaGFuZ2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50OwotCQkJCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBkb2N1bWVudFJlZ2lvbiA9ICgoUmVnaW9uQ2hhbmdlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCQkJCQlpZiAoImIgIi5lcXVhbHMoZG9jdW1lbnRSZWdpb24uZ2V0RnVsbFRleHQocmVnaW9uQ2hhbmdlZEV2ZW50LmdldFJlZ2lvbigpKSkpIHsKLQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxNiA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJaWYgKDAgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE9sZFJlZ2lvbnMoKS5zaXplKCkpIHsKLQkJCQkJCQlpZiAoMSA9PSAoKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0TmV3UmVnaW9ucygpLnNpemUoKSkgewotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMTcgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWlmICgxID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXRPbGRSZWdpb25zKCkuc2l6ZSgpKSB7Ci0JCQkJCQkJaWYgKDMgPT0gKChSZWdpb25zUmVwbGFjZWRFdmVudCkgc3RydWN0dXJlZERvY3VtZW50RXZlbnQpLmdldE5ld1JlZ2lvbnMoKS5zaXplKCkpIHsKLQkJCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDE4IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlpZiAoMiA9PSAoKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkuZ2V0T2xkUmVnaW9ucygpLnNpemUoKSkgewotCQkJCQkJCWlmICgyID09ICgoUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KS5nZXROZXdSZWdpb25zKCkuc2l6ZSgpKSB7Ci0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAxOSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDIwIDoKLQkJCWNhc2UgMjEgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyMiA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDIzIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyNCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMjUgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDI2IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJLy8gSlNQNQotCQkJY2FzZSAyNyA6Ci0JCQkJewotCQkJCQkvLyBjaGFuZ2VkIDIwMDIsIDkvMTIgdG8gZml0Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyOCA6Ci0JCQkJewotCQkJCQkvLyBjaGFuZ2VkIDIwMDIsIDkvMTIgdG8gZml0Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAyOSA6Ci0JCQkJewotCQkJCQkvLyBjaGFuZ2VkIDIwMDIsIDkvMTIgdG8gZml0Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzMCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCS8vIEpTUDYKLQkJCWNhc2UgMzEgOgotCQkJCXsKLQkJCQkJLy8gY2hhbmdlZCAyMDAyLCA5LzEyIHRvIGZpdAotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzIgOgotCQkJCXsKLQkJCQkJLy8gY2hhbmdlZCAyMDAyLCA5LzEyIHRvIGZpdCAtLSB0aGlzIGlzIGRlZmluaXRlbHkgYSBjaGFuZ2UKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IHJlZ2lvbnNSZXBsYWNlZEV2ZW50ID0gKFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudDsKLQkJCQkJCWlmICgxID09IHJlZ2lvbnNSZXBsYWNlZEV2ZW50LmdldE9sZFJlZ2lvbnMoKS5zaXplKCkpIHsKLQkJCQkJCQlJVGV4dFJlZ2lvbiByZWdpb24gPSByZWdpb25zUmVwbGFjZWRFdmVudC5nZXRPbGRSZWdpb25zKCkuZ2V0KDApOwotCQkJCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24gPSByZWdpb25zUmVwbGFjZWRFdmVudC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJCQkJCQlTdHJpbmcgdGV4dCA9IGRvY3VtZW50UmVnaW9uLmdldFRleHQocmVnaW9uKTsKLQkJCQkJCQlpZiAoIjwlIGFhYSAlPiIuZXF1YWxzKHRleHQpKSB7Ci0JCQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJCQl9Ci0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQllbHNlIGlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBub2Rlc1JlcGxhY2VkRXZlbnQgPSAoU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHN0cnVjdHVyZWREb2N1bWVudEV2ZW50OwotCQkJCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3QgcmVnaW9ucyA9IG5vZGVzUmVwbGFjZWRFdmVudC5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCk7Ci0KLQkJCQkJCWlmICgxID09IHJlZ2lvbnMuZ2V0TGVuZ3RoKCkpIHsKLQkJCQkJCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbiA9IHJlZ2lvbnMuaXRlbSgwKTsKLQkJCQkJCQlTdHJpbmcgdGV4dCA9IHJlZ2lvbi5nZXRUZXh0KCk7Ci0JCQkJCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4odGV4dCk7Ci0JCQkJCQkJaWYgKCI8YzwlIGFhYSAiLmVxdWFscyh0ZXh0KSkgewotCQkJCQkJCQlldmVudFJlc3VsdCA9IHRydWU7Ci0JCQkJCQkJfQotCQkJCQkJfQotCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzMyA6Ci0JCQkJewotCQkJCQkvLyBjaGFuZ2VkIDIwMDIsIDkvMTIgdG8gZml0Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQkvLwkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzNCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJY2FzZSAzNSA6Ci0JCQkJewotCQkJCQkvLyBjaGFuY2VkIHRvIFJlZ2lvbnNSZXBsYWNlZCAyMDAyLCA5LzExIChhdHRyaWJ1dGUgdmFsdWUgdG8gcmVnaW9uIGNvbnRhaW5lcikKLQkJCQkJLy8JCQkJCVN0cmluZyBzdGFydFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGUuZ2lmXCI+PHA+IjsKLQkJCQkJLy8JCQkJCVN0cmluZyBjaGFuZ2VzID0gIjwiOwotCQkJCQkvLwkJCQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZTwuZ2lmXCI+PHA+IjsKLQotCQkJCQkvLwkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgMzYgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgUmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDM3IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSAzOCA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25DaGFuZ2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQljYXNlIDM5IDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgNDAgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWNhc2UgR0VORVJJQ19OT0RFU19SRVBMQUNFRF9FVkVOVF9DQVNFIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSBHRU5FUklDX1JFR0lPTlNfUkVQTEFDRURfRVZFTlRfQ0FTRSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBSZWdpb25zUmVwbGFjZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgR0VORVJJQ19SRUdJT05fQ0hBTkdFRF9FVkVOVF9DQVNFIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIFJlZ2lvbkNoYW5nZWRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCWNhc2UgR0VORVJJQ19ORVdfTU9ERUxfRVZFTlRfQ0FTRSA6Ci0JCQkJewotCQkJCQlpZiAoc3RydWN0dXJlZERvY3VtZW50RXZlbnQgaW5zdGFuY2VvZiBOZXdEb2N1bWVudEV2ZW50KSB7Ci0JCQkJCQlldmVudFJlc3VsdCA9IHRydWU7IC8vIG9rCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJY2FzZSBHRU5FUklDX05PX0NIQU5HRV9FVkVOVF9DQVNFIDoKLQkJCQl7Ci0JCQkJCWlmIChzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBpbnN0YW5jZW9mIE5vQ2hhbmdlRXZlbnQpIHsKLQkJCQkJCWV2ZW50UmVzdWx0ID0gdHJ1ZTsgLy8gb2sKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWRlZmF1bHQgOgotCQkJCXsKLQkJCQkJaWYgKHN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGluc3RhbmNlb2YgTmV3RG9jdW1lbnRFdmVudCkgewotCQkJCQkJZXZlbnRSZXN1bHQgPSB0cnVlOyAvLyBvawotCQkJCQl9Ci0JCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogU3RhcnRzIHRoZSBhcHBsaWNhdGlvbi4KLQkgKiBAcGFyYW0gYXJncyBhbiBhcnJheSBvZiBjb21tYW5kLWxpbmUgYXJndW1lbnRzCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJaWYgKGFyZ3MubGVuZ3RoID09IDApIHsKLQkJCXJ1bkFsbCgpOwotCQl9Ci0JCWVsc2UgaWYgKGFyZ3MubGVuZ3RoID09IDEpIHsKLQkJCVN0cmluZyBtZXRob2RUb1J1biA9IGFyZ3NbMF0udHJpbSgpOwotCQkJcnVuT25lKG1ldGhvZFRvUnVuKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBydW5BbGwoKSB7Ci0JCWp1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihzdWl0ZSgpKTsKLQotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBydW5PbmUoU3RyaW5nIG1ldGhvZE5hbWUpIHsKLQkJVGVzdFN1aXRlIHRlc3RTdWl0ZSA9IG5ldyBUZXN0U3VpdGUoKTsKLQkJVGVzdENhc2UgdGVzdCA9IG5ldyBVbml0VGVzdHMobWV0aG9kTmFtZSk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0KHRlc3QpOwotCQlqdW5pdC50ZXh0dWkuVGVzdFJ1bm5lci5ydW4odGVzdFN1aXRlKTsKLQotCX0KLQotCS8qKgotCSAqIFNldCB1cCBhbiBYTUwgbW9kZWwKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcFhNTCgpIHsKLQotCQlJTW9kZWxNYW5hZ2VyIG1tID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJdHJ5IHsKLQkJCWZNb2RlbCA9IG1tLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigiZHVtbXkueG1sIiwgKElucHV0U3RyZWFtKSBudWxsLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gZG8gbm90aGluZywgc2luY2UgZHVtbXkKLQkJfQotCQlmTW9kZWwuYWRkRG9jdW1lbnRDaGFuZ2VkTGlzdGVuZXIocHJveHkpOwotCi0JCXRyZWUgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0KLQkJaWYgKHRyZWUgIT0gbnVsbCkgewotCQkJZk1vZGVsLmFkZERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcigoSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyKSB0cmVlKTsKLQkJCXRyZWUuc2V0U3RydWN0dXJlZERvY3VtZW50KGZNb2RlbCk7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqIFNldCB1cCBhIEpTUCBtb2RlbAotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwSlNQKCkgewotCi0JCUlNb2RlbE1hbmFnZXIgbW0gPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQl0cnkgewotCQkJZk1vZGVsID0gbW0uY3JlYXRlU3RydWN0dXJlZERvY3VtZW50Rm9yKCJkdW1teS5qc3AiLCAoSW5wdXRTdHJlYW0pIG51bGwsIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBkbyBub3RoaW5nLCBzaW5jZSBkdW1teQotCQl9Ci0JCWZNb2RlbCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IEpTUFNvdXJjZVBhcnNlcigpKTsKLQotCQlmTW9kZWwuYWRkRG9jdW1lbnRDaGFuZ2VkTGlzdGVuZXIocHJveHkpOwotCi0JCXRyZWUgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0KLQkJaWYgKHRyZWUgIT0gbnVsbCkgewotCQkJZk1vZGVsLmFkZERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcigoSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyKSB0cmVlKTsKLQkJCXRyZWUuc2V0U3RydWN0dXJlZERvY3VtZW50KGZNb2RlbCk7Ci0JCX0KLQotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHNpbXBsZVRlc3QoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IDk5OwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiIjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPGE+PC9hPiI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT48L2E+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMDsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJLy8KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCS8vCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHNpbXBsZVRlc3QyKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA5OTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjxhPjwvYT4iOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+PC9hPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDA7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCBzaW1wbGVUZXN0MygpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gOTk7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8YT48L2E+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxhPjwvYT4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAwOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjE2OjAyIFBNKQotCSAqIEByZXR1cm4ganVuaXQuZnJhbWV3b3JrLlRlc3QKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgVGVzdFN1aXRlKFVuaXRUZXN0cy5jbGFzcyk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjI4OjU5IFBNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWxldGVCZWdpbm5pbmcoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDQ7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8R0hJPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxBQkM+PERFRj48R0hJPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAwLCAxMCwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjoyNzozMSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsZXRlRW5kKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAzOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPEFCQz48REVGPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxBQkM+PERFRj48R0hJPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAxMCwgNSwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZCgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19ORVdfTU9ERUxfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZS5naWZcIj48cD4iOwotCQlTdHJpbmcgY2hhbmdlcyA9ICI8IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZTwuZ2lmXCI+PHA+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMTc7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlldmVudENhc2UgPSAzNTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJwYXJ0IDE6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAxOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDM2OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gIiUiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8cD48aW1nIHNyYz1cImZpbGU8JS5naWZcIj48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDE4OwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInBhcnQgMjogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDI6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMzc7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiICI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZTwlIC5naWZcIj48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDE5OwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInBhcnQgMzogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDM6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMzg7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiYWIgIjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPHA+PGltZyBzcmM9XCJmaWxlPCUgYWIgLmdpZlwiPjxwPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMjA7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgicGFydCA0OiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgNDogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSAzOTsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICIlIjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPHA+PGltZyBzcmM9XCJmaWxlPCUgYWIgJS5naWZcIj48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDIzOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInBhcnQgNTogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDU6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gNDA7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiPiI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxwPjxpbWcgc3JjPVwiZmlsZTwlIGFiICU+LmdpZlwiPjxwPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMjQ7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgicGFydCA2OiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgNjogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFbWJlZGRlZEpTUDIoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfUkVHSU9OU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPGEgPmM8L2E+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPCU9IGIgJT4iOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGEgPCU9IGIgJT4+YzwvYT4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAzOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlZXBFbWJlZGRlZEpTUCgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19SRUdJT05TX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8c2NyaXB0PjxhICAgPmM8L2E+PC9zY3JpcHQ+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPCU9IGIgJT4iOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPHNjcmlwdD48YSA8JT0gYiAlPiAgPmM8L2E+PC9zY3JpcHQ+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMTE7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiB0ZXN0UiA9IGZNb2RlbC5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldCgxMSk7Ci0JCVN0cmluZyB0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQoKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPGEgPCU9IGIgJT4gID4iKSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0RnVsbFRleHQoKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPGEgPCU9IGIgJT4gID4iKSk7Ci0KLQkJSVRleHRSZWdpb25MaXN0IHJlZ2lvbkxpc3QgPSB0ZXN0Ui5nZXRSZWdpb25zKCk7Ci0KLQkJSVRleHRSZWdpb24gcmVnaW9uID0gcmVnaW9uTGlzdC5nZXQoMCk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8IikpOwotCi0JCXJlZ2lvbiA9IHJlZ2lvbkxpc3QuZ2V0KDEpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiYSIpKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRGdWxsVGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCJhICIpKTsKLQotCQlyZWdpb24gPSByZWdpb25MaXN0LmdldCgyKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwlPSBiICU+IikpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldEZ1bGxUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwlPSBiICU+ICAiKSk7Ci0KLQkJLy8gPT09CQotCi0JCUlUZXh0UmVnaW9uQ29udGFpbmVyIGNSZWdpb24gPSAoSVRleHRSZWdpb25Db250YWluZXIpIHJlZ2lvbjsKLQotCQlJVGV4dFJlZ2lvbkxpc3QgZVJlZ2lvbnMgPSBjUmVnaW9uLmdldFJlZ2lvbnMoKTsKLQkJSVRleHRSZWdpb24gZVJlZ2lvbiA9IGVSZWdpb25zLmdldCgwKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwlPSIpKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldEZ1bGxUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8JT0iKSk7Ci0KLQkJZVJlZ2lvbiA9IGVSZWdpb25zLmdldCgxKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIiBiICIpKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldEZ1bGxUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCIgYiAiKSk7Ci0KLQkJZVJlZ2lvbiA9IGVSZWdpb25zLmdldCgyKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIiU+IikpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0RnVsbFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIiU+IikpOwotCi0JCWVSZWdpb24gPSBlUmVnaW9ucy5nZXQoMyk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCIiKSk7Ci0JCXRlc3RUZXh0ID0gY1JlZ2lvbi5nZXRGdWxsVGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiICAiKSk7Ci0KLQkJLy8gPT09PQotCi0JCXJlZ2lvbiA9IHJlZ2lvbkxpc3QuZ2V0KDMpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPiIpKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRGdWxsVGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI+IikpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlZXBFbWJlZGRlZEpTUDIoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfUkVHSU9OU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPHNjcmlwdD48YSAgID5jPC9hPjwvc2NyaXB0PiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjwlPSBiICUiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPHNjcmlwdD48YSA8JT0gYiAlICA+YzwvYT48L3NjcmlwdD4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAxMTsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHRlc3RSID0gZk1vZGVsLmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KDExKTsKLQkJU3RyaW5nIHRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dCgpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8YSA8JT0gYiAlICA+IikpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldEZ1bGxUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjxhIDwlPSBiICUgID4iKSk7Ci0KLQkJSVRleHRSZWdpb25MaXN0IHJlZ2lvbkxpc3QgPSB0ZXN0Ui5nZXRSZWdpb25zKCk7Ci0KLQkJSVRleHRSZWdpb24gcmVnaW9uID0gcmVnaW9uTGlzdC5nZXQoMCk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0VGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCI8IikpOwotCi0JCXJlZ2lvbiA9IHJlZ2lvbkxpc3QuZ2V0KDEpOwotCQl0ZXN0VGV4dCA9IHRlc3RSLmdldFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiYSIpKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRGdWxsVGV4dChyZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCJhICIpKTsKLQotCQlyZWdpb24gPSByZWdpb25MaXN0LmdldCgyKTsKLQkJdGVzdFRleHQgPSB0ZXN0Ui5nZXRUZXh0KHJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwlPSBiICUgID4iKSk7Ci0JCXRlc3RUZXh0ID0gdGVzdFIuZ2V0RnVsbFRleHQocmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCU9IGIgJSAgPiIpKTsKLQotCQkvLyA9PT0JCi0KLQkJSVRleHRSZWdpb25Db250YWluZXIgY1JlZ2lvbiA9IChJVGV4dFJlZ2lvbkNvbnRhaW5lcikgcmVnaW9uOwotCi0JCUlUZXh0UmVnaW9uTGlzdCBlUmVnaW9ucyA9IGNSZWdpb24uZ2V0UmVnaW9ucygpOwotCQlJVGV4dFJlZ2lvbiBlUmVnaW9uID0gZVJlZ2lvbnMuZ2V0KDApOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0VGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiPCU9IikpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0RnVsbFRleHQoZVJlZ2lvbik7Ci0JCWFzc2VydFRydWUoInRleHQgcmV0cmlldmUiLCB0ZXN0VGV4dC5lcXVhbHMoIjwlPSIpKTsKLQotCQllUmVnaW9uID0gZVJlZ2lvbnMuZ2V0KDEpOwotCQl0ZXN0VGV4dCA9IGNSZWdpb24uZ2V0VGV4dChlUmVnaW9uKTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCByZXRyaWV2ZSIsIHRlc3RUZXh0LmVxdWFscygiIGIgJSAgPiIpKTsKLQkJdGVzdFRleHQgPSBjUmVnaW9uLmdldEZ1bGxUZXh0KGVSZWdpb24pOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHJldHJpZXZlIiwgdGVzdFRleHQuZXF1YWxzKCIgYiAlICA+IikpOwotCi0KLQkJLy8gPT09PQkKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RGVlcEVtYmVkZGVkSlNQMygpIHsKLQkJLy8gQ01WQyAyNDU1ODYKLQkJLy8gdGhpcyBpcyBhIHRlc3QgdG8gbWFrZSBzdXJlIENvbnRleHRSZWdpb25Db250YWluZXIgcmV0dXJucyB3aGF0IHdlIGV4cGVjdAotCQlzZXRVcEpTUCgpOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPGh0bWw+PGhlYWQ+PHNjcmlwdD4gPCUhIFN0cmluZyB0ZXN0dmFyID0gXCJ0ZXN0dmFyXCI7ICU+IHZhciB0ZXN0ID0gPCU9IHRlc3R2YXIgJT4gPC9zY3JpcHQ+PC9oZWFkPjwvaHRtbD4iOwotCQlTdHJpbmcgZXhwZWN0ZWRUZXh0ID0gIjwlISBTdHJpbmcgdGVzdHZhciA9IFwidGVzdHZhclwiOyAlPiI7Ci0JCSgoWE1MU291cmNlUGFyc2VyKSBmTW9kZWwuZ2V0UGFyc2VyKCkpLmFkZEJsb2NrTWFya2VyKG5ldyBCbG9ja01hcmtlcigic2NyaXB0IiwgbnVsbCwgRE9NUmVnaW9uQ29udGV4dC5CTE9DS19URVhULCBmYWxzZSkpOyAvLyROT04tTkxTLTEkCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwuZ2V0UmVnaW9uTGlzdCgpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc2NyaXB0QmxvY2tSZWdpb24gPSBmTW9kZWwuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoMjEpOwotCQlJVGV4dFJlZ2lvbkxpc3QgYmxvY2tSZWdpb25zID0gc2NyaXB0QmxvY2tSZWdpb24uZ2V0UmVnaW9ucygpOwotCQlJVGV4dFJlZ2lvbkNvbnRhaW5lciBqc3BEZWNsID0gKElUZXh0UmVnaW9uQ29udGFpbmVyKSBibG9ja1JlZ2lvbnMuZ2V0KDEpOwotCQlTdHJpbmcgZnVsbFRleHQgPSBqc3BEZWNsLmdldEZ1bGxUZXh0KCk7Ci0KLQkJLy9hc3NlcnRUcnVlKCJDb250ZXh0UmVnaW9uQ29udGFpbmVyLmdldEZ1bGxUZXh0KCkiLCBmdWxsVGV4dC5lcXVhbHMoZXhwZWN0ZWRUZXh0KSk7Ci0JCWFzc2VydEVxdWFscygiQ29udGV4dFJlZ2lvbkNvbnRhaW5lci5nZXRGdWxsVGV4dCgpIHZhbHVlIGluY29ycmVjdDogIiwgZXhwZWN0ZWRUZXh0LCBmdWxsVGV4dCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUDEoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IDIzOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiYWJjZDwlPSBhYmMgJT5lZmdoIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gImFiY2Q8ICU9IGFiYyAlPmVmZ2giOwotCQlTdHJpbmcgY2hhbmdlcyA9ICIgIjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gNTsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1AyKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSAyNDsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gImFiY2Q8JSBhYmMgJT5lZmdoIjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gImFiY2Q8ICUgYWJjICU+ZWZnaCI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIiAiOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSA1OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUDMoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IDI1OwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPCU9IGFiYyAlPiI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8ICU9IGFiYyAlPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIiAiOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAxOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1A0KCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSAyNjsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlIGFiYyAlPiI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8ICUgYWJjICU+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiICI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDE7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JIEdpdmUgYSBKU1Agc2NyaXB0bGV0IDoKLQkgPCUgYWFhICU+Ci0JIFdoZW4gYW4gdXNlciB0eXBlcyAiPGJiPiIganVzdCBiZWZvcmUKLQkgdGhlIEpTUCBzY3JpcHRsZXQgOgotCSAoMSkgV2hlbiAnPCcgaXMgdHlwZWQsIHJlZ2lvbnNSZXBsYWNlZCgpCi0JIGlzIGNhbGxlZCBmb3IgIjwlIi4KLQkgKDIpIFdoZW4gJ2InIGlzIHR5cGVkLCBub2Rlc1JlcGxhY2VkKCkKLQkgaXMgY2FsbGVkIGZvciAiPDwlIiBhbmQgIiBhYWEgIi4KLQkgKDMpIFdoZW4gJ2InIGlzIHR5cGVkIGFnYWluLCBmaW5hbGx5LAotCSBub2Rlc1JlcGxhY2VkKCkgaXMgY2FsbGVkIGZvcgotCSAiPGI8JSBhYWEiIGFuZCAiJT4iLgotCSBUaGUgZW5kIEpTUCBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHNob3VsZCBiZQotCSByZXBhcnNlZCBhdCAoMSksIGJ1dCBub3Qgd2FpdCB1bnRpbCAoMykuCi0JIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RKU1A1KCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSBHRU5FUklDX05FV19NT0RFTF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPCUgYWFhICU+PHA+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiPCI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8PCUgYWFhICU+PHA+IjsKLQkJaW50IHN0YXJ0T2ZDaGFuZ2VzID0gMDsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWV2ZW50Q2FzZSA9IDI3OwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDE6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAxOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCS8vIHN0ZXAgMgotCQkvLyA/IGRvZXMgYXNzZXJ0VHJ1ZSBwcmV2ZW50IHJlc3QgZnJvbSBleGVjdXRpbmcgaWYgJ2ZhbHNlJz8KLQkJLy8gYW5zOiB5ZXMKLQkJZXZlbnRDYXNlID0gMjg7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiYiI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxiPCUgYWFhICU+PHA+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAxOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDI6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAyOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDI5OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gImIiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8YmI8JSBhYWEgJT48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDI7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0JCWFzc2VydFRydWUoInBhcnQgMzogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDM6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQkJZXZlbnRDYXNlID0gMzA7Ci0JCXN0YXJ0U3RyaW5nID0gZXhwZWN0ZWRTdHJpbmc7Ci0JCWNoYW5nZXMgPSAiPiI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjxiYj48JSBhYWEgJT48cD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDM7Ci0JCWxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlyZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCXJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0JCWFzc2VydFRydWUoInBhcnQgNDogdGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDQ6IGV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JIEV4YW1wbGUgNCkKLQkgCi0JIEdpdmVuIHR3byBKU1Agc2NyaXB0bGV0cyA6Ci0JIDwlIGFhYSAlPjwlIGJiYiAlPgotCSBXaGVuIGFuIHVzZXIgdHlwZXMgIjxjY2NjPiIganVzdCBiZWZvcmUKLQkgdGhlIEpTUCBzY3JpcHRsZXQsIHdhdGNoIHRoZSBJU3RydWN0dXJlZERvY3VtZW50IGV2ZW50cwotCSBvbiBlYWNoIGNoYXJhY3RlciB0eXBpbmcuCi0JIFlvdSB3aWxsIHNlZSB0aGUgbmV4dCBKU1AgSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBpcyByZXBhcnNlZAotCSAodG8gYmUgYnJva2VuIGludG8gb3RoZXIgdHlwZSBvZiBJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uKQotCSBvbmUgYnkgb25lIG9uIGVhY2ggZXZlbnQuCi0JIEJ1dCBpdCBzaG91bGQgYmUgYXQgb25jZSBhdCB0aGUgZmlyc3QgZXZlbnQuCi0JIE9sZCBDb21wb25lbnQ6IHdzYS53ZWIucGFnZWVkaXRpbmcKLQkgTmV3IENvbXBvbmVudDogd3NhLndlYi54bWxlZGl0b3IKLQkgCi0JIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RKU1A2KCkgIHsKLQkJLy8gY2F1dGlvbiAuLi4gd2UncmUgcmUtdXNpbmcgZXZlbnQgY2hlY2tzIGZyb20gSlNQNQotCi0JCXNldFVwSlNQKCk7Ci0KLQkJZXZlbnRDYXNlID0gR0VORVJJQ19ORVdfTU9ERUxfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlIGFhYSAlPjwlIGJiYiAlPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIjwiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPDwlIGFhYSAlPjwlIGJiYiAlPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDA7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQkJZXZlbnRDYXNlID0gMzE7Ci0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDE6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAxOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDMyOwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gImMiOwotCQlleHBlY3RlZFN0cmluZyA9ICI8YzwlIGFhYSAlPjwlIGJiYiAlPiI7Ci0JCXN0YXJ0T2ZDaGFuZ2VzID0gMTsKLQkJbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAyOiB0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInBhcnQgMjogZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQotCQlldmVudENhc2UgPSAzMzsKLQkJc3RhcnRTdHJpbmcgPSBleHBlY3RlZFN0cmluZzsKLQkJY2hhbmdlcyA9ICJjIjsKLQkJZXhwZWN0ZWRTdHJpbmcgPSAiPGNjPCUgYWFhICU+PCUgYmJiICU+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAyOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDM6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCAzOiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWV2ZW50Q2FzZSA9IDM0OwotCQlzdGFydFN0cmluZyA9IGV4cGVjdGVkU3RyaW5nOwotCQljaGFuZ2VzID0gIj4iOwotCQlleHBlY3RlZFN0cmluZyA9ICI8Y2M+PCUgYWFhICU+PCUgYmJiICU+IjsKLQkJc3RhcnRPZkNoYW5nZXMgPSAzOwotCQlsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlyZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCQlhc3NlcnRUcnVlKCJwYXJ0IDQ6IHRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgicGFydCA0OiBldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICogdGhpcyB0ZXN0IGVhc2lseSByZXR1cm5zICJvayIgZXZlbiB3aXRoIHRoZSBuby1zcGFjZSBidWcuIEl0cyBtb3N0bHkgdG8KLQkgKiAiaGFuZCBleGFtaW5lIiB0aGUgc3RydWN0dXJlZERvY3VtZW50IGNyZWF0ZWQgZnJvbSB0aGUgaW5pdGlhbCBzZXRUZXh0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RKU1BEaXJlY3RpdmUoKSAgewotCi0JCXNldFVwSlNQKCk7Ci0JCWV2ZW50Q2FzZSA9IEdFTkVSSUNfTk9ERVNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlQGluY2x1ZGUlPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIlQiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPCVAaW5jbHVkZSU+VCI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDEyOwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJLy8gID8KLQkJLy8JYXNzZXJ0VHJ1ZShyZXN1bHQpOyAvLyAmJiBldmVudFJlc3VsdCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjUzOjA4IFBNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxMCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTA7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8VEQ+PC9URD4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8VEQ+PC9URD48VEQ+PC9URD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgOSwgOSwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTA6NTY6MDQgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDExKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAxMTsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxYWFg+PFREPjwvVEQ+PFhYWD4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8WFhYPjxURD48L1REPjxURD48L1REPjxYWFg+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDUsIDksICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDEwOjU5OjM5IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxMigpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8WFhYPjxURD48L1REPjxYWFg+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFhYWD48VEQ+PC9URD48VEQ+PC9URD48WFhYPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAxNCwgOSwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MDA6NTkgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDEzKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSAxMzsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxBQkM+PEpLTD48R0hJPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxBQkM+PERFRj48R0hJPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA1LCA1LCAiPEpLTD4iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjAyOjE5IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxNCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTQ7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT5cclxyICA8L2E+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPGE+XHI8Yj5cciAgPC9hPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA0LCAzLCAiIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMTowMzo1MyBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTUoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDE1OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+PGIgPjwvYj48L2E+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPGE+PGI+PC9iPjwvYT4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNSwgMCwgIiAiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjA1OjI3IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxNigpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTY7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT48YiB6PjwvYj48L2E+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPGE+PGIgPjwvYj48L2E+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDYsIDAsICJ6Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMTowNjozMyBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTcoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDE3OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPGE+PGIgej1cInRcIj48L2I+PC9hPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxhPjxiIHo+PC9iPjwvYT4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgNiwgMSwgIno9XCJ0XCIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjA5OjE3IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QxOCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMTg7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8YT48YyB6PjwvYj48L2E+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPGE+PGIgej48L2I+PC9hPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCA0LCAzLCAiYyB6Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzIvMjAwMSAxMToxMDozMCBBTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kMTkoKSAgewotCi0JCWV2ZW50Q2FzZSA9IDE5OwotCQlzZXRVcEpTUCgpOwotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPEJPRFk+XHI8SU1HIHNyYz1cIjwlPVxyPC9CT0RZPlxyIik7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8Qk9EWT5ccjxJTUcgc3JjPVwiPCU9UVxyPC9CT0RZPlxyIjsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMjAsIDAsICJRIik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMi8yMDAxIDExOjEyOjA1IEFNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNZXRob2QyMCgpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQotCQlldmVudENhc2UgPSAyMDsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxTVFlMRSBUWVBFPVwidGV4dC9jc3NcIj5ccjwhLS1cckJPRFkge1xyXHJ9LS0+XHI8L1NUWUxFPlxyIjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFNUWUxFIFRZUEU9XCJ0ZXh0L2Nzc1wiPlxyPCEtLVxyLS0+XHI8L1NUWUxFPlxyIik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDI4LCAxLCAiXHJCT0RZIHtcclxyfSIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8yLzIwMDEgMTE6MzI6MjMgQU0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDIxKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCi0JCWV2ZW50Q2FzZSA9IDIxOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPCFET0NUWVBFIEhUTUwgUFVCTElDIFwiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU5cIiBcIlwiPlxyPEhUTUw+XHI8SEVBRD5cciAgICAgIDxNRVRBIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMVwiIGh0dHAtZXF1aXY9XCJDb250ZW50LVR5cGVcIj5ccjxNRVRBIG5hbWU9XCJHRU5FUkFUT1JcIiBjb250ZW50PVwiSUJNIFdlYlNwaGVyZSBQYWdlIERlc2lnbmVyIFY0LjEuMCBmb3IgV2luZG93c1wiPlxyPE1FVEEgY29udGVudD1cInRleHQvY3NzXCIgaHR0cC1lcXVpdj1cIkNvbnRlbnQtU3R5bGUtVHlwZVwiPlxyPFRJVExFPjwvVElUTEU+XHI8U1RZTEUgVFlQRT1cInRleHQvY3NzXCI+XHI8IS0tXHJCT0RZIHtcclxyfS0tPlxyPC9TVFlMRT5cciI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCIgXCJcIj5ccjxIVE1MPlxyPEhFQUQ+XHIgICAgICA8TUVUQSBjb250ZW50PVwidGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTFcIiBodHRwLWVxdWl2PVwiQ29udGVudC1UeXBlXCI+XHI8TUVUQSBuYW1lPVwiR0VORVJBVE9SXCIgY29udGVudD1cIklCTSBXZWJTcGhlcmUgUGFnZSBEZXNpZ25lciBWNC4xLjAgZm9yIFdpbmRvd3NcIj5ccjxNRVRBIGNvbnRlbnQ9XCJ0ZXh0L2Nzc1wiIGh0dHAtZXF1aXY9XCJDb250ZW50LVN0eWxlLVR5cGVcIj5ccjxUSVRMRT48L1RJVExFPlxyPFNUWUxFIFRZUEU9XCJ0ZXh0L2Nzc1wiPlxyPCEtLVxyLS0+XHI8L1NUWUxFPlxyIik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDM0MywgMSwgIlxyQk9EWSB7XHJccn0iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6NDU6MjkgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1ldGhvZDkoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDk7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8VEQ+PC9URD4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8VEQ+PC9URD48VEQ+PC9URD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMCwgOSwgIiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjo0NToyOSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWV0aG9kQXR0cmlidXRlTmFtZVJlcGxhY2UxKCkgIHsKLQotCQkvL3Rlc3RFdmVudCA9IDIyOwotCQkvL3RhZ3MgPSAiPHRhZ05hbWUgYWJjPVwiYnNmXCI+IjsKLQkJLy90ZXN0U3RydWN0dXJlZERvY3VtZW50UmVwbGFjZW1lbnQodGVzdEV2ZW50LCB0YWdzLCAiYWJjZGUiLCI8dGFnTmFtZSBhYmNkZT1cImJzZlwiPiIsIDksIDMpOwotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDIyOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPHRhZ05hbWUgYWJjPVwiYnNmXCI+IjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjx0YWdOYW1lIGFiY2RlPVwiYnNmXCI+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiYWJjZGUiOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSA5OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMzsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjozNTo0MSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kaWZ5TWlkZGxlKCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA1OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPEFCQz48SktMPjxHSEk+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPEFCQz48REVGPjxHSEk+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDAsIDE1LCAiPEFCQz48SktMPjxHSEk+Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjA2OjMzIFBNKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb0NoYW5nZTEoKSAgewotCi0JCXNldFVwWE1MKCk7Ci0JCWV2ZW50Q2FzZSA9IDE7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8QUJDPjxERUY+PEdIST4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8QUJDPjxERUY+PEdIST4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMTAsIDAsICIiKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6MjY6MDUgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vQ2hhbmdlMigpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gMjsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxBQkM+PERFRj48R0hJPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxBQkM+PERFRj48R0hJPiIpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCAwLCAxNSwgIjxBQkM+PERFRj48R0hJPiIpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCX0KLQotCS8qKgotCSAqIEluc2VydCB0aGUgbWV0aG9kJ3MgZGVzY3JpcHRpb24gaGVyZS4KLQkgKiBDcmVhdGlvbiBkYXRlOiAoOC8xLzIwMDEgNjozODoyNSBQTSkKLQkgKiBAZXhjZXB0aW9uIFNvdXJjZUVkaXRpbmdFeGNlcHRpb24gVGhlIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbi4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltaWxhclN0YXJ0KCkgIHsKLQotCQlzZXRVcFhNTCgpOwotCQlldmVudENhc2UgPSA2OwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPFA+PEI+PC9CPjxCPjwvQj48L1A+IjsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCAiPFA+PEI+PC9CPjwvUD4iKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgMywgMCwgIjxCPjwvQj4iKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgiZXZlbnQgdHlwZSIsIGV2ZW50UmVzdWx0KTsKLQl9Ci0KLQkvKioKLQkgKiBJbnNlcnQgdGhlIG1ldGhvZCdzIGRlc2NyaXB0aW9uIGhlcmUuCi0JICogQ3JlYXRpb24gZGF0ZTogKDgvMS8yMDAxIDY6NDM6MjkgUE0pCi0JICogQGV4Y2VwdGlvbiBTb3VyY2VFZGl0aW5nRXhjZXB0aW9uIFRoZSBleGNlcHRpb24gZGVzY3JpcHRpb24uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFNpbWlsYXJTdGFydEVuZCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gODsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxQPjxCPjxCPjwvQj48L0I+PC9QPiI7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgIjxQPjxCPjwvQj48L1A+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDYsIDAsICI8Qj48L0I+Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICogSW5zZXJ0IHRoZSBtZXRob2QncyBkZXNjcmlwdGlvbiBoZXJlLgotCSAqIENyZWF0aW9uIGRhdGU6ICg4LzEvMjAwMSA2OjQxOjQ2IFBNKQotCSAqIEBleGNlcHRpb24gU291cmNlRWRpdGluZ0V4Y2VwdGlvbiBUaGUgZXhjZXB0aW9uIGRlc2NyaXB0aW9uLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTaW1pbGlhckVuZCgpICB7Ci0KLQkJc2V0VXBYTUwoKTsKLQkJZXZlbnRDYXNlID0gNzsKLQkJU3RyaW5nIGV4cGVjdGVkU3RyaW5nID0gIjxQPjxCPjwvQj48UD48UD4iOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsICI8UD48Qj48L0I+PFA+Iik7Ci0KLQkJZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIDEwLCAwLCAiPFA+Iik7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFRhZ1JlRGV0ZWN0aW9uKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQkvLyAobnNkKSAyMDAzLjEyLjEwIC0gY2hhbmdlZCBmcm9tIE5vZGVzUmVwbGFjZWQgdG8gUmVnaW9uc1JlcGxhY2VkIHNpbmNlIHRoZSBzdGFydCBjb25kaXRpb24gd2FzIGNoYW5nZWQKLQkJLy8gZnJvbSBiZWluZyAzIGRvY3VtZW50IHJlZ2lvbnMgdG8gNCBzaW5jZSAic2NyaXB0IiBpcyBub3QgJ25lc3RhYmxlJwotCQkvL2V2ZW50Q2FzZSA9IEdFTkVSSUNfUkVHSU9OU19SRVBMQUNFRF9FVkVOVF9DQVNFOwotCQkKLQkJLy8gcmV2ZXJ0ZWQgMjAwNC4wNC4wNQotCQlldmVudENhc2UgPSBHRU5FUklDX05PREVTX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0vLwkJZXZlbnRDYXNlID0gR0VORVJJQ19SRUdJT05TX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8cD50ZXN0PDxTQ1JJUFQ+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiUyI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8cD50ZXN0PFM8U0NSSVBUPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDg7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQkvLyAgPwlhc3NlcnRUcnVlKHJlc3VsdCk7IC8vICYmIGV2ZW50UmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFRhZ1JlRGV0ZWN0aW9uMigpICB7Ci0KLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gR0VORVJJQ19SRUdJT05fQ0hBTkdFRF9FVkVOVF9DQVNFOwotCQlTdHJpbmcgc3RhcnRTdHJpbmcgPSAiPHA+dGVzdDw8U0NSSVBUPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gIlMiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPHA+dGVzdDw8U0NSSVBUUz4iOwotCQlpbnQgc3RhcnRPZkNoYW5nZXMgPSAxNTsKLQkJaW50IGxlbmd0aFRvUmVwbGFjZSA9IDA7Ci0KLQkJZk1vZGVsLnNldFRleHQobnVsbCwgc3RhcnRTdHJpbmcpOwotCi0JCWZNb2RlbC5yZXBsYWNlVGV4dChudWxsLCBzdGFydE9mQ2hhbmdlcywgbGVuZ3RoVG9SZXBsYWNlLCBjaGFuZ2VzKTsKLQkJU3RyaW5nIHJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0KLQkJYm9vbGVhbiByZXN1bHQgPSAoZXhwZWN0ZWRTdHJpbmcuZXF1YWxzKHJlc3VsdFN0cmluZykpOwotCi0JCS8vCWFzc2VydFRydWUocmVzdWx0KTsgLy8gJiYgZXZlbnRSZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJ0ZXh0IHVwZGF0ZSIsIHJlc3VsdCk7Ci0JCWFzc2VydFRydWUoImV2ZW50IHR5cGUiLCBldmVudFJlc3VsdCk7Ci0KLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VGFnUmVEZXRlY3Rpb24zKCkgIHsKLQotCQlzZXRVcEpTUCgpOwotCQlldmVudENhc2UgPSBHRU5FUklDX05PREVTX1JFUExBQ0VEX0VWRU5UX0NBU0U7Ci0JCVN0cmluZyBzdGFydFN0cmluZyA9ICI8cD50ZXN0PHRlc3Q+IjsKLQkJU3RyaW5nIGNoYW5nZXMgPSAiJSI7Ci0JCVN0cmluZyBleHBlY3RlZFN0cmluZyA9ICI8cD50ZXN0PCV0ZXN0PiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDg7Ci0JCWludCBsZW5ndGhUb1JlcGxhY2UgPSAwOwotCi0JCWZNb2RlbC5zZXRUZXh0KG51bGwsIHN0YXJ0U3RyaW5nKTsKLQotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCVN0cmluZyByZXN1bHRTdHJpbmcgPSBmTW9kZWwuZ2V0VGV4dCgpOwotCi0JCWJvb2xlYW4gcmVzdWx0ID0gKGV4cGVjdGVkU3RyaW5nLmVxdWFscyhyZXN1bHRTdHJpbmcpKTsKLQotCQkvLwlhc3NlcnRUcnVlKHJlc3VsdCk7IC8vICYmIGV2ZW50UmVzdWx0KTsKLQkJYXNzZXJ0VHJ1ZSgidGV4dCB1cGRhdGUiLCByZXN1bHQpOwotCQlhc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JfQotCi0JLyoqCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2UjdGVhckRvd24oKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCWlmIChmTW9kZWwgIT0gbnVsbCkKLQkJCWZNb2RlbC5yZW1vdmVEb2N1bWVudENoYW5nZWRMaXN0ZW5lcihwcm94eSk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotCSAqLwotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFBhZ2VEaXJlY3RpdmUoKSAgewotCQlib29sZWFuIHZlcmJvc2UgPSBmYWxzZTsKLQkJc2V0VXBKU1AoKTsKLQkJZXZlbnRDYXNlID0gOTk5OyAvL0dFTkVSSUNfTk9ERVNfUkVQTEFDRURfRVZFTlRfQ0FTRTsKLQkJU3RyaW5nIHN0YXJ0U3RyaW5nID0gIjwlQHBhZ2UgbGFuZz1cImphdmFcIiA8U0NSSVBUPnZhciA8JSB0ZXN0ICU+IFN0cmluZzwvU0NSSVBUPiI7Ci0JCVN0cmluZyBjaGFuZ2VzID0gInMiOwotCQlTdHJpbmcgZXhwZWN0ZWRTdHJpbmcgPSAiPCVAcGFnZSBsYW5nPVwiamF2YXNcIiA8U0NSSVBUPnZhciA8JSB0ZXN0ICU+IFN0cmluZzwvU0NSSVBUPiI7Ci0JCWludCBzdGFydE9mQ2hhbmdlcyA9IDE4OwotCQlpbnQgbGVuZ3RoVG9SZXBsYWNlID0gMDsKLQotCQlmTW9kZWwuc2V0VGV4dChudWxsLCBzdGFydFN0cmluZyk7Ci0KLQkJaWYgKHZlcmJvc2UpIHsKLQkJCURlYnVnLmR1bXAoZk1vZGVsLCB0cnVlKTsKLQkJfQotCi0JCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50ID0gZk1vZGVsLnJlcGxhY2VUZXh0KG51bGwsIHN0YXJ0T2ZDaGFuZ2VzLCBsZW5ndGhUb1JlcGxhY2UsIGNoYW5nZXMpOwotCQlTdHJpbmcgcmVzdWx0U3RyaW5nID0gZk1vZGVsLmdldFRleHQoKTsKLQotCQlib29sZWFuIHJlc3VsdCA9IChleHBlY3RlZFN0cmluZy5lcXVhbHMocmVzdWx0U3RyaW5nKSk7Ci0KLQkJLy8JYXNzZXJ0VHJ1ZShyZXN1bHQpOyAvLyAmJiBldmVudFJlc3VsdCk7Ci0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQkJLy9hc3NlcnRUcnVlKCJldmVudCB0eXBlIiwgZXZlbnRSZXN1bHQpOwotCi0JCWlmICh2ZXJib3NlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigic3RydWN0dXJlZCBkb2N1bWVudDoiKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURlYnVnLmR1bXAoZG9jdW1lbnQsIHRydWUpOwotCQl9Ci0KLQkJLy8gbm93IGRlbGV0ZSBxdW90ZQotCQljaGFuZ2VzID0gIiI7Ci0JCWV4cGVjdGVkU3RyaW5nID0gIjwlQHBhZ2UgbGFuZz1cImphdmFzXCIgPFNDUklQVD52YXIgPCUgdGVzdCAlPiBTdHJpbmc8L1NDUklQVD4iOwotCQlzdGFydE9mQ2hhbmdlcyA9IDE5OwotCQlsZW5ndGhUb1JlcGxhY2UgPSAxOwotCQlmTW9kZWwucmVwbGFjZVRleHQobnVsbCwgc3RhcnRPZkNoYW5nZXMsIGxlbmd0aFRvUmVwbGFjZSwgY2hhbmdlcyk7Ci0JCXJlc3VsdFN0cmluZyA9IGZNb2RlbC5nZXRUZXh0KCk7Ci0JCWFzc2VydFRydWUoInRleHQgdXBkYXRlIiwgcmVzdWx0KTsKLQotCQlpZiAodmVyYm9zZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oInN0cnVjdHVyZWQgZG9jdW1lbnQ6Iik7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gc3RydWN0dXJlZERvY3VtZW50RXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEZWJ1Zy5kdW1wKGRvY3VtZW50LCB0cnVlKTsKLQkJfQotCi0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYWdlZGlyZWN0aXZlL1Rlc3RQYWdlRGlyZWN0aXZlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhZ2VkaXJlY3RpdmUvVGVzdFBhZ2VEaXJlY3RpdmUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjg0ZjcxMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhZ2VkaXJlY3RpdmUvVGVzdFBhZ2VEaXJlY3RpdmUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMucGFnZWRpcmVjdGl2ZTsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuUGFnZURpcmVjdGl2ZUFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmx0ay5tb2RlbGhhbmRsZXIuRW1iZWRkZWRUeXBlSGFuZGxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZUFkYXB0ZXJGYWN0b3J5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbGhhbmRsZXIuRW1iZWRkZWRYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuc3NlbW9kZWxxdWVyeS5Nb2RlbFF1ZXJ5QWRhcHRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi0vKioKLSAqIEBhdXRob3IgZGF2aWR3Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0UGFnZURpcmVjdGl2ZSBleHRlbmRzIFRlc3RDYXNlIHsKLQotCWNsYXNzIE15RW1iZWRkZWRGYWN0b3J5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyRmFjdG9yeSB7Ci0KLQkJcHVibGljIElOb2RlQWRhcHRlciBhZGFwdChJTm9kZU5vdGlmaWVyIG9iamVjdCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlwdWJsaWMgSU5vZGVBZGFwdGVyRmFjdG9yeSBjb3B5KCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0ZhY3RvcnlGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQlyZXR1cm4gdHlwZSBpbnN0YW5jZW9mIE15QWRhcHRlZENsYXNzOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLQkJCS8vIG5vb3AKLQkJfQotCX0KLQkKLQljbGFzcyBNeUFkYXB0ZWRDbGFzcyB7Ci0JCS8vIGR1bW15IGNsYXNzIGlzIGtleQotCX0KLQkKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGVzdFBhZ2VEaXJlY3RpdmUuCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVGVzdFBhZ2VEaXJlY3RpdmUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJhc2ljUEQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiBsYW5ndWFnZT1cImphdmFcIiAlPiIpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCi0JCVN0cmluZyBjb250ZW50VHlwZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldENvbnRlbnRUeXBlKCk7Ci0JCVN0cmluZyBsYW5ndWFnZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldExhbmd1YWdlKCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiY29udGVudFR5cGUgc2hvdWxkIGJlIGh0bWwiLCAidGV4dC9odG1sIi5lcXVhbHMoY29udGVudFR5cGUpKTsKLQkJYXNzZXJ0VHJ1ZSgibGFuZ3VhZ2Ugc2hvdWxkIGJlIGphdmEiLCAiamF2YSIuZXF1YWxzKGxhbmd1YWdlKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmFzaWNDaGFuZ2VkUEQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQkvLyBGaXJzdCBtYWtlIChlbXB0eSkgc3RydWN0dXJlZERvY3VtZW50Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWFzc2VydFRydWUoIm1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkISIsIG1vZGVsICE9IG51bGwpOwotCi0JCS8vIE5vdywgYXNzaWduaW5nIHVzZSBhIHBhZ2UgZGlyZWN0aXZlLCBidXQgbGVhdmluZyBlbWJlZGRlZCB0eXBlIHRoZSBzYW1lIGFzIGRlZmF1bHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dCh0aGlzLCAiPCVAIHBhZ2UgY29udGVudFR5cGU9XCJ0ZXh0L2h0bWxcIiBsYW5ndWFnZT1cImphdmFcIiAlPiIpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgKChJRE9NTW9kZWwpIG1vZGVsKS5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCi0JCVN0cmluZyBjb250ZW50VHlwZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldENvbnRlbnRUeXBlKCk7Ci0JCVN0cmluZyBsYW5ndWFnZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldExhbmd1YWdlKCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiY29udGVudFR5cGUgc2hvdWxkIGJlIGh0bWwiLCAidGV4dC9odG1sIi5lcXVhbHMoY29udGVudFR5cGUpKTsKLQkJYXNzZXJ0VHJ1ZSgibGFuZ3VhZ2Ugc2hvdWxkIGJlIGphdmEiLCAiamF2YSIuZXF1YWxzKGxhbmd1YWdlKSk7Ci0KLQkJLy8gY2hhbmdlIHRvIGphdmFzY3JpcHQKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgNDMsIDQsICJqYXZhc2NyaXB0Iik7Ci0KLQkJY29udGVudFR5cGUgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRDb250ZW50VHlwZSgpOwotCQlsYW5ndWFnZSA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldExhbmd1YWdlKCk7Ci0KLQkJYXNzZXJ0VHJ1ZSgiY29udGVudFR5cGUgc2hvdWxkIGJlIGh0bWwiLCAidGV4dC9odG1sIi5lcXVhbHMoY29udGVudFR5cGUpKTsKLQkJYXNzZXJ0VHJ1ZSgibGFuZ3VhZ2Ugc2hvdWxkIGJlIGphdmFzY3JpcHQiLCAiamF2YXNjcmlwdCIuZXF1YWxzKGxhbmd1YWdlKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmFzaWNDaGFuZ2VkUERCYWNrKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sXCIgbGFuZ3VhZ2U9XCJqYXZhXCIgJT4iKTsKLQkJUGFnZURpcmVjdGl2ZUFkYXB0ZXIgcGFnZURpcmVjdGl2ZUFkYXB0ZXIgPSAoUGFnZURpcmVjdGl2ZUFkYXB0ZXIpICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQotCQlTdHJpbmcgY29udGVudFR5cGUgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRDb250ZW50VHlwZSgpOwotCQlTdHJpbmcgbGFuZ3VhZ2UgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnRUeXBlIHNob3VsZCBiZSBodG1sIiwgInRleHQvaHRtbCIuZXF1YWxzKGNvbnRlbnRUeXBlKSk7Ci0JCWFzc2VydFRydWUoImxhbmd1YWdlIHNob3VsZCBiZSBqYXZhIiwgImphdmEiLmVxdWFscyhsYW5ndWFnZSkpOwotCi0JCS8vIGNoYW5nZSB0byBqYXZhc2NyaXB0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnJlcGxhY2VUZXh0KHRoaXMsIDQzLCA0LCAiamF2YXNjcmlwdCIpOwotCi0JCWNvbnRlbnRUeXBlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0Q29udGVudFR5cGUoKTsKLQkJbGFuZ3VhZ2UgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnRUeXBlIHNob3VsZCBiZSBodG1sIiwgInRleHQvaHRtbCIuZXF1YWxzKGNvbnRlbnRUeXBlKSk7Ci0JCWFzc2VydFRydWUoImxhbmd1YWdlIHNob3VsZCBiZSBqYXZhc2NyaXB0IiwgImphdmFzY3JpcHQiLmVxdWFscyhsYW5ndWFnZSkpOwotCi0JCS8vIGNoYW5nZSBiYWNrIHRvIGphdmEKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkucmVwbGFjZVRleHQodGhpcywgNDMsIDEwLCAiamF2YSIpOwotCi0JCWNvbnRlbnRUeXBlID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0Q29udGVudFR5cGUoKTsKLQkJbGFuZ3VhZ2UgPSBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpOwotCi0JCWFzc2VydFRydWUoImNvbnRlbnRUeXBlIHNob3VsZCBiZSBodG1sIiwgInRleHQvaHRtbCIuZXF1YWxzKGNvbnRlbnRUeXBlKSk7Ci0JCWFzc2VydEVxdWFscygiamF2YSIsIGxhbmd1YWdlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFNldEVtYmVkZGVkVHlwZSgpewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gY3JlYXRlVW5tYW5hZ2VkSFRNTE1vZGVsKCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSAoKElET01Nb2RlbCkgbW9kZWwpLmdldERvY3VtZW50KCkuZ2V0QWRhcHRlckZvcihQYWdlRGlyZWN0aXZlQWRhcHRlci5jbGFzcyk7Ci0JCUVtYmVkZGVkVHlwZUhhbmRsZXIgZW1iZWRkZWRYTUxIYW5kbGVyID0gbmV3IEVtYmVkZGVkWE1MKCk7Ci0JCXBhZ2VEaXJlY3RpdmVBZGFwdGVyLnNldEVtYmVkZGVkVHlwZShlbWJlZGRlZFhNTEhhbmRsZXIpOwotCQkKLQkJRW1iZWRkZWRUeXBlSGFuZGxlciBoYW5kbGVyID0gcGFnZURpcmVjdGl2ZUFkYXB0ZXIuZ2V0RW1iZWRkZWRUeXBlKCk7Ci0JCWFzc2VydFRydWUoImluY29ycmVjdCBlbWJlZGRlZCBoYW5kbGVyIiwgaGFuZGxlciA9PSBlbWJlZGRlZFhNTEhhbmRsZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QWRhcHQoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJTm9kZSBvd25lck5vZGUgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkKLQkJTW9kZWxRdWVyeUFkYXB0ZXIgZW1iZWRkZWRBZGFwdGVyID0gKE1vZGVsUXVlcnlBZGFwdGVyKSBwYWdlRGlyZWN0aXZlQWRhcHRlci5hZGFwdCgoSU5vZGVOb3RpZmllcikgb3duZXJOb2RlLCBNb2RlbFF1ZXJ5QWRhcHRlci5jbGFzcyk7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCBhZGFwdCBlbWJlZGRlZCBhZGFwdGVyIiwgZW1iZWRkZWRBZGFwdGVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEFkZEVtYmVkZGVkRmFjdG9yeSgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlVW5tYW5hZ2VkSFRNTE1vZGVsKCk7Ci0JCVBhZ2VEaXJlY3RpdmVBZGFwdGVyIHBhZ2VEaXJlY3RpdmVBZGFwdGVyID0gKFBhZ2VEaXJlY3RpdmVBZGFwdGVyKSBtb2RlbC5nZXREb2N1bWVudCgpLmdldEFkYXB0ZXJGb3IoUGFnZURpcmVjdGl2ZUFkYXB0ZXIuY2xhc3MpOwotCQlwYWdlRGlyZWN0aXZlQWRhcHRlci5hZGRFbWJlZGRlZEZhY3RvcnkobmV3IE15RW1iZWRkZWRGYWN0b3J5KCkpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U2V0TGFuZ3VhZ2UoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJcGFnZURpcmVjdGl2ZUFkYXB0ZXIuc2V0TGFuZ3VhZ2UoInRleHQveG1sIik7Ci0JCWFzc2VydFRydWUoInNldCBsYW5ndWFnZSBmYWlsZWQiLCBwYWdlRGlyZWN0aXZlQWRhcHRlci5nZXRMYW5ndWFnZSgpLmVxdWFscygidGV4dC94bWwiKSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRUYXJnZXQoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJSU5vZGVOb3RpZmllciBub3RpZmllciA9IHBhZ2VEaXJlY3RpdmVBZGFwdGVyLmdldFRhcmdldCgpOwotCQlhc3NlcnROb3ROdWxsKCJ0YXJnZXQgaXMgbnVsbCIsIG5vdGlmaWVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFJlbGVhc2UoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpOwotCQlQYWdlRGlyZWN0aXZlQWRhcHRlciBwYWdlRGlyZWN0aXZlQWRhcHRlciA9IChQYWdlRGlyZWN0aXZlQWRhcHRlcikgbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRBZGFwdGVyRm9yKFBhZ2VEaXJlY3RpdmVBZGFwdGVyLmNsYXNzKTsKLQkJcGFnZURpcmVjdGl2ZUFkYXB0ZXIucmVsZWFzZSgpOwotCQkvLyBjb25zaWRlcmVkICJzdWNjZXNzIiBpZiBkb2Vzbid0IHRocm91Z2ggZXhjZXB0aW9uCi0JCWFzc2VydFRydWUodHJ1ZSk7Ci0JfQotCQotCXByaXZhdGUgSURPTU1vZGVsIGNyZWF0ZVVubWFuYWdlZEhUTUxNb2RlbCgpIHsKLQkJLy8gRmlyc3QgbWFrZSAoZW1wdHkpIHN0cnVjdHVyZWREb2N1bWVudAotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuY3JlYXRlVW5NYW5hZ2VkU3RydWN0dXJlZE1vZGVsRm9yKENvbnRlbnRUeXBlSWRGb3JKU1AuQ29udGVudFR5cGVJRF9KU1ApOwotCQlhc3NlcnRUcnVlKCJtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCEiLCBtb2RlbCAhPSBudWxsKTsKLQotCQkvLyBOb3csIGFzc2lnbmluZyB1c2UgYSBwYWdlIGRpcmVjdGl2ZSwgYnV0IGxlYXZpbmcgZW1iZWRkZWQgdHlwZSB0aGUgc2FtZSBhcyBkZWZhdWx0Ci0JCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldFRleHQodGhpcywgIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sXCIgbGFuZ3VhZ2U9XCJqYXZhXCIgJT4iKTsKLQkJcmV0dXJuIChJRE9NTW9kZWwpbW9kZWw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJKU1AuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJKU1AuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWI1ODAwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVySlNQLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnBhcnRpdGlvbmluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ0J1ZmZlcklucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUudGV4dC5JSlNQUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGV4dC5JQ1NTUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRleHQuSUhUTUxQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXh0LklYTUxQYXJ0aXRpb25zOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5EZWNpbWFsRm9ybWF0OwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckpTUCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgYm9vbGVhbiBERUJVR19QUklOVF9SRVNVTFQgPSBmYWxzZTsKLQlwcm90ZWN0ZWQgSVR5cGVkUmVnaW9uW10gcGFydGl0aW9ucyA9IG51bGw7Ci0KLQlwcml2YXRlIGJvb2xlYW4gdXNlRm9ybWF0dGVyID0gdHJ1ZTsKLQlwcm90ZWN0ZWQgRGVjaW1hbEZvcm1hdCBmb3JtYXR0ZXI7Ci0KLQlwdWJsaWMgVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckpTUChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpCi0JCQlmb3JtYXR0ZXIgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SlNQMSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24geyAvLyBEVyAwNS8wMS8yMDAzIEkgbW9kaWZpZWQgdGhpcyB0ZXN0LCBhZnRlciBjcmVhdGluZyB0ZXN0NiwgCi0JCS8vIGFuZCBjaGFuZ2luZyBwYXJ0aW9uZXIgdG8gcGljayB1cCBlbmQgKj4gYXMgcGFydCBvZiBwYWdlIGRpcmVjdGl2ZQotCQkvLyBwYXJ0aXRpb24gKGZvciBoaWdobGlnaHRpbmcgdG8gd29yayByaWdodCkuCi0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSA4OwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMS5qc3AiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSlNQUGFydGl0aW9ucy5KU1BfRElSRUNUSVZFLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfRElSRUNUSVZFLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1AyKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSAxMTsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9leGFtcGxlMDIuanNwIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9KQVZBLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0NPTU1FTlQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1AzKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSA1OwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMy5qc3AiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuU0NSSVBULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJQ1NTUGFydGl0aW9ucy5TVFlMRSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCx9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SlNQNCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gODsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL2pzcC9leGFtcGxlMDQuanNwIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9KQVZBLCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsICJvcmcuZWNsaXBzZS53c3QuaHRtbC5TQ1JJUFQubGFuZ3VhZ2UuTVlMQU5HVUFHRSIsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT01NRU5ULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxUfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEpTUDUoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDE3OwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNS5qc3AiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuU0NSSVBULCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTU1FTlQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfREVMSU1JVEVSLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9ERUxJTUlURVIsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0pBVkEsIElKU1BQYXJ0aXRpb25zLkpTUF9DT05URU5UX0RFTElNSVRFUiwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKU1A2KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCWludCBleHBlY3RlZFBhcnRpdGlvbnMgPSAxOwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNi5qc3AiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJSlNQUGFydGl0aW9ucy5KU1BfRElSRUNUSVZFfSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJ1ZzEzMTQ2MygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gMTM7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9qc3AvYnVnMTMxNDYzLmpzcCIpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lKU1BQYXJ0aXRpb25zLkpTUF9ESVJFQ1RJVkUsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9DREFUQSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0RJUkVDVElWRSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0RJUkVDVElWRSwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUpTUFBhcnRpdGlvbnMuSlNQX0NPTlRFTlRfSkFWQSwgSUpTUFBhcnRpdGlvbnMuSlNQX0RJUkVDVElWRX0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQZXJmSlNQKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCS8vaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDY7Ci0JCS8vWFhYIEZJWE1FISAKLQkJLy9udCBuUGFydGl0aW9ucyA9IAotCQkJZG9UaW1lZENvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMvanNwL2NvbXBhbnkzMDBrLmpzcCIpOwotCQkvL2Fzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJLy9jaGVja1NlYW1zKCk7Ci0JCS8vdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lYTUxQYXJ0aXRpb25zLlNUX1hNTF9QSSwgSVhNTFBhcnRpdGlvbnMuU1RfREVGQVVMVF9YTUwsIElYTUxQYXJ0aXRpb25zLlNUX1hNTF9ERUNMQVJBVElPTiwgSVhNTFBhcnRpdGlvbnMuU1RfREVGQVVMVF9YTUwsIElYTUxQYXJ0aXRpb25zLlNUX1hNTF9DT01NRU5ULCBJWE1MUGFydGl0aW9ucy5TVF9ERUZBVUxUX1hNTH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gMTsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdCgidGVzdGZpbGVzL3htbC9lbXB0eS54bWwiKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBuUGFydGl0aW9ucyA9PSBleHBlY3RlZFBhcnRpdGlvbnMpOwotCQljaGVja1NlYW1zKCk7Ci0JCXZlcmlmeVBhcnRpdGlvblR5cGVzKHBhcnRpdGlvbnMsIG5ldyBTdHJpbmdbXXtJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH0pOwotCX0KLQotCS8qKgotCSAqIEVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGxpc3Qgb2YgcGFydGl0aW9ucyBhcmUgYWxsIGFkamFjZW50IHRvIG9uZQotCSAqIGFub3RoZXIKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjaGVja1NlYW1zKCkgewotCQlpZiAocGFydGl0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuOwotCQlpbnQgb2Zmc2V0ID0gMDsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoInBhcnRpdGlvbnMgYXJlIG5vdCBjb250aWd1b3VzISIsIHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCksIG9mZnNldCk7Ci0JCQlvZmZzZXQgPSBwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpICsgcGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIENvbXB1dGUgdGhlIHBhcnRpdGlvbnMgZm9yIHRoZSBnaXZlbiBmaWxlbmFtZSB1c2luZyB0aGUgZGVmYXVsdAotCSAqIHBhcnRpdGlvbmVyIGZvciB0aGF0IGZpbGUgdHlwZS4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuIGludAotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIGludCBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCWlmIChpblN0cmVhbSA9PSBudWxsKQotCQkJaW5TdHJlYW0gPSBuZXcgU3RyaW5nQnVmZmVySW5wdXRTdHJlYW0oIiIpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQgJiYgdXNlRm9ybWF0dGVyKSB7Ci0JCQlkb3VibGUgYmFzZVRlbiA9IE1hdGgubG9nKDEwKTsKLQkJCWZvcm1hdHRlci5zZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygoaW50KSAoTWF0aC5sb2coc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKSAvIGJhc2VUZW4pICsgMSk7Ci0JCQlmb3JtYXR0ZXIuc2V0R3JvdXBpbmdVc2VkKGZhbHNlKTsKLQkJfQotCi0JCXBhcnRpdGlvbnMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuY29tcHV0ZVBhcnRpdGlvbmluZygwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUKSB7Ci0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuZmlsZW5hbWU6ICIgKyBmaWxlbmFtZSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCQl0cnkgewotCQkJCQljb250ZW50cyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSwgcGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJCX0KLQkJCQlpZiAodXNlRm9ybWF0dGVyKQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpKSArICI6IiArIGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSkgKyAiIC0gIiArIHBhcnRpdGlvbnNbaV0uZ2V0VHlwZSgpICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJCWVsc2UKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbnNbaV0gKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQl9Ci0JCX0KLQkJY2hlY2tTZWFtcygpOwotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQotCQlpZiAocGFydGl0aW9ucyA9PSBudWxsKQotCQkJcmV0dXJuIC0xOwotCQlyZXR1cm4gcGFydGl0aW9ucy5sZW5ndGg7Ci0JfQotCi0JLyoqCi0JICogQ29tcHV0ZSB0aGUgcGFydGl0aW9ucyBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIHVzaW5nIHRoZSBkZWZhdWx0Ci0JICogcGFydGl0aW9uZXIgZm9yIHRoYXQgZmlsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gaW50Ci0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGRvVGltZWRDb21wdXRlUGFydGl0aW9uaW5nVGVzdChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCWluU3RyZWFtID0gbmV3IFN0cmluZ0J1ZmZlcklucHV0U3RyZWFtKCIiKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikgewotCQkJZG91YmxlIGJhc2VUZW4gPSBNYXRoLmxvZygxMCk7Ci0JCQlmb3JtYXR0ZXIuc2V0TWluaW11bUludGVnZXJEaWdpdHMoKGludCkgKE1hdGgubG9nKHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSkgLyBiYXNlVGVuKSArIDEpOwotCQkJZm9ybWF0dGVyLnNldEdyb3VwaW5nVXNlZChmYWxzZSk7Ci0JCX0KLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJcGFydGl0aW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5jb21wdXRlUGFydGl0aW9uaW5nKDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCWxvbmcgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUKSB7Ci0KLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGltZSB0byBjb21wdXRlICIgKyBwYXJ0aXRpb25zLmxlbmd0aCArICI6ICIgKyAoZW5kVGltZSAtIHN0YXJ0VGltZSkgKyAiIChtc2VjcykiKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQkJfQotCQkJCWlmICh1c2VGb3JtYXR0ZXIpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpICsgIjoiICsgZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKSArICIgLSAiICsgcGFydGl0aW9uc1tpXS5nZXRUeXBlKCkgKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQkJZWxzZQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uc1tpXSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCX0KLQkJfQotCQljaGVja1NlYW1zKCk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm4gLTE7Ci0JCXJldHVybiBwYXJ0aXRpb25zLmxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHNpbmdsZSBwYXJ0aXRpb24gYXQgdGhlIGdpdmVuIG9mZnNldCBmb3IgdGhlIGdpdmVuIGZpbGUsCi0JICogdXNpbmcgdGhlIGRlZmF1bHQgcGFydGl0aW9uZXIgZm9yIHRoYXQgZmlsZSB0eXBlLiBUaGlzIHRlc3QgYWxsb3dzIGZvcgotCSAqIHZlcmlmeWluZyB0aGUgemVyby1sZW5ndGggcGFydGl0aW9uaW5nIGJlaGF2aW9yLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEBwYXJhbSBvZmZzZXQKLQkgKiBAcmV0dXJuIElUeXBlZFJlZ2lvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIElUeXBlZFJlZ2lvbiBnZXRQYXJ0aXRpb25UZXN0KFN0cmluZyBmaWxlbmFtZSwgaW50IG9mZnNldCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJcGFydGl0aW9ucyA9IG51bGw7Ci0JCUlUeXBlZFJlZ2lvbiBwYXJ0aXRpb24gPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFydGl0aW9uKG9mZnNldCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCXRyeSB7Ci0JCQkJY29udGVudHMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KHBhcnRpdGlvbi5nZXRPZmZzZXQoKSwgcGFydGl0aW9uLmdldExlbmd0aCgpKTsKLQkJCX0KLQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQl9Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQl9Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCXJldHVybiBwYXJ0aXRpb247Ci0JfQotCi0JLyoqCi0JICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGFydGl0aW9ucyBhcmUgb2YgdGhlIGdpdmVuIHBhcnRpdGlvbiB0eXBlcwotCSAqIAotCSAqIEBwYXJhbSB0eXBlZFJlZ2lvbnMKLQkgKiBAcGFyYW0gdHlwZXMKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB2ZXJpZnlQYXJ0aXRpb25UeXBlcyhJVHlwZWRSZWdpb24gYWN0dWFsVHlwZWRSZWdpb25zW10sIFN0cmluZyBleHBlY3RlZFR5cGVzW10pIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZFR5cGVzLmxlbmd0aDsgaSsrKQotCQkJYXNzZXJ0RXF1YWxzKCJwYXJ0aXRpb24gdHlwZSBtaXNtYXRjaGVkIiwgZXhwZWN0ZWRUeXBlc1tpXSwgYWN0dWFsVHlwZWRSZWdpb25zW2ldLmdldFR5cGUoKSk7Ci0JfQotCi0JLyoqCi0JICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGFydGl0aW9ucyBiZWdpbiBhdCB0aGUgZ2l2ZW4gb2Zmc2V0cwotCSAqIAotCSAqIEBwYXJhbSB0eXBlZFJlZ2lvbnMKLQkgKiBAcGFyYW0gdHlwZXMKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB2ZXJpZnlQYXJ0aXRpb25SZWdpb25zKElUeXBlZFJlZ2lvbiB0eXBlZFJlZ2lvbnNbXSwgaW50IG9mZnNldHNbXSkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygib2Zmc2V0IG1pc21hdGNoZWQiLCB0eXBlZFJlZ2lvbnNbaV0uZ2V0T2Zmc2V0KCksIG9mZnNldHNbaV0pOwotCQkJaWYgKGkgPiAwKSB7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJsZW5ndGhzIG1pc2FsaWduZWQiLCB0eXBlZFJlZ2lvbnNbaV0uZ2V0T2Zmc2V0KCksIHR5cGVkUmVnaW9uc1tpIC0gMV0uZ2V0T2Zmc2V0KCkgKyB0eXBlZFJlZ2lvbnNbaSAtIDFdLmdldExlbmd0aCgpKTsKLQkJCX0KLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2J1ZzEzMTQ2My5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2J1ZzEzMTQ2My5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNzIxOTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9idWcxMzE0NjMuanNwCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08anNwOnRleHQ+DQotCTwhW0NEQVRBWyA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIiA/PiBdXT4NCi08L2pzcDp0ZXh0Pg0KLTxqc3A6c2NyaXB0bGV0Pg0KLQk8IVtDREFUQVsNCi0JCVN0cmluZyB0ZXN0ID0gInNvbWV0aGluZyI7DQotCV1dPg0KLTwvanNwOnNjcmlwdGxldD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2NvbXBhbnkzMDBrLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvY29tcGFueTMwMGsuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYWRmNWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvY29tcGFueTMwMGsuanNwCisrKyAvZGV2L251bGwKQEAgLTEsODA5OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+DQotPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KLQk8aGVhZD4NCi0JCTx0aXRsZT5UaGUgVWx0aW1hdGUgQSBDb21wYW55PC90aXRsZT4NCi0JPC9oZWFkPg0KLQk8Ym9keT4NCi0JCTxwPg0KLQkJCTxpbWcgc3JjPSIuLi9iYW5uZXIuZ2lmIiBoZWlnaHQ9IjUxIiB3aWR0aD0iNjU5IiBhbHQ9IiIgLz4NCi0JCTwvcD4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8dGFibGUgd2lkdGg9Ijg0JSI+DQotCQkJPHRib2R5Pg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgcm93c3Bhbj0iMiI+DQotCQkJCQkJPGgyPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vbGVmdHBhbmVsLmpwZyIgaGVpZ2h0PSI0OTgiIHdpZHRoPSIxMjQiIGFsdD0iIiAvPg0KLQkJCQkJCTwvaDI+DQotCQkJCQk8L3RkPg0KLQkJCQkJPHRkIGNvbHNwYW49IjIiPg0KLQkJCQkJCTxoND5Tb21lIHBlb3BsZSB0aGluayB0aGF0IEEgaXMganVzdCBhbm90aGVyIGxldHRlci4gV2UgYXJlIG5vdCBzb21lIHBlb3BsZS4gV2UgYXQgdGhlIFVsdGltYXRlIEEgQ29tcGFueSB0aGluayB0aGF0IEEgaXMgc3BlY2lhbC4gV2hlbiBhcHByb2FjaGVkIGJ5IGEgdGVhbSB1bml0ZWQgYnkgdGhlIGNvbW1vbiBwYXNzaW9uLCBza2lsbHMgYW5kIGRldm90aW9uIHRvIHRoZSB3b3JsZCBvZiBsZXR0ZXJzLCBhIGh1bWJsZSBBIGNhbiBiZWNvbWUgYSB0cnVlIHdvcmsgb2YgYXJ0LiZuYnNwOzwvaDQ+DQotCQkJCQkJPGg0Pg0KLQkJCQkJCQlUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJw0KLQkJCQkJCQk8Yj5BPC9iPg0KLQkJCQkJCQkncnQuJm5ic3A7DQotCQkJCQkJPC9oND4NCi0JCQkJCQk8aDM+RG9uJ3Qgc2V0dGxlIGZvciBvcmRpbmFyeS4gWW91IGRlc2VydmUgb25seSB0aGUgYmVzdC48L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkPiZuYnNwOzwvdGQ+DQotCQkJCQk8dGQ+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJUHJvZHVjdHMNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVdoYXQncyBOZXcNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCU9yZGVyIE9ubGluZQ0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJU3VwcG9ydA0KLQkJCQkJCTwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQgY29sc3Bhbj0iMyI+DQotCQkJCQkJRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoNCi0JCQkJCQk8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCTwvdGJvZHk+DQotCQk8L3RhYmxlPg0KLQkJPHRhYmxlIHdpZHRoPSI4NCUiPg0KLQkJCTx0Ym9keT4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIHJvd3NwYW49IjIiPg0KLQkJCQkJCTxoMj4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2xlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4NCi0JCQkJCQk8L2gyPg0KLQkJCQkJPC90ZD4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIyIj4NCi0JCQkJCQk8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0Pg0KLQkJCQkJCTxoND4NCi0JCQkJCQkJVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcNCi0JCQkJCQkJPGI+QTwvYj4NCi0JCQkJCQkJJ3J0LiZuYnNwOw0KLQkJCQkJCTwvaDQ+DQotCQkJCQkJPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZD4mbmJzcDs8L3RkPg0KLQkJCQkJPHRkPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVByb2R1Y3RzDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlXaGF0J3MgTmV3DQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlPcmRlciBPbmxpbmUNCi0JCQkJCQk8L2gzPg0KLQkJCQkJCTxoMz4NCi0JCQkJCQkJPGltZyBzcmM9Ii4uL2J1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+DQotCQkJCQkJCVN1cHBvcnQNCi0JCQkJCQk8L2gzPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQkJPHRyPg0KLQkJCQkJPHRkIGNvbHNwYW49IjMiPg0KLQkJCQkJCUZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6DQotCQkJCQkJPGEgaHJlZj0ibWFpbHRvOndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbSI+d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tPC9hPg0KLQkJCQkJPC90ZD4NCi0JCQkJPC90cj4NCi0JCQk8L3Rib2R5Pg0KLQkJPC90YWJsZT4NCi0JCTx0YWJsZSB3aWR0aD0iODQlIj4NCi0JCQk8dGJvZHk+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCByb3dzcGFuPSIyIj4NCi0JCQkJCQk8aDI+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9sZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+DQotCQkJCQkJPC9oMj4NCi0JCQkJCTwvdGQ+DQotCQkJCQk8dGQgY29sc3Bhbj0iMiI+DQotCQkJCQkJPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4NCi0JCQkJCQk8aDQ+DQotCQkJCQkJCVRha2UgYSBsb29rIGF0IG91ciBwcm9kdWN0IGNhdGFsb2cgYW5kIHdlIGFyZSBzdXJlIHlvdSB3aWxsIGFncmVlLiBXZSBkZXNpZ24sIG1hbnVmYWN0dXJlIGFuZCBzaGlwIEFzIG9mIGFueSBzaGFwZSwgc2l6ZSBhbmQgY29sb3IsIGZpbmlzaGVkIGluIGFueSB3YXkgaW1hZ2luYWJsZS4gQW5kIHdlIHdpbGwgYmUgaGFwcHkgdG8gY2F0ZXIgdG8geW91ciBldmVyeSBkZXNpcmUgYW5kIG1ha2UgYSBjdXN0b20sIG9uZS1vZi1hLWtpbmQgQSB0aGF0IHdpbGwgbGFzdCBmb3IgYSBsaWZldGltZS4gT3VyIHBhc3Npb24gYW5kIG91ciBhdHRlbnRpb24gdG8gZGV0YWlsIGFsbCB3b3JrIHRvd2FyZHMgb25lIGZpbmFsIGdvYWwgLSB0byBkZWxpdmVyIHN0YXRlIG9mIHRoZSAnDQotCQkJCQkJCTxiPkE8L2I+DQotCQkJCQkJCSdydC4mbmJzcDsNCi0JCQkJCQk8L2g0Pg0KLQkJCQkJCTxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+DQotCQkJCQk8L3RkPg0KLQkJCQk8L3RyPg0KLQkJCQk8dHI+DQotCQkJCQk8dGQ+Jm5ic3A7PC90ZD4NCi0JCQkJCTx0ZD4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlQcm9kdWN0cw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJV2hhdCdzIE5ldw0KLQkJCQkJCTwvaDM+DQotCQkJCQkJPGgzPg0KLQkJCQkJCQk8aW1nIHNyYz0iLi4vYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4NCi0JCQkJCQkJT3JkZXIgT25saW5lDQotCQkJCQkJPC9oMz4NCi0JCQkJCQk8aDM+DQotCQkJCQkJCTxpbWcgc3JjPSIuLi9idWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPg0KLQkJCQkJCQlTdXBwb3J0DQotCQkJCQkJPC9oMz4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJCTx0cj4NCi0JCQkJCTx0ZCBjb2xzcGFuPSIzIj4NCi0JCQkJCQlGb3IgcHJvYmxlbXMgYW5kIHN1Z2dlc3Rpb25zIHJlbGF0ZWQgdG8gdGhpcyB3ZWIgc2l0ZSwgd3JpdGUgdG8gV2VibWFzdGVyOg0KLQkJCQkJCTxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4NCi0JCQkJCTwvdGQ+DQotCQkJCTwvdHI+DQotCQkJPC90Ym9keT4NCi0JCTwvdGFibGU+DQotCQk8cD4NCi0JCQk8aW1nIHNyYz0iLi4vZm9vdGVyLmdpZiIgaGVpZ2h0PSIyNSIgd2lkdGg9IjY1OSIgYWx0PSIiIC8+DQotCQk8L3A+DQotCTwvYm9keT4NCi08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDEuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDEuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYzdjNTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAxLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCVAIHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbCIgJT4NCi08anNwOmRpcmVjdGl2ZS5wYWdlIGNvbnRlbnRUeXBlPXRleHQvaHRtbCIgLz4NCi08SFRNTCBpZD0iPCUgamF2YSBjb2RlICJzdHJpbmciIHNlY3Rpb24gJT4iPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAyLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTZkMGVjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSAgICAgICA8cD4NCi0gICAgICAgPCUgdGVzdGluZyAiMTIzIiB0ZXN0IHRlc3Q7DQotICAgICAgIC8vIHRlc3QNCi0gICAgICAgb25lIHR3byB0aHJlZQ0KLSAgICAgICAlPg0KLSAgICAgICA8IS0tIDc4IC0tPg0KLSAgICAgICA8dGFibGUgaWQgPSAiPCUgdGVzdCAlPiIgYXR0cmliPWp1bms+DQotICAgICAgIDwvQk9EWT4NCi0gICAgICAgPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAzLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTAzLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGZmZDMxMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwMy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTxIVE1MPg0KLTxTQ1JJUFQ+DQotamF2YSBzY3JpcHQgc2VjdGlvbg0KLTwvU0NSSVBUPg0KLTxTVFlMRT4NCi0gICBzdHlsZSBzZWN0aW9uDQotICAgPC9TVFlMRT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODA4NzA0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvcGFydGl0aW9uaW5nL3Rlc3RmaWxlcy9qc3AvZXhhbXBsZTA0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPHNjcmlwdCBsYW5ndWFnZT0iTXlMYW5ndWFnZSI+PCU9ICJBIiAlPiAgICAgIA0KLSA8L1NDUklQVD4NCi08JS0tIC0tJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2MTUxZDMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPGZvcm1hdHRpbmc+DQotPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KLS8vCUNvcHlyaWdodCAyMDAwLDIwMDEgYnkgd3d3LmV4YW1wbGUuY29tDQotICBkb2N1bWVudC5VUkwgPSJhIjsNCi08L3NjcmlwdD4NCi0NCi08JSBTdHJpbmcgYSA9ICJhIjsgJT4NCi08JS0tIHRlc3QgY29tbWVudCAtLSU+DQotPCU9IA0KLQ0KLSIgICBhYWFhYSAiDQotDQotJT4NCi08JSEgJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3BhcnRpdGlvbmluZy90ZXN0ZmlsZXMvanNwL2V4YW1wbGUwNi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg1MTczZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9wYXJ0aXRpb25pbmcvdGVzdGZpbGVzL2pzcC9leGFtcGxlMDYuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPCVAcGFnZSBsYW5ndWFnZT0iamF2YXNjcmlwdCIgJT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3JlZ2lzdHJ5L0FkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3JlZ2lzdHJ5L0FkYXB0ZXJGYWN0b3J5UmVnaXN0cnlUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhMmViNjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9yZWdpc3RyeS9BZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy5yZWdpc3RyeTsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UmVnaXN0cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLQotLyoqCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgQWRhcHRlckZhY3RvcnlSZWdpc3RyeVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBDTEFTU05BTUVfSFRNTF9GQUNUT1JZID0gIm9yZy5lY2xpcHNlLndzdC5odG1sLnVpLmludGVybmFsLnJlZ2lzdHJ5LkFkYXB0ZXJGYWN0b3J5UHJvdmlkZXJGb3JIVE1MIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBDTEFTU05BTUVfRFREX0ZBQ1RPUlkgPSAib3JnLmVjbGlwc2Uud3N0LmR0ZC51aS5pbnRlcm5hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yRFREIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBDTEFTU05BTUVfSlNQX0ZBQ1RPUlkgPSAib3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9ySlNQIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBDTEFTU05BTUVfQ1NTX0ZBQ1RPUlkgPSAib3JnLmVjbGlwc2Uud3N0LmNzcy51aS5pbnRlcm5hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyQ1NTIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBDTEFTU05BTUVfWE1MX0ZBQ1RPUlkgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5yZWdpc3RyeS5BZGFwdGVyRmFjdG9yeVByb3ZpZGVyRm9yWE1MIjsKLQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZSgpIHsKLQkJQWRhcHRlckZhY3RvcnlSZWdpc3RyeSBpbnN0YW5jZSA9IEFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlJbXBsLmdldEluc3RhbmNlKCk7Ci0JCWFzc2VydE5vdE51bGwoaW5zdGFuY2UpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBbGxGYWN0b3JpZXMoKSB7Ci0JCUFkYXB0ZXJGYWN0b3J5UmVnaXN0cnkgaW5zdGFuY2UgPSBBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5SW1wbC5nZXRJbnN0YW5jZSgpOwotCQlJdGVyYXRvciBpdCA9IGluc3RhbmNlLmdldEFkYXB0ZXJGYWN0b3JpZXMoKTsKLQkJT2JqZWN0IHByb3ZpZGVyID0gbnVsbDsKLQotCQkvLyBhbGwgcHJvdmlkZXJzIGV4cGVjdGVkIGNsYXNzbmFtZXMgYWRkZWQgaGVyZQotCQlMaXN0IGtub3duID0gbmV3IEFycmF5TGlzdCgpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX0hUTUxfRkFDVE9SWSk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfRFREX0ZBQ1RPUlkpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX0pTUF9GQUNUT1JZKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9DU1NfRkFDVE9SWSk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfWE1MX0ZBQ1RPUlkpOwotCi0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCXByb3ZpZGVyID0gaXQubmV4dCgpOwotCQkJa25vd24ucmVtb3ZlKHByb3ZpZGVyLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbihwcm92aWRlci5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0JCX0KLQotCQkvLyBzaG91bGQgaGF2ZSBlbmNvdW50ZXJlZCBhbGwgZXhwZWN0ZWQgYWRhcHRlciBmYWN0b3JpZXMuCi0JCWFzc2VydEVxdWFscygidW5rbm93biAoZXh0cmEpIGFkYXB0ZXIgZmFjdG9yaWVzIGZvdW5kIiwgMCwga25vd24uc2l6ZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RmFjdG9yaWVzWE1MKCkgewotCi0JCUxpc3Qga25vd24gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfWE1MX0ZBQ1RPUlkpOwotCi0JCWdldEZhY3Rvcmllc0ZvckNvbnRlbnRUeXBlKGtub3duLCBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBDTEFTU05BTUVfSFRNTF9GQUNUT1JZKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RmFjdG9yaWVzSFRNTCgpIHsKLQotCQlMaXN0IGtub3duID0gbmV3IEFycmF5TGlzdCgpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX0pTUF9GQUNUT1JZKTsKLQotCQlnZXRGYWN0b3JpZXNGb3JDb250ZW50VHlwZShrbm93biwgQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCwgQ0xBU1NOQU1FX1hNTF9GQUNUT1JZKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RmFjdG9yaWVzSlNQKCkgewotCi0JCUxpc3Qga25vd24gPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWtub3duLmFkZChDTEFTU05BTUVfSFRNTF9GQUNUT1JZKTsKLQotCQlnZXRGYWN0b3JpZXNGb3JDb250ZW50VHlwZShrbm93biwgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MLCBDTEFTU05BTUVfRFREX0ZBQ1RPUlkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGYWN0b3JpZXNEVEQoKSB7Ci0KLQkJTGlzdCBrbm93biA9IG5ldyBBcnJheUxpc3QoKTsKLQkJa25vd24uYWRkKENMQVNTTkFNRV9EVERfRkFDVE9SWSk7Ci0KLQkJZ2V0RmFjdG9yaWVzRm9yQ29udGVudFR5cGUoa25vd24sICJvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuZHRkc291cmNlIiwgQ0xBU1NOQU1FX0hUTUxfRkFDVE9SWSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEZhY3Rvcmllc0NTUygpIHsKLQotCQlMaXN0IGtub3duID0gbmV3IEFycmF5TGlzdCgpOwotCQlrbm93bi5hZGQoQ0xBU1NOQU1FX0NTU19GQUNUT1JZKTsKLQotCQlnZXRGYWN0b3JpZXNGb3JDb250ZW50VHlwZShrbm93biwgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUywgQ0xBU1NOQU1FX0pTUF9GQUNUT1JZKTsKLQl9Ci0KLQkvKioKLQkgKiBDb21wYXJlIHRvIGEgZXhwZWN0ZWQgbGlzdCBvZiBBZGFwdGVyRmFjdG9yeVByb3ZpZGVycyAobWF5IGJlIHNtYWxsZXIKLQkgKiB0aGFuIHRoZSBhY3R1YWwgbGlzdCkgZm9yIGEgZ2l2ZW4gY29udGVudFR5cGVJZC4gQXQgbWluaW11bSB0aGVzZQotCSAqIGV4cGVjdGVkIHByb3ZpZGVycyBtdXN0IGJlIGZvdW5kIHRvIHBhc3MuCi0JICogCi0JICogQHBhcmFtIGV4cGVjdGVkCi0JICogQHBhcmFtIGNvbnRlbnRUeXBlSWQKLQkgKi8KLQlwcml2YXRlIHZvaWQgZ2V0RmFjdG9yaWVzRm9yQ29udGVudFR5cGUoTGlzdCBleHBlY3RlZCwgU3RyaW5nIGNvbnRlbnRUeXBlSWQsIFN0cmluZyBub3RFeHBlY3RlZENsYXNzbmFtZSkgewotCi0JCUFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlJbXBsIGluc3RhbmNlID0gKEFkYXB0ZXJGYWN0b3J5UmVnaXN0cnlJbXBsKSBBZGFwdGVyRmFjdG9yeVJlZ2lzdHJ5SW1wbC5nZXRJbnN0YW5jZSgpOwotCQlJdGVyYXRvciBpdCA9IGluc3RhbmNlLmdldEFkYXB0ZXJGYWN0b3JpZXMoY29udGVudFR5cGVJZCk7Ci0JCU9iamVjdCBwcm92aWRlciA9IG51bGw7Ci0JCXdoaWxlIChpdC5oYXNOZXh0KCkpIHsKLQkJCXByb3ZpZGVyID0gaXQubmV4dCgpOwotCQkJZXhwZWN0ZWQucmVtb3ZlKHByb3ZpZGVyLmdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQotCQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJlbmNvdW50ZXJlZCBwcm92aWRlcjogIiArCi0JCQkvLyBwcm92aWRlci5nZXRDbGFzcygpLmdldE5hbWUoKSk7Ci0JCQlhc3NlcnRUcnVlKCIhcHJvdmlkZXI6ICIgKyBub3RFeHBlY3RlZENsYXNzbmFtZSArICIgc2hvdWxkbid0IGJlIGluIHRoZSBsaXN0ISIsICFub3RFeHBlY3RlZENsYXNzbmFtZS5lcXVhbHMocHJvdmlkZXIuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpKTsKLQkJfQotCQkvLyB3ZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBmb3VuZCB0aGUgZXhwZWN0ZWQgZmFjdG9yeSAob3IgZmFjdG9yaWVzKQotCQlhc3NlcnRUcnVlKCJleHRyYSBwcm92aWRlcnMgKGV4cGVjdGVkIG5vbmUpOiAiICsgZXhwZWN0ZWQsIGV4cGVjdGVkLmlzRW1wdHkoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9zZWFyY2gvSlNQU2VhcmNoVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvc2VhcmNoL0pTUFNlYXJjaFRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwZmIyMGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy9zZWFyY2gvSlNQU2VhcmNoVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuc2VhcmNoOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklKYXZhRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5zZWFyY2guSUphdmFTZWFyY2hDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuc2VhcmNoLlNlYXJjaERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLnNlYXJjaC5TZWFyY2hQYXR0ZXJuOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLklKU1BUcmFuc2xhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5KU1BUcmFuc2xhdGlvbkFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLmNvcmUuaW50ZXJuYWwuamF2YS5zZWFyY2guSlNQU2VhcmNoU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLmphdmEuc2VhcmNoLkpTUFNlYXJjaFN1cHBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5pbnRlcm5hbC5qYXZhLnNlYXJjaC5CYXNpY0pTUFNlYXJjaFJlcXVlc3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLlByb2plY3RVbnppcFV0aWxpdHk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotCi0vKioKLSAqIFRlc3RzIGZvciBKU1BTZWFyY2hTdXBwb3J0Ci0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgSlNQU2VhcmNoVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSBpbXBsZW1lbnRzIElKYXZhU2VhcmNoQ29uc3RhbnRzIHsKLQotCS8qKgotCSAqIHRvIGFjY2VwdCBzZWFyY2ggbWF0Y2hlcwotCSAqIGFkZENoZWNrTWF0Y2goLi4uKSBmb3IgbWF0Y2hlcyB5b3UgZXhwZWN0LCBydW4gc2VhcmNoIHN1cHBvcnQsIGNoZWNrVmFsaWQoKSB0byBzZWUgaWYgYWxsIGV4cGVjdGVkIGdvdCBoaXQKLQkgKi8KLQljbGFzcyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yIGV4dGVuZHMgQmFzaWNKU1BTZWFyY2hSZXF1ZXN0b3IgewotCi0JCXByaXZhdGUgTGlzdCBtYXRjaGVzID0gbnVsbDsKLQotCQlwdWJsaWMgVGVzdEpzcFNlYXJjaFJlcXVlc3RvcigpIHsKLQkJCXRoaXMubWF0Y2hlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJfQotCi0JCS8vIGNhbGxlZCBieSBzZWFyY2ggZnJhbWV3b3JrCi0JCXByb3RlY3RlZCB2b2lkIGFkZFNlYXJjaE1hdGNoKElTdHJ1Y3R1cmVkRG9jdW1lbnQganNwRG9jdW1lbnQsIElGaWxlIGpzcEZpbGUsIGludCBqc3BTdGFydCwgaW50IGpzcEVuZCwgU3RyaW5nIGpzcFRleHQpIHsKLQkJCXRoaXMubWF0Y2hlcy5yZW1vdmUobmV3IFRlc3RTZWFyY2hNYXRjaChqc3BGaWxlLmdldE5hbWUoKSwganNwU3RhcnQsIGpzcEVuZCkpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgYmVnaW5SZXBvcnRpbmcoKSB7Ci0JCQkvLyBkbyBub3RoaW5nIHNpbmNlIHdlIGhhdmUgbm8gVUksIGRvbid0IGFjY2VzcyBJU2VhcmNoUmVzdWx0VmlldwotCQl9Ci0KLQkJcHVibGljIHZvaWQgZW5kUmVwb3J0aW5nKCkgewotCQkJLy8gZG8gbm90aGluZyBzaW5jZSB3ZSBoYXZlIG5vIFVJLCBkb24ndCBhY2Nlc3MgSVNlYXJjaFJlc3VsdFZpZXcKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGFkZENoZWNrTWF0Y2goU3RyaW5nIGZpbGVuYW1lLCBpbnQganNwU3RhcnQsIGludCBqc3BFbmQpIHsKLQkJCXRoaXMubWF0Y2hlcy5hZGQobmV3IFRlc3RTZWFyY2hNYXRjaChmaWxlbmFtZSwganNwU3RhcnQsIGpzcEVuZCkpOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gY2hlY2tWYWxpZCgpIHsKLQkJCXJldHVybiB0aGlzLm1hdGNoZXMuaXNFbXB0eSgpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgY2xlYXIoKSB7Ci0JCQl0aGlzLm1hdGNoZXMuY2xlYXIoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIHRvIHZhbGlkYXRlIHNlYXJjaCBtYXRjaGVzIChjaGVja01hdGNoIG1hdGNoZXMgYSBzZWFyY2ggaGl0KQotCSAqLwotCWNsYXNzIFRlc3RTZWFyY2hNYXRjaCB7Ci0KLQkJcHVibGljIFN0cmluZyBmaWxlbmFtZSA9IG51bGw7Ci0JCXB1YmxpYyBpbnQganNwU3RhcnQgPSAtMTsKLQkJcHVibGljIGludCBqc3BFbmQgPSAtMTsKLQotCQlwdWJsaWMgVGVzdFNlYXJjaE1hdGNoKFN0cmluZyBmaWxlbmFtZSwgaW50IGpzcFN0YXJ0LCBpbnQganNwRW5kKSB7Ci0JCQl0aGlzLmZpbGVuYW1lID0gZmlsZW5hbWU7Ci0JCQl0aGlzLmpzcFN0YXJ0ID0ganNwU3RhcnQ7Ci0JCQl0aGlzLmpzcEVuZCA9IGpzcEVuZDsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3Qgb2JqKSB7Ci0JCQlpZiAoIShvYmogaW5zdGFuY2VvZiBUZXN0U2VhcmNoTWF0Y2gpKQotCQkJCXJldHVybiBmYWxzZTsKLQotCQkJVGVzdFNlYXJjaE1hdGNoIHBvc3NpYmxlID0gKFRlc3RTZWFyY2hNYXRjaCkgb2JqOwotCQkJcmV0dXJuIHRoaXMuZmlsZW5hbWUuZXF1YWxzSWdub3JlQ2FzZShwb3NzaWJsZS5maWxlbmFtZSkgJiYgdGhpcy5qc3BTdGFydCA9PSBwb3NzaWJsZS5qc3BTdGFydCAmJiB0aGlzLmpzcEVuZCA9PSBwb3NzaWJsZS5qc3BFbmQ7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIFByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0KLQlwdWJsaWMgSlNQU2VhcmNoVGVzdHMoKSB7Ci0JCXN1cGVyKCJKU1AgU2VhcmNoIFRlc3RzIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXRoaXMucHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCi0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgImpzcHNlYXJjaF90ZXN0cy56aXAiLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQl0aGlzLnByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdGhpcy5wcm9qVXRpbC5pbml0SmF2YVByb2plY3QoImp1ZG8iKTsKLQotCQkvL0pTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5pbmRleFdvcmtzcGFjZUFuZFdhaXQoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQkvLyBkbyBub3RoaW5nCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluZGV4V29ya3NwYWNlKCkgewotCQlKU1BTZWFyY2hTdXBwb3J0IHN1cHBvcnQgPSBKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCk7Ci0JCVNlYXJjaERvY3VtZW50IGRvYyA9IEpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5nZXRTZWFyY2hEb2N1bWVudCgiL2p1ZG8vc2VhcmNoVGVzdEpTUC5qYXZhIik7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IHJldHJpZXZlOicvanVkby9zZWFyY2hUZXN0SlNQLmphdmEnIiwgZG9jKTsKLQotCQlkb2MgPSBzdXBwb3J0LmdldFNlYXJjaERvY3VtZW50KCIvanVkby9zZWFyY2hUZXN0SlNQMi5qYXZhIik7Ci0JCWFzc2VydE5vdE51bGwoImNvdWxkbid0IHJldHJpZXZlOicvanVkby9zZWFyY2hUZXN0SlNQMi5qYXZhJyIsIGRvYyk7Ci0KLQkJZG9jID0gc3VwcG9ydC5nZXRTZWFyY2hEb2N1bWVudCgiL2p1ZG8vc2VhcmNoVGVzdEpTUDMuamF2YSIpOwotCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCByZXRyaWV2ZTonL2p1ZG8vc2VhcmNoVGVzdEpTUDMuamF2YSciLCBkb2MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWFyY2hGaWVsZCgpIHsKLQotCQlUZXN0SnNwU2VhcmNoUmVxdWVzdG9yIHJlcXVlc3RvciA9IG5ldyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yKCk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQLmpzcCIsIDkzLCAxMDYpOwotCQlKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCkuc2VhcmNoKCJzZWFyY2hGb3JUaGlzIiwgbmV3IEpTUFNlYXJjaFNjb3BlKCksIEZJRUxELCBBTExfT0NDVVJSRU5DRVMsIFNlYXJjaFBhdHRlcm4uUl9FWEFDVF9NQVRDSCwgdHJ1ZSwgcmVxdWVzdG9yKTsKLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2hGb3JUaGlzIiwgcmVxdWVzdG9yLmNoZWNrVmFsaWQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlYXJjaE1ldGhvZCgpIHsKLQotCQlUZXN0SnNwU2VhcmNoUmVxdWVzdG9yIHJlcXVlc3RvciA9IG5ldyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yKCk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQLmpzcCIsIDE0MywgMTU4KTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AuanNwIiwgMjk4LCAzMTUpOwotCQlKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCkuc2VhcmNoKCJzZWFyY2hGb3JNZXRob2QiLCBuZXcgSlNQU2VhcmNoU2NvcGUoKSwgTUVUSE9ELCBBTExfT0NDVVJSRU5DRVMsIFNlYXJjaFBhdHRlcm4uUl9FWEFDVF9NQVRDSCwgdHJ1ZSwgcmVxdWVzdG9yKTsKLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2hGb3JNZXRob2QiLCByZXF1ZXN0b3IuY2hlY2tWYWxpZCgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VhcmNoUGF0dGVybk1hdGNoKCkgewotCi0JCVRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IoKTsKLQkJcmVxdWVzdG9yLmFkZENoZWNrTWF0Y2goInNlYXJjaFRlc3RKU1AuanNwIiwgOTMsIDEwNik7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMi5qc3AiLCAxMTYsIDEyOSk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMi5qc3AiLCAxNTIsIDE2NSk7Ci0JCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5zZWFyY2goInNlYXJjaCoiLCBuZXcgSlNQU2VhcmNoU2NvcGUoKSwgRklFTEQsIEFMTF9PQ0NVUlJFTkNFUywgU2VhcmNoUGF0dGVybi5SX1BBVFRFUk5fTUFUQ0gsIHRydWUsIHJlcXVlc3Rvcik7Ci0JCWFzc2VydFRydWUoImRpZCBub3QgZmluZCBhbGwgZXhwZWN0ZWQgbWF0Y2hlczogc2VhcmNoKiIsIHJlcXVlc3Rvci5jaGVja1ZhbGlkKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWFyY2hQcm9qZWN0Q2xhc3NlcygpIHsKLQotCQlUZXN0SnNwU2VhcmNoUmVxdWVzdG9yIHJlcXVlc3RvciA9IG5ldyBUZXN0SnNwU2VhcmNoUmVxdWVzdG9yKCk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAxNDgsIDE1Nyk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAxNzAsIDE3OSk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAyNjMsIDI3Myk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAyOTksIDMwOSk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCA0MDgsIDQxNyk7Ci0JCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCA0MzAsIDQzOSk7Ci0JCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5zZWFyY2goIkplbGx5YmVhbioiLCBuZXcgSlNQU2VhcmNoU2NvcGUoKSwgVFlQRSwgQUxMX09DQ1VSUkVOQ0VTLCBTZWFyY2hQYXR0ZXJuLlJfUEFUVEVSTl9NQVRDSCwgdHJ1ZSwgcmVxdWVzdG9yKTsKLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2gqIiwgcmVxdWVzdG9yLmNoZWNrVmFsaWQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlYXJjaExvY2FsVmFyaWFibGUoKSB7Ci0KLQkJSURPTU1vZGVsIHhtbE1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlQYXRoIGpzcFRlc3RGaWxlUGF0aCA9IG5ldyBQYXRoKCJqdWRvL1NFQVJDSC9zZWFyY2hUZXN0SlNQMy5qc3AiKTsKLQkJCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUoanNwVGVzdEZpbGVQYXRoKTsKLQkJCXhtbE1vZGVsID0gKElET01Nb2RlbCkgZ2V0U3RydWN0dXJlZE1vZGVsRm9yUmVhZChmaWxlKTsKLQkJCXNldHVwQWRhcHRlckZhY3RvcnkoeG1sTW9kZWwpOwotCi0JCQlJRE9NRG9jdW1lbnQgZG9jID0geG1sTW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUpTUFRyYW5zbGF0aW9uQWRhcHRlciBhZGFwdGVyID0gKEpTUFRyYW5zbGF0aW9uQWRhcHRlcikgZG9jLmdldEFkYXB0ZXJGb3IoSUpTUFRyYW5zbGF0aW9uLmNsYXNzKTsKLQkJCUpTUFRyYW5zbGF0aW9uIHRyYW5zbGF0aW9uID0gYWRhcHRlci5nZXRKU1BUcmFuc2xhdGlvbigpOwotCQkJSUphdmFFbGVtZW50IGVsZW1lbnQgPSB0cmFuc2xhdGlvbi5nZXRFbGVtZW50c0Zyb21Kc3BSYW5nZSgzNzcsIDM4NClbMF07Ci0KLQkJCVRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IgcmVxdWVzdG9yID0gbmV3IFRlc3RKc3BTZWFyY2hSZXF1ZXN0b3IoKTsKLQkJCXJlcXVlc3Rvci5hZGRDaGVja01hdGNoKCJzZWFyY2hUZXN0SlNQMy5qc3AiLCAzNzcsIDM4NCk7Ci0JCQlKU1BTZWFyY2hTdXBwb3J0LmdldEluc3RhbmNlKCkuc2VhcmNoKGVsZW1lbnQsIG5ldyBKU1BTZWFyY2hTY29wZSgpLCByZXF1ZXN0b3IpOwotCQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kIGFsbCBleHBlY3RlZCBtYXRjaGVzOiBzZWFyY2gqIiwgcmVxdWVzdG9yLmNoZWNrVmFsaWQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoeG1sTW9kZWwgIT0gbnVsbCkKLQkJCQl4bWxNb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JSZWFkKElGaWxlIGZpbGUpIHsKLQotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJcmV0dXJuIG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoZmlsZSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGlvZXgpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiY291bGRuJ3Qgb3BlbiBmaWxlOiIgKyBmaWxlKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBudWxsOwotCX0KLQotCS8qKgotCSAqIGFkZCB0aGUgZmFjdG9yeSBmb3IgSlNQVHJhbnNsYXRpb25BZGFwdGVyIGhlcmUKLQkgKiBAcGFyYW0gc20KLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBBZGFwdGVyRmFjdG9yeShJU3RydWN0dXJlZE1vZGVsIHNtKSB7Ci0KLQkJSlNQVHJhbnNsYXRpb25BZGFwdGVyRmFjdG9yeSBmYWN0b3J5ID0gbmV3IEpTUFRyYW5zbGF0aW9uQWRhcHRlckZhY3RvcnkoKTsKLQkJc20uZ2V0RmFjdG9yeVJlZ2lzdHJ5KCkuYWRkRmFjdG9yeShmYWN0b3J5KTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy90aHJlYWRlZC9UaHJlYWRlZE1vZGVsUmVhZEVkaXRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3RocmVhZGVkL1RocmVhZGVkTW9kZWxSZWFkRWRpdFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjU0OTY3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3RocmVhZGVkL1RocmVhZGVkTW9kZWxSZWFkRWRpdFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI5MyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudGhyZWFkZWQ7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkhhc2hNYXA7Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5GaWxlQnVmZmVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5qb2JzLkpvYjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkJhZExvY2F0aW9uRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS5pbnRlcm5hbC5qYXZhLkpTUFRyYW5zbGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsLlByb2plY3RVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnRleHQuZWRpdHMuSW5zZXJ0RWRpdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci0KLS8qKgotICogQ3JlYXRlZCBmb3I6IGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMTY1MjMKLSAqLwotcHVibGljIGNsYXNzIFRocmVhZGVkTW9kZWxSZWFkRWRpdFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiUFJPSkVDVF8xMTY1MjMiOwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotCXByaXZhdGUgY2xhc3MgVHJhbnNsYXRlSm9iIGV4dGVuZHMgSm9iIHsKLQkJU3RyaW5nIGZGaWxlUGF0aCA9IG51bGw7Ci0JCXB1YmxpYyBUcmFuc2xhdGVKb2IoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgam9ibmFtZSkgewotCQkJc3VwZXIoam9ibmFtZSk7Ci0JCQlmRmlsZVBhdGggPSBmaWxlbmFtZTsKLQkJfQotCQlwcm90ZWN0ZWQgSVN0YXR1cyBydW4oSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB7Ci0JCQlJRmlsZSBmID0gZ2V0T3JDcmVhdGVGaWxlKGZGaWxlUGF0aCk7Ci0JCQlKU1BUcmFuc2xhdG9yIHRyYW5zID0gbmV3IEpTUFRyYW5zbGF0b3IoKTsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgc01vZGVsID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJc01vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvclJlYWQoZik7Ci0JCQkJaWYoc01vZGVsICE9IG51bGwpIHsKLQkJCQkJdHJhbnMucmVzZXQoKElET01Ob2RlKXNNb2RlbC5nZXRJbmRleGVkUmVnaW9uKDApLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQkJdHJhbnMudHJhbnNsYXRlKCk7Ci0JCQkJfQotCQkJCQotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIGNhdGNoIGJsb2NrCi0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJCWZpbmFsbHkgewotCQkJCWlmKHNNb2RlbCAhPSBudWxsKQotCQkJCQlzTW9kZWwucmVsZWFzZUZyb21SZWFkKCk7Ci0JCQl9Ci0JCQkKLQkJCXJldHVybiBTdGF0dXMuT0tfU1RBVFVTOwotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmKCFpc1NldHVwKSB7Ci0JCQlkb1NldHVwKCk7Ci0JCQlpc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQkKLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHsKLQkJY3JlYXRlUHJvamVjdCgpOwotCX0KLQkvKgotCSAqIGNyZWF0ZSAxMDAgdGVzdCBmaWxlcwotCSAqIHJlcGVhdCBkb1Rlc3QoKSBvbiB0aG9zZSAxMDAgZmlsZXMgNXgKLQkgKi8KLS8vCXB1YmxpYyB2b2lkIHRlc3RfMTE2NTIzKCkgewotLy8KLS8vCQkvLyB0cnkgYW5kIGRvIHNvbWUgY29uY3VycmVudCBlZGl0aW5nL2luZGV4aW5nCi0vLwkJZm9yKGludCBqPTA7IGo8NTsgaisrKSB7Ci0vLwkJCWZvcihpbnQgaT0wOyBpPDEwMDsgaSsrKSAKLS8vCQkJCWRvVGVzdCgidGVzdF8iICsgaSArICIuanNwIik7Ci0vLwkJfQotLy8JfQotLy8JLyoKLS8vCSAqIGRvVGVzdCgpIG9uIHNhbWUgZmlsZSAxMDB4Ci0vLwkgKi8KLS8vCXB1YmxpYyB2b2lkIHRlc3RfMTE2NTIzXzIoKSB7Ci0vLwotLy8JCS8vIHRyeSBhbmQgZG8gc29tZSBjb25jdXJyZW50IGVkaXRpbmcvaW5kZXhpbmcKLS8vCQlmb3IoaW50IGk9MDsgaTwxMDA7IGkrKykgCi0vLwkJCWRvVGVzdCgidGVzdF8xLmpzcCIpOwotLy8JfQotCQotCS8qCi0JICogZG9UZXN0KCkgKGluc2VydCB0ZXh0ICYgZWRpdCBkb20pCi0JICogYW5kIGZvcmNlIEpTUFRyYW5zbGF0aW9uIG9uIGFub3RoZXIgdGhyZWFkCi0JICogCi0JICogcmVwZWF0IGxvdHMgb2YgdGltZXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0XzExNjUyM18zKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSAidF90ZXN0XzEuanNwIjsKLQkJCi0JCWdldE9yQ3JlYXRlRmlsZShQUk9KRUNUX05BTUUgKyAiLyIgKyBmaWxlbmFtZSk7Ci0JCQotCQlmb3IoaW50IGo9MDsgajwxMDA7IGorKykgewotCQkJVHJhbnNsYXRlSm9iIHRyYW5zbGF0ZUpvYiA9IG5ldyBUcmFuc2xhdGVKb2IoUFJPSkVDVF9OQU1FICsgIi8iICsgZmlsZW5hbWUsICJKU1AgVHJhbnNsYXRlIEpvYiIpOwotCQkJdHJhbnNsYXRlSm9iLnNjaGVkdWxlKCk7Ci0JCQlwZXJmb3JtRWRpdHMoZmlsZW5hbWUpOwotCQl9Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwZXJmb3JtRWRpdHMoU3RyaW5nIGZpbGVQYXRoKSB7Ci0JCQotCQlJRmlsZSBibGFua0pzcEZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgZmlsZVBhdGgpOwotCQkKLQkJLy8gZG9jdW1lbnQgZWRpdAotCQlpRG9jdW1lbnRJbnNlcnQoYmxhbmtKc3BGaWxlLCAgIjxsb2dpYzppdGVyYXRlIGlkPVwiaXRlcmF0ZUlEXCIgdHlwZT1cImphdmEudXRpbC5MaXN0XCIgaW5kZXhJZD1cImluZGV4SURcIj48L2xvZ2ljOml0ZXJhdGU+XG4iLDApOwotCQkKLQkJLy8gZG9tIGVkaXQKLQkJSGFzaE1hcCBhdHRycyA9IG5ldyBIYXNoTWFwKCk7Ci0JCWF0dHJzLnB1dCgidXJpIiwgInN0cnV0cy1sb2dpYy50bGQiKTsKLQkJYXR0cnMucHV0KCJwcmVmaXgiLCAibG9naWMiKTsKLQkJZG9tSW5zZXJ0RWxlbWVudChibGFua0pzcEZpbGUsICJqc3A6ZGlyZWN0aXZlLnRhZ2xpYiIsIGF0dHJzLCAwKTsKLQl9Ci0JCi0JcHJvdGVjdGVkIElGaWxlIGdldE9yQ3JlYXRlRmlsZShTdHJpbmcgZmlsZVBhdGgpIHsKLQkJSUZpbGUgYmxhbmtKc3BGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWlmIChibGFua0pzcEZpbGUgIT0gbnVsbCAmJiAhYmxhbmtKc3BGaWxlLmV4aXN0cygpKSB7Ci0JCQl0cnkgewotCQkJCWJsYW5rSnNwRmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmxhbmtKc3BGaWxlOwotCX0KLQotCXB1YmxpYyB2b2lkIGRvbUluc2VydEVsZW1lbnQoSUZpbGUgZmlsZSwgU3RyaW5nIHRhZ05hbWUsIEhhc2hNYXAgYXR0cmlidXRlcywgaW50IGluc2VydGlvblBvaW50KSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc01vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXNNb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGZpbGUpOwotCQkJaWYoc01vZGVsICE9IG51bGwpIHsKLQkJCQlEb2N1bWVudCBkb21Eb2MgPSAoRG9jdW1lbnQpc01vZGVsLmdldEFkYXB0ZXIoRG9jdW1lbnQuY2xhc3MgKTsKLQkJCQlJbmRleGVkUmVnaW9uIHIgPSBzTW9kZWwuZ2V0SW5kZXhlZFJlZ2lvbihpbnNlcnRpb25Qb2ludCk7Ci0JCQkJaWYociBpbnN0YW5jZW9mIE5vZGUpIHsKLQkJCQkJRWxlbWVudCBlID0gZG9tRG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0JCQkJCUl0ZXJhdG9yIGl0ZXIgPSBhdHRyaWJ1dGVzLmtleVNldCgpLml0ZXJhdG9yKCk7Ci0JCQkJCS8vIHNldCBhdHRyaWJ1dGVzCi0JCQkJCXdoaWxlIChpdGVyLmhhc05leHQoKSkgewotCQkJCQkJU3RyaW5nIGF0dHIgPSAoU3RyaW5nKSBpdGVyLm5leHQoKTsKLQkJCQkJCVN0cmluZyB2YWwgPSAgKFN0cmluZylhdHRyaWJ1dGVzLmdldChhdHRyKTsKLQkJCQkJCQotCQkJCQkJQXR0ciBhdHRyTm9kZSA9IGRvbURvYy5jcmVhdGVBdHRyaWJ1dGUoYXR0cik7Ci0JCQkJCQlhdHRyTm9kZS5zZXRWYWx1ZSh2YWwpOwotCQkJCQkJZS5zZXRBdHRyaWJ1dGVOb2RlKGF0dHJOb2RlKTsKLQkJCQkJfQotCQkJCQlkb21Eb2MuaW5zZXJ0QmVmb3JlKGUsIChOb2RlKXIpOwotCQkJCQlkb21Eb2MuaW5zZXJ0QmVmb3JlKGRvbURvYy5jcmVhdGVUZXh0Tm9kZSgiXG4iKSwgKE5vZGUpcik7Ci0JCQkJfQotCQkJCXNNb2RlbC5zYXZlKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmKHNNb2RlbCAhPSBudWxsKQotCQkJCXNNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJpbnNlcnRlZCBlbGVtZW50LCBkb20gc3R5bGUiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgaURvY3VtZW50SW5zZXJ0KElGaWxlIGZpbGUsIFN0cmluZyB0ZXh0LCBpbnQgaW5zZXJ0aW9uUG9pbnQpIHsKLQkJCi0JCS8vIGdldCB0aGUgZmlsZSdzIHRleHQgYnVmZmVyCi0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQlJUGF0aCBwYXRoID0gZmlsZS5nZXRGdWxsUGF0aCgpOwotCQl0cnkgewotCQkJYnVmZmVyTWFuYWdlci5jb25uZWN0KHBhdGgsIG51bGwpOwotCi0JCQlJRG9jdW1lbnQgZG9jID0gbnVsbDsKLQotCQkJSVRleHRGaWxlQnVmZmVyIGJ1ZmYgPSBidWZmZXJNYW5hZ2VyLmdldFRleHRGaWxlQnVmZmVyKGZpbGUuZ2V0RnVsbFBhdGgoKSk7Ci0JCQlkb2MgPSBidWZmLmdldERvY3VtZW50KCk7Ci0KLQkJCWJvb2xlYW4gc2F2ZVdoZW5Eb25lID0gIWJ1ZmYuaXNEaXJ0eSgpOwotCi0JCQlJbnNlcnRFZGl0IGluc2VydEVkaXQgPSBuZXcgSW5zZXJ0RWRpdChpbnNlcnRpb25Qb2ludCwgdGV4dCk7Ci0JCQlpbnNlcnRFZGl0LmFwcGx5KGRvYyk7Ci0KLQkJCS8vIGlmIHRoZSBkb2N1bWVudCB3YXMgbm90IHByZXZpb3VzbHkgZGlydHksIHNhdmUgaXQKLQkJCWlmIChzYXZlV2hlbkRvbmUpCi0JCQkJYnVmZi5jb21taXQobnVsbCwgZmFsc2UpOwotCQl9Ci0JCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9CQkKLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCXRyeSB7Ci0JCQkJYnVmZmVyTWFuYWdlci5kaXNjb25uZWN0KHBhdGgsIG51bGwpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKCJpbnNlcnRlZCB0ZXh0LCBmaWxlIGJ1ZmZlciBzdHlsZSIpOwotCX0KLQotLy8JcHJpdmF0ZSB2b2lkIHN0cnVjdHVyZWREb2NJbnNlcnQoU3RyaW5nIGZpbGVQYXRoKSB7Ci0vLwkJLy8gUFJPSkVDVF9OQU1FICsgIi9ibGFuay5qc3AiCi0vLwkJSUZpbGUgYmxhbmtKc3BGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0vLwkJaWYgKGJsYW5rSnNwRmlsZSAhPSBudWxsKSB7Ci0vLwkJCXRyeSB7Ci0vLwkJCQlibGFua0pzcEZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotLy8JCQl9Ci0vLwkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLS8vCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJCX0KLS8vCQl9Ci0vLwotLy8JCUlTdHJ1Y3R1cmVkTW9kZWwgc01vZGVsID0gbnVsbDsKLS8vCQl0cnkgewotLy8JCQlzTW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChibGFua0pzcEZpbGUpOwotLy8JCQlpZiAoc01vZGVsICE9IG51bGwpIHsKLS8vCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IHNNb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLS8vCi0vLwkJCQlTdHJpbmcgaW5zZXJ0VGV4dDEgPSAiPGxvZ2ljOml0ZXJhdGUgaWQ9XCJpdGVyYXRlSURcIiB0eXBlPVwiamF2YS51dGlsLkxpc3RcIiBpbmRleElkPVwiaW5kZXhJRFwiPjwvbG9naWM6aXRlcmF0ZT5cbiI7Ci0vLwkJCQlTdHJpbmcgaW5zZXJ0VGV4dDIgPSAiPCVAdGFnbGliIHVyaT1cInN0cnV0cy1sb2dpYy50bGRcIiBwcmVmaXg9XCJsb2dpY1wiICU+XG4iOwotLy8KLS8vCQkJCXNEb2MucmVwbGFjZSgwLCAwLCBpbnNlcnRUZXh0MSk7Ci0vLwkJCQlzRG9jLnJlcGxhY2UoMCwgMCwgaW5zZXJ0VGV4dDIpOwotLy8KLS8vCQkJCUpTUFNlYXJjaFN1cHBvcnQuZ2V0SW5zdGFuY2UoKS5hZGRKc3BGaWxlKGJsYW5rSnNwRmlsZSk7Ci0vLwkJCX0KLS8vCQl9Ci0vLwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQl9Ci0vLwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCX0KLS8vCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCX0KLS8vCQlmaW5hbGx5IHsKLS8vCQkJaWYgKHNNb2RlbCAhPSBudWxsKQotLy8JCQkJc01vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotLy8JCX0KLS8vCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KCkgewotCi0JCS8vIGNyZWF0ZSBwcm9qZWN0Ci0JCVN0cmluZ1tdIG5hdHVyZUlkcyA9IHtQcm9qZWN0VXRpbC5KQVZBX05BVFVSRV9JRH07Ci0JCUlQcm9qZWN0IHByb2ogPSBQcm9qZWN0VXRpbC5jcmVhdGVQcm9qZWN0KFBST0pFQ1RfTkFNRSwgbnVsbCwgbmF0dXJlSWRzKTsKLQotCQkvLyBjb3B5IGZpbGVzIGludG8gd29ya3NwYWNlCi0JCUlGaWxlIGYgPSBQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMuamFyIiwgUFJPSkVDVF9OQU1FICsgIi9zdHJ1dHMuamFyIik7Ci0JCWFzc2VydFRydWUoZi5leGlzdHMoKSk7Ci0JCWYgPSBQcm9qZWN0VXRpbC5jb3B5QnVuZGxlRW50cnlJbnRvV29ya3NwYWNlKCIvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMtbG9naWMudGxkIiwgUFJPSkVDVF9OQU1FICsgIi9zdHJ1dHMtbG9naWMudGxkIik7Ci0JCWFzc2VydFRydWUoZi5leGlzdHMoKSk7Ci0KLQkJLy8gYWRkIHN0cnV0cyB0byBjbGFzc3BhdGgKLQkJUHJvamVjdFV0aWwuYWRkTGlicmFyeUVudHJ5KHByb2osICJzdHJ1dHMuamFyIik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0NvbW1vblhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTI3MGZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Db21tb25YTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi0KLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXI7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5QYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uT3V0cHV0S2V5czsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlNvdXJjZTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXJFeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3I7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5kb20uRE9NU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotCi0vKioKLSAqLwotcHVibGljIGNsYXNzIENvbW1vblhNTCB7Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgZ2V0RG9jdW1lbnRCdWlsZGVyKCkgewotCQlEb2N1bWVudEJ1aWxkZXIgcmVzdWx0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc3VsdCA9IERvY3VtZW50QnVpbGRlckZhY3RvcnkubmV3SW5zdGFuY2UoKS5uZXdEb2N1bWVudEJ1aWxkZXIoKTsKLQkJfQotCQljYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlMb2dnZXIubG9nRXhjZXB0aW9uKGUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN5bmNocm9uaXplZCBzdGF0aWMgRG9jdW1lbnRCdWlsZGVyIGdldERvY3VtZW50QnVpbGRlcihib29sZWFuIHZhbGlkYXRpbmcpIHsKLQkJRG9jdW1lbnRCdWlsZGVyIHJlc3VsdCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGluc3RhbmNlID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQkJaW5zdGFuY2Uuc2V0VmFsaWRhdGluZyh2YWxpZGF0aW5nKTsKLQkJCXJlc3VsdCA9IGluc3RhbmNlLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgc2VyaWFsaXplKERvY3VtZW50IGRvY3VtZW50LCBPdXRwdXRTdHJlYW0gb3N0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU291cmNlIGRvbVNvdXJjZSA9IG5ldyBET01Tb3VyY2UoZG9jdW1lbnQpOwotCQl0cnkgewotCQkJVHJhbnNmb3JtZXIgc2VyaWFsaXplciA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld1RyYW5zZm9ybWVyKCk7Ci0JCQl0cnkgewotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoT3V0cHV0S2V5cy5JTkRFTlQsICJ5ZXMiKTsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KCJ7aHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHR9aW5kZW50LWFtb3VudCIsICI0Iik7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLkVOQ09ESU5HLCAiVVRGLTE2Iik7Ci0JCQl9Ci0JCQljYXRjaCAoSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGUpIHsKLQkJCQkvLyB1bnN1cHBvcnRlZCBwcm9wZXJ0aWVzCi0JCQl9Ci0JCQlzZXJpYWxpemVyLnRyYW5zZm9ybShkb21Tb3VyY2UsIG5ldyBTdHJlYW1SZXN1bHQob3N0cmVhbSkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJGYWN0b3J5Q29uZmlndXJhdGlvbkVycm9yIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLQkJCXRocm93IG5ldyBJT0V4Y2VwdGlvbihlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL0RhdGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmIzYmRlNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvRGF0ZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5EYXRlRm9ybWF0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqIFRvIGNoYW5nZSB0aGlzIGdlbmVyYXRlZCBjb21tZW50IGVkaXQgdGhlIHRlbXBsYXRlIHZhcmlhYmxlICJ0eXBlY29tbWVudCI6Ci0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5UZW1wbGF0ZXMuCi0gKiBUbyBlbmFibGUgYW5kIGRpc2FibGUgdGhlIGNyZWF0aW9uIG9mIHR5cGUgY29tbWVudHMgZ28gdG8KLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPkNvZGUgR2VuZXJhdGlvbi4KLSAqLwotcHVibGljIGNsYXNzIERhdGVVdGlsIHsKLQotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBbGxUZXN0cy4KLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXByaXZhdGUgc3RhdGljIFN0cmluZyBub3cgPSBudWxsOwotCi0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBub3coKSB7Ci0JCS8vIGp1c3QgY2FsY3VsYXRlIG9uY2UsIHNvIHdob2xlIHJ1biBhcyBzYW1lIHRpbWVzdGFtcAotCQlpZiAoRGF0ZVV0aWwubm93ID09IG51bGwpIHsKLQkJCURhdGVGb3JtYXQgZm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXknLSdNTSctJ2RkJy0na2snLSdtbSctJ3NzIik7Ci0JCQlDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0JCQlEYXRlIHRvZGF5ID0gY2FsZW5kYXIuZ2V0VGltZSgpOwotCQkJRGF0ZVV0aWwubm93ID0gZm9ybWF0LmZvcm1hdCh0b2RheSk7Ci0JCX0KLQkJcmV0dXJuIERhdGVVdGlsLm5vdzsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvRmlsZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGFhNTYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZW5hbWVGaWx0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlVXRpbCB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZkxpbmVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZlBhdGhTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInBhdGguc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZkZpbGVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgSlNQX0VESVRPUl9URVNUU19QTFVHSU5fSUQgPSAib3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cyI7Ci0KLQlzdGF0aWMgRmlsZSBwcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkgPSBudWxsOwotCXN0YXRpYyBwcml2YXRlIFN0cmluZyBsb2dTdWJEaXJlY3RvcnlQYXRoOwotCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBub3RUcmllZFlldCA9IHRydWU7Ci0KLQlwdWJsaWMgc3RhdGljIGNsYXNzIERpckZpbGVuYW1lRmlsdGVyIGltcGxlbWVudHMgRmlsZW5hbWVGaWx0ZXIgewotCQlTdHJpbmcgc3RhcnRPZkFjY2VwdGFibGVOYW1lczsKLQotCQlwdWJsaWMgRGlyRmlsZW5hbWVGaWx0ZXIoU3RyaW5nIHN0YXJ0T2ZEaXJOYW1lKSB7Ci0JCQlzdGFydE9mQWNjZXB0YWJsZU5hbWVzID0gc3RhcnRPZkRpck5hbWU7Ci0JCX0KLQotCQkvKioKLQkJICogQHNlZSBqYXZhLmlvLkZpbGVGaWx0ZXIjYWNjZXB0KEZpbGUpCi0JCSAqLwotCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBwYXRobmFtZSwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCQkvLyB3ZSdsbCBqdXN0IGFzc3VtZSBpZiBpdCBzdGFydHMgd2l0aCByaWdodCBrZXksIGl0IGlzIGEgZGlyZWN0b3J5IC4uLiBmb3Igbm93Ci0JCQlyZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aChzdGFydE9mQWNjZXB0YWJsZU5hbWVzKTsKLQkJfQotCi0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeShTdHJpbmcgZGlyZWN0b3J5Um9vdE5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChwcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkgPT0gbnVsbCAmJiBub3RUcmllZFlldCkgewotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShKU1BfRURJVE9SX1RFU1RTX1BMVUdJTl9JRCk7Ci0JCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCQkvL1N0cmluZyBpbnN0YWxsUGF0aCA9IHVybC5nZXRQYXRoKCk7Ci0JCQkvLyBhZGQga25vd24gZmlsZSBzbyBVUkwgbWV0aG9kIGJlbG93IGNhbiBiZSB1c2VkCi0JCQkvLyAoZG9lc24ndCBzZWVtIHRvIHdvcmsgZm9yIGRpcmVjdG9yeT8pCi0JCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgInBsdWdpbi54bWwiKTsKLQkJCVVSTCBmaW5hbHVybCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh0b3RhbFVSTCk7Ci0JCQlTdHJpbmcgZmluYWxGaWxlID0gZmluYWx1cmwuZ2V0RmlsZSgpOwotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJCVN0cmluZyBmaW5hbFBhdGggPSBmaWxlLmdldFBhcmVudCgpOwotCQkJRmlsZSBwbHVnaW5Ib21lRGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJCUZpbGVuYW1lRmlsdGVyIGRpckZpbHRlciA9IG5ldyBEaXJGaWxlbmFtZUZpbHRlcihkaXJlY3RvcnlSb290TmFtZSk7Ci0JCQlGaWxlW10gYWxsRGlycyA9IHBsdWdpbkhvbWVEaXIubGlzdEZpbGVzKGRpckZpbHRlcik7Ci0KLQkJCS8vIGFzc3VtZSBmaXJzdCBpbiBsaXN0IGlzIG5ld2VzdCwgdGhlbiBzdGFydCBsb29raW5nIHdpdGggdGhlIAotCQkJLy8gc2Vjb25kIGl0ZW0gLi4uIGp1c3QgdG8gYXZvaWQgIm51bGwiIGNhc2UgY2hlY2tpbmcKLQkJCWlmIChhbGxEaXJzLmxlbmd0aCA+IDApIHsKLQkJCQlGaWxlIGN1cnJlbnROZXdlc3QgPSBhbGxEaXJzWzBdOwotCQkJCWZvciAoaW50IGkgPSAxOyBpIDwgYWxsRGlycy5sZW5ndGg7IGkrKykgewotCQkJCQlGaWxlIGN1cnJlbnQgPSBhbGxEaXJzW2ldOwotCQkJCQkvLyBOT1RFOiB3ZSBnbyBieSBtb2RpZmllZCBkYXRlLCBub3QgYnkgdGhlIGFjdHVhbCB0aW1lIHN0YW1wIGluIG5hbWUuCi0JCQkJCS8vIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBub3JtYWwgY2FzZXMsIGJ1dCBtYXkgbm90IGlmIHNvbWVvbmUgZG9lcyBzb21lCi0JCQkJCS8vICJmdW5ueSIgY29weWluZywgb3IgdXBkYXRpbmcgZnJvbSByZXBvc2l0b3J5LgotCQkJCQlpZiAoY3VycmVudC5sYXN0TW9kaWZpZWQoKSA+IGN1cnJlbnROZXdlc3QubGFzdE1vZGlmaWVkKCkpIHsKLQkJCQkJCWN1cnJlbnROZXdlc3QgPSBjdXJyZW50OwotCQkJCQl9Ci0JCQkJfQotCQkJCXByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IGN1cnJlbnROZXdlc3Q7Ci0JCQl9Ci0JCQlub3RUcmllZFlldCA9IGZhbHNlOwotCQl9Ci0JCXJldHVybiBwcmV2aW91c1Jlc3VsdHNEaXJlY3Rvcnk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIG1ha2VGaWxlRm9yKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKEpTUF9FRElUT1JfVEVTVFNfUExVR0lOX0lEKTsKLQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeSgiLyIpOwotCQlVUkwgbG9jYWxVUkwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodXJsKTsKLQkJU3RyaW5nIGluc3RhbGxQYXRoID0gbG9jYWxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgdG90YWxEaXJlY3RvcnkgPSBpbnN0YWxsUGF0aCArIGRpcmVjdG9yeTsKLQkJU3RyaW5nIHRvdGFsUGF0aCA9IHRvdGFsRGlyZWN0b3J5ICsgIi8iICsgZmlsZW5hbWU7Ci0JCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCB0b3RhbFBhdGgpOwotCQkvL1VSTCBmaW5hbHVybCA9IFBsYXRmb3JtLmFzTG9jYWxVUkwodG90YWxVUkwpOwotCQlTdHJpbmcgZmluYWxGaWxlID0gdG90YWxVUkwuZ2V0RmlsZSgpOwotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQlTdHJpbmcgZmluYWxQYXRoID0gZmlsZS5nZXRQYXJlbnQoKTsKLQkJRmlsZSBkaXIgPSBuZXcgRmlsZShmaW5hbFBhdGgpOwotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJLy8gYSBsaXR0bGUgc2FmZXR5IG5ldCwgYmUgc3VyZSB0aGUgcHJldmlvdXMgbmV3ZXN0IGRpcmVjdG9yeQotCQkJLy8gaXMgaW5pdGlhbGl6ZWQsIGp1c3QgaW4gY2FzZSBubyBvbmUgZWxzZSBoYXMgZG9uZSBzbwotCQkJaWYgKHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4ICE9IG51bGwgJiYgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgubGVuZ3RoKCkgPiAwKSB7Ci0JCQkJRmlsZVV0aWwuZ2V0UHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5KHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KTsKLQkJCX0KLQkJCS8vIG5vdyBpdHMgInNhZmUiIHRvIG1ha2UgdGhlIG5ldyBvbmUKLQkJCWRpci5ta2RpcnMoKTsKLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBKdXN0IGEgZ2VuZXJhbCB1dGlsaXR5IG1ldGhvZAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0RXh0ZW5zaW9uKFN0cmluZyBmaWxlbmFtZSkgewotCQlTdHJpbmcgZXh0ZW5zaW9uID0gbnVsbDsKLQkJaW50IGRvdFBvc3Rpb24gPSBmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpOwotCQlpZiAoZG90UG9zdGlvbiA+IC0xKSB7Ci0JCQlleHRlbnNpb24gPSBmaWxlbmFtZS5zdWJzdHJpbmcoZG90UG9zdGlvbiArIDEpOwotCQl9Ci0JCWVsc2UgewotCQkJZXh0ZW5zaW9uID0gbmV3IFN0cmluZygpOwotCQl9Ci0JCXJldHVybiBleHRlbnNpb247Ci0JfQotCi0JLyoqCi0JICogR2VuZXJhbCBwdXJwb3NlIHV0aWxpdHkgbWV0aG9kIHRvIGVuc3VyZSB0aGUgbG9nCi0JICogZGlyZWN0b3J5IGV4aXN0cywgYW5kIHJldHVybnMgdGhlIG5hbWUuIAotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldExvZ0RpcmVjdG9yeSgpIHsKLQkJaWYgKGxvZ1N1YkRpcmVjdG9yeVBhdGggPT0gbnVsbCkgewotCQkJU3RyaW5nIG1haW5EaXJlY3RvcnkgPSAiL2xvZ3MiOwotCQkJRmlsZSBkaXIgPSBuZXcgRmlsZShtYWluRGlyZWN0b3J5KTsKLQkJCWVuc3VyZUV4aXN0cyhkaXIpOwotCQkJU3RyaW5nIHN1YkRpcmVjdG9yeSA9IFRpbWVzdGFtcFV0aWwudGltZXN0YW1wKCk7Ci0JCQlsb2dTdWJEaXJlY3RvcnlQYXRoID0gbWFpbkRpcmVjdG9yeSArICIvIiArIHN1YkRpcmVjdG9yeTsKLQkJCUZpbGUgc3ViZGlyID0gbmV3IEZpbGUobG9nU3ViRGlyZWN0b3J5UGF0aCk7Ci0JCQllbnN1cmVFeGlzdHMoc3ViZGlyKTsKLQkJfQotCQlyZXR1cm4gbG9nU3ViRGlyZWN0b3J5UGF0aDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgZW5zdXJlRXhpc3RzKEZpbGUgZGlyKSB7Ci0JCWlmICghZGlyLmV4aXN0cygpKSB7Ci0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRQZXJmb3JtYW5jZU91dHB1dExvZ05hbWUoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBudWxsOwotCQlTdHJpbmcgZGlyZWN0b3J5TmFtZSA9IEZpbGVVdGlsLmdldExvZ0RpcmVjdG9yeSgpOwotCQlTdHJpbmcgZXh0ZW5zaW9uID0gIi5vdXQiOwotCQlTdHJpbmcgYmFzZU5hbWUgPSAic2VkVGVzdHMiOwotCQlsb25nIG5vdyA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlTdHJpbmcgbm93U3RyID0gU3RyaW5nLnZhbHVlT2Yobm93KTsKLQkJcmVzdWx0ID0gZGlyZWN0b3J5TmFtZSArIEZpbGVVdGlsLmZGaWxlU2VwYXJhdG9yICsgYmFzZU5hbWUgKyBub3dTdHIgKyBleHRlbnNpb247Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Qcm9qZWN0VW56aXBVdGlsaXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4MjBiZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmxhbmcucmVmbGVjdC5JbnZvY2F0aW9uVGFyZ2V0RXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5czsKLWltcG9ydCBqYXZhLnV0aWwuRW51bWVyYXRpb247Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBFbnRyeTsKLWltcG9ydCBqYXZhLnV0aWwuemlwLlppcEZpbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5KYXZhQ29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5hY3Rpb25zLldvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5kaWFsb2dzLklPdmVyd3JpdGVRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5GaWxlU3lzdGVtU3RydWN0dXJlUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuSUltcG9ydFN0cnVjdHVyZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLkltcG9ydE9wZXJhdGlvbjsKLQotLyoqCi0gKiBJbXBvcnRzIHppcHBlZCBmaWxlcyBpbnRvIHRoZSB0ZXN0IHdvcmtzcGFjZS4gRGVsZXRlcyBhbGwgcHJvamVjdHMgaW4KLSAqIHdvcmtzcGFjZS4KLSAqIAotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIFByb2plY3RVbnppcFV0aWxpdHkgewotCWNsYXNzIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBsZW1lbnRzIElQcm9ncmVzc01vbml0b3IgewotCQlwcml2YXRlIGJvb2xlYW4gZmluaXNoZWQgPSBmYWxzZTsKLQotCQlwdWJsaWMgdm9pZCBiZWdpblRhc2soU3RyaW5nIG5hbWUsIGludCB0b3RhbFdvcmspIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGRvbmUoKSB7Ci0JCQlmaW5pc2hlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0ZpbmlzaGVkKCkgewotCQkJcmV0dXJuIGZpbmlzaGVkOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgaW50ZXJuYWxXb3JrZWQoZG91YmxlIHdvcmspIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCQlyZXR1cm4gZmluaXNoZWQ7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCQlpZiAodmFsdWUgPT0gdHJ1ZSkKLQkJCQlmaW5pc2hlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBzZXRUYXNrTmFtZShTdHJpbmcgbmFtZSkgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIHZvaWQgc3ViVGFzayhTdHJpbmcgbmFtZSkgewotCQkJLy8gbm9vcAotCQl9Ci0KLQkJcHVibGljIHZvaWQgd29ya2VkKGludCB3b3JrKSB7Ci0JCQkvLyBub29wCi0JCX0KLQl9Ci0KLQljbGFzcyBNeU92ZXJ3cml0ZVF1ZXJ5IGltcGxlbWVudHMgSU92ZXJ3cml0ZVF1ZXJ5IHsKLQkJcHVibGljIFN0cmluZyBxdWVyeU92ZXJ3cml0ZShTdHJpbmcgcGF0aFN0cmluZykgewotCQkJcmV0dXJuIEFMTDsKLQkJfQotCX0KLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST0pFQ1RfWklQU19GT0xERVIgPSAicHJvamVjdHRlc3RmaWxlcyI7Ci0JcHJpdmF0ZSBMaXN0IGZDcmVhdGVkUHJvamVjdHMgPSBudWxsOwotCi0JcHVibGljIFByb2plY3RVbnppcFV0aWxpdHkoKSB7Ci0JCS8vIGZvciBkZWxldGlvbiBsYXRlcgotCQlmQ3JlYXRlZFByb2plY3RzID0gbmV3IEFycmF5TGlzdCgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBmaWxlVG9JbXBvcnQKLQkgKiAgICAgICAgICAgIHRoZSBmaWxlIHlvdSB3aXNoIHRvIGltcG9ydAotCSAqIEBwYXJhbSBmb2xkZXJQYXRoCi0JICogICAgICAgICAgICB0aGUgY29udGFpbmVyIHBhdGggd2l0aGluIHRoZSB3b3Jrc3BhY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbXBvcnRGaWxlKEZpbGUgZmlsZVRvSW1wb3J0LCBTdHJpbmcgZm9sZGVyUGF0aCkgewotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wb3J0UHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCXRyeSB7Ci0JCQlpZiAoZmlsZVRvSW1wb3J0LmV4aXN0cygpKSB7Ci0JCQkJSVBhdGggY29udGFpbmVyUGF0aCA9IG5ldyBQYXRoKGZvbGRlclBhdGgpOwotCQkJCUlJbXBvcnRTdHJ1Y3R1cmVQcm92aWRlciBwcm92aWRlciA9IEZpbGVTeXN0ZW1TdHJ1Y3R1cmVQcm92aWRlci5JTlNUQU5DRTsKLQkJCQlJT3ZlcndyaXRlUXVlcnkgb3ZlcndyaXRlSW1wbGVtZW50b3IgPSBuZXcgTXlPdmVyd3JpdGVRdWVyeSgpOwotCQkJCUZpbGVbXSBmaWxlc1RvSW1wb3J0ID0ge2ZpbGVUb0ltcG9ydH07Ci0JCQkJSW1wb3J0T3BlcmF0aW9uIGltcG9ydE9wID0gbmV3IEltcG9ydE9wZXJhdGlvbihjb250YWluZXJQYXRoLCBudWxsLCBwcm92aWRlciwgb3ZlcndyaXRlSW1wbGVtZW50b3IsIEFycmF5cy5hc0xpc3QoZmlsZXNUb0ltcG9ydCkpOwotCQkJCWltcG9ydE9wLnNldENyZWF0ZUNvbnRhaW5lclN0cnVjdHVyZShmYWxzZSk7Ci0JCQkJaW1wb3J0T3Auc2V0T3ZlcndyaXRlUmVzb3VyY2VzKHRydWUpOwotCQkJCWltcG9ydE9wLnJ1bihpbXBvcnRQcm9ncmVzcyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImhhbmRsZSBzb3VyY2UgZG9lc24ndCBleGlzdCIpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaW1wb3J0UHJvZ3Jlc3MuZG9uZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogdGhlIGZvbGxvd2luZyBpcyBsb2dpYyBmcm9tCi0JICogaHR0cDovL3d3dy5kZXZzaGVkLmNvbS9jL2EvSmF2YS9aaXAtTWVldHMtSmF2YS8yLwotCSAqLwotCS8vIHNwZWNpZnkgYnVmZmVyIHNpemUgZm9yIGV4dHJhY3Rpb24KLQlzdGF0aWMgZmluYWwgaW50IEJVRkZFUiA9IDIwNDg7Ci0KLQlwdWJsaWMgdm9pZCB1bnppcEFuZEltcG9ydChGaWxlIGluRmlsZSwgU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5KSB7Ci0JCXRyeSB7Ci0JCQkvLyBTcGVjaWZ5IGZpbGUgdG8gZGVjb21wcmVzcwotCQkJLy8gKG5zZCkgcmVkdW5kYW50PwotCQkJLy8gU3RyaW5nIGluRmlsZU5hbWUgPSBpbkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0JCQkvLyAvLyJjOi9leGFtcGxlLnppcCI7Ci0JCQkvLyBGaWxlIHNvdXJjZVppcEZpbGUgPSBuZXcgRmlsZShpbkZpbGVOYW1lKTsKLQkJCUZpbGUgc291cmNlWmlwRmlsZSA9IGluRmlsZTsKLQotCQkJLy8gU3BlY2lmeSBkZXN0aW5hdGlvbiB3aGVyZSBmaWxlIHdpbGwgYmUgdW56aXBwZWQKLQkJCS8vIFN0cmluZyBkZXN0aW5hdGlvbkRpcmVjdG9yeSA9Ci0JCQkvLyAiZDovZWNsaXBzZWRldi9NNV9TU0VfVEVTVFNfV09SS1NQQUNFLyI7IC8vImM6L3RlbXAvIjsKLQkJCUZpbGUgdW56aXBEZXN0aW5hdGlvbkRpcmVjdG9yeSA9IG5ldyBGaWxlKGRlc3RpbmF0aW9uRGlyZWN0b3J5KTsKLQkJCS8vIE9wZW4gWmlwIGZpbGUgZm9yIHJlYWRpbmcKLQkJCVppcEZpbGUgemlwRmlsZSA9IG5ldyBaaXBGaWxlKHNvdXJjZVppcEZpbGUsIFppcEZpbGUuT1BFTl9SRUFEKTsKLQkJCUlQcm9qZWN0IGN1cnJlbnRQcm9qZWN0ID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJLy8gQ3JlYXRlIGFuIGVudW1lcmF0aW9uIG9mIHRoZSBlbnRyaWVzIGluIHRoZSB6aXAgZmlsZQotCQkJCUVudW1lcmF0aW9uIHppcEZpbGVFbnRyaWVzID0gemlwRmlsZS5lbnRyaWVzKCk7Ci0JCQkJU3RyaW5nIHByb2plY3RGb2xkZXJOYW1lID0gbnVsbDsKLQotCQkJCS8vIFByb2Nlc3MgZWFjaCBlbnRyeQotCQkJCXdoaWxlICh6aXBGaWxlRW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJCQkvLyBncmFiIGEgemlwIGZpbGUgZW50cnkKLQkJCQkJWmlwRW50cnkgZW50cnkgPSAoWmlwRW50cnkpIHppcEZpbGVFbnRyaWVzLm5leHRFbGVtZW50KCk7Ci0JCQkJCVN0cmluZyBjdXJyZW50RW50cnkgPSBlbnRyeS5nZXROYW1lKCk7Ci0JCQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbigiRXh0cmFjdGluZzogIiArIGVudHJ5KTsKLQkJCQkJRmlsZSBkZXN0RmlsZSA9IG5ldyBGaWxlKHVuemlwRGVzdGluYXRpb25EaXJlY3RvcnksIGN1cnJlbnRFbnRyeSk7Ci0JCQkJCS8vIGdyYWIgZmlsZSdzIHBhcmVudCBkaXJlY3Rvcnkgc3RydWN0dXJlCi0JCQkJCUZpbGUgZGVzdGluYXRpb25QYXJlbnQgPSBkZXN0RmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0JCQkJCS8vIGNyZWF0ZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaWYgbmVlZGVkCi0JCQkJCWRlc3RpbmF0aW9uUGFyZW50Lm1rZGlycygpOwotCQkJCQkvLyBleHRyYWN0IGZpbGUgaWYgbm90IGEgZGlyZWN0b3J5Ci0JCQkJCWlmICghZW50cnkuaXNEaXJlY3RvcnkoKSkgewotCQkJCQkJQnVmZmVyZWRJbnB1dFN0cmVhbSBpcyA9IG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKHppcEZpbGUuZ2V0SW5wdXRTdHJlYW0oZW50cnkpKTsKLQkJCQkJCWludCBjdXJyZW50Qnl0ZTsKLQkJCQkJCS8vIGVzdGFibGlzaCBidWZmZXIgZm9yIHdyaXRpbmcgZmlsZQotCQkJCQkJYnl0ZSBkYXRhW10gPSBuZXcgYnl0ZVtCVUZGRVJdOwotCQkJCQkJLy8gd3JpdGUgdGhlIGN1cnJlbnQgZmlsZSB0byBkaXNrCi0JCQkJCQlGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRlc3RGaWxlKTsKLQkJCQkJCUJ1ZmZlcmVkT3V0cHV0U3RyZWFtIGRlc3QgPSBuZXcgQnVmZmVyZWRPdXRwdXRTdHJlYW0oZm9zLCBCVUZGRVIpOwotCQkJCQkJdHJ5IHsKLQkJCQkJCQkvLyByZWFkIGFuZCB3cml0ZSB1bnRpbCBsYXN0IGJ5dGUgaXMgZW5jb3VudGVyZWQKLQkJCQkJCQl3aGlsZSAoKGN1cnJlbnRCeXRlID0gaXMucmVhZChkYXRhLCAwLCBCVUZGRVIpKSAhPSAtMSkgewotCQkJCQkJCQlkZXN0LndyaXRlKGRhdGEsIDAsIGN1cnJlbnRCeXRlKTsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0JCQkJCQlmaW5hbGx5IHsKLQkJCQkJCQlkZXN0LmZsdXNoKCk7Ci0JCQkJCQkJZGVzdC5jbG9zZSgpOwotCQkJCQkJCWlzLmNsb3NlKCk7Ci0JCQkJCQkJZm9zLmNsb3NlKCk7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAocHJvamVjdEZvbGRlck5hbWUgIT0gbnVsbCkKLQkJCQkJCQlpbXBvcnRGaWxlKGRlc3RGaWxlLCBwcm9qZWN0Rm9sZGVyTmFtZSk7Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQkvLyBuZWVkIGhhbmRsZSB0byB0aGUgbWFpbiBwcm9qZWN0IGZvbGRlciB0byBjcmVhdGUKLQkJCQkJCS8vIGNvbnRhaW5lclBhdGgKLQkJCQkJCWlmIChwcm9qZWN0Rm9sZGVyTmFtZSA9PSBudWxsKSB7Ci0JCQkJCQkJcHJvamVjdEZvbGRlck5hbWUgPSBkZXN0RmlsZS5nZXROYW1lKCk7Ci0JCQkJCQkJZkNyZWF0ZWRQcm9qZWN0cy5hZGQocHJvamVjdEZvbGRlck5hbWUpOwotCi0JCQkJCQkJY3VycmVudFByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZmluYWxseSB7Ci0JCQkJemlwRmlsZS5jbG9zZSgpOwotCQkJfQotCi0JCQkvLyBmaXhlcyB3b3Jrc3BhY2UgbWV0YWRhdGEgZm9yIHRoZSBwcm9qZWN0Ci0JCQkvLyBmb3IgY2xlYW4gc3RhcnR1cCBuZXh0IHJ1bgotCQkJaWYgKGN1cnJlbnRQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQlQYXRoIHByb2plY3RMb2NhdGlvbiA9IG5ldyBQYXRoKFBsYXRmb3JtLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpKTsKLQkJCQkJY3JlYXRlUHJvamVjdChjdXJyZW50UHJvamVjdCwgcHJvamVjdExvY2F0aW9uLCBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZXgpIHsKLQkJCQkJY2V4LnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7Ci0JCQlpb2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWZyZXNoV29ya3NwYWNlKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gd3NSb290LmdldFByb2plY3RzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCXByb2plY3RzW2ldLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQl9Ci0JCXdzUm9vdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiBEZWxldGUgcHJvamVjdHMgY3JlYXRlZCAodW56aXBwZWQgYW5kIGltcG9ydGVkKSBieSB0aGlzIHV0aWxpdHkKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIGRlbGV0ZVByb2plY3RzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIElQcm9qZWN0W10gcHJvamVjdHMgPSBnZXRDcmVhdGVkUHJvamVjdHMoKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbigpIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0cy5sZW5ndGg7IGkrKykgewotCQkJCQlwcm9qZWN0c1tpXS5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCXByb2plY3RzW2ldLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qZWN0c1tpXS5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIHByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQlkZWxldGVPcC5ydW4ocHJvZ3Jlc3MpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KFN0cmluZyBwcm9qZWN0TmFtZSkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZpbmFsIFN0cmluZyBuYW1lID0gcHJvamVjdE5hbWU7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCWZpbmFsIElQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uIGRlbGV0ZU9wID0gbmV3IFdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbihwcm9qKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCS8vIElXb3Jrc3BhY2VSb290IHdzUm9vdCA9Ci0JCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJCQkvLyBJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCQkJaWYgKHByb2ogIT0gbnVsbCAmJiBwcm9qLmV4aXN0cygpKSB7Ci0JCQkJCXByb2ouY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQkvLyBwcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQl0cnkgewotCQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkvLyBqdXN0IHRyeSBhZ2FpbiAobm90IHN1cmUgd2h5IHRoZXkgYXJlIG5vdCBiZWluZwotCQkJCQkJLy8gZGVsZXRlZCkKLQkJCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQkvLyBwcm9qID0gbnVsbDsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCWRlbGV0ZU9wLnJ1bihwcm9ncmVzcyk7Ci0JCS8vIHNhdmVzIHRoZSBuZXcgd29ya3NwYWNlIG1ldGFkYXRhCi0JCVJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gSVByb2plY3RzIHRoYXQgd2VyZSB1bnppcHBlZCBhbmQgaW1wb3J0ZWQgaW50byB0aGUgd29ya3NwYWNlIGJ5Ci0JICogICAgICAgICB0aGlzIHV0aWxpdHkKLQkgKi8KLQlwdWJsaWMgSVByb2plY3RbXSBnZXRDcmVhdGVkUHJvamVjdHMoKSB7Ci0JCUlXb3Jrc3BhY2VSb290IHdzUm9vdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCVN0cmluZ1tdIHByb2plY3ROYW1lcyA9IChTdHJpbmdbXSkgZkNyZWF0ZWRQcm9qZWN0cy50b0FycmF5KG5ldyBTdHJpbmdbZkNyZWF0ZWRQcm9qZWN0cy5zaXplKCldKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IG5ldyBJUHJvamVjdFtwcm9qZWN0TmFtZXMubGVuZ3RoXTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9qZWN0TmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCXByb2plY3RzW2ldID0gd3NSb290LmdldFByb2plY3QocHJvamVjdE5hbWVzW2ldKTsKLQkJfQotCQlyZXR1cm4gcHJvamVjdHM7Ci0JfQotCi0JcHVibGljIHZvaWQgaW5pdEphdmFQcm9qZWN0KFN0cmluZyBwcm9qTmFtZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlQbGF0Zm9ybS5nZXRKb2JNYW5hZ2VyKCkuYmVnaW5SdWxlKFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCksIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkvLyByZXN5bmNoCi0JCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJLy8gY2hhbmdlIHByZXJlcXMgdG8gZ2V0IHRoaXMgZnVuY3Rpb25hbGl0eSBiYWNrIGluCi0JCUlQcm9qZWN0IHByb2ogPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQkKLQkJaWYgKCFwcm9qLmV4aXN0cygpKSB7Ci0JCQkKLQkJCXByb2ouY3JlYXRlKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWlmICghcHJvai5pc09wZW4oKSkgewotCQkJcHJvai5vcGVuKG51bGwpOwotCQl9Ci0JCS8vIG5lZWQgdG8gYWRkIGphdmEgbmF0dXJlLCBvciBlbHNlIHByb2plY3Qgd29uJ3QgImV4aXN0KCkiIGluIHRoZQotCQkvLyBqYXZhCi0JCS8vIGVsZW1lbnQgc2Vuc2UKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvai5nZXREZXNjcmlwdGlvbigpOwotCQlMaXN0IG5hdHVyZXMgPSBuZXcgQXJyYXlMaXN0KEFycmF5cy5hc0xpc3QoZGVzYy5nZXROYXR1cmVJZHMoKSkpOwotCQlpZiAoIW5hdHVyZXMuY29udGFpbnMoSmF2YUNvcmUuTkFUVVJFX0lEKSkKLQkJCW5hdHVyZXMuYWRkKEphdmFDb3JlLk5BVFVSRV9JRCk7Ci0JCWRlc2Muc2V0TmF0dXJlSWRzKChTdHJpbmdbXSkgbmF0dXJlcy50b0FycmF5KG5ldyBTdHJpbmdbMF0pKTsKLQkJcHJvai5zZXREZXNjcmlwdGlvbihkZXNjLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJUGxhdGZvcm0uZ2V0Sm9iTWFuYWdlcigpLmVuZFJ1bGUoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KElQcm9qZWN0IGZQcm9qZWN0KSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gZlByb2plY3Q7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLyBJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8gSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy8gcHJvai5jbG9zZShudWxsKTsKLQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCS8vIHByb2ogPSBudWxsOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCS8vIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKG51bGwpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1Byb2plY3RVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvUHJvamVjdFV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM4YjU0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvUHJvamVjdFV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3NyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZvbGRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSdW5uYWJsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpkdC5jb3JlLklDbGFzc3BhdGhFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZHQuY29yZS5JSmF2YVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YU1vZGVsRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuSlNQVUlUZXN0c1BsdWdpbjsKLQotLyoqCi0gKiBTb21lIHV0aWxpdGllcyBmb3IgY3JlYXRpbmcgcHJvamVjdHMsIGFuZCBjb3B5aW5nIGZpbGVzIGludG8gdGhlIHdvcmtzcGFjZS4KLSAqLwotcHVibGljIGNsYXNzIFByb2plY3RVdGlsIHsKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEpBVkFfTkFUVVJFX0lEID0gIm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmUiOwotCQotCS8qKgotCSAqIEFkZCBhIGxpYnJhcnkgZW50cnkgKGxpa2UgYSBqYXIpIHRvIHRoZSBjbGFzc3BhdGggb2YgYSBwcm9qZWN0LgotCSAqIFRoZSBqYXIgbXVzdCBiZSBpbiB5b3VyIHBvamVjdC4gWW91IGNhbiBjb3B5IHRoZSBqYXIgaW50byB5b3VyIHdvcmtzcGFjZSB1c2luZwotCSAqIGNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoU3RyaW5nIGVudHJ5bmFtZSwgU3RyaW5nIGZ1bGxQYXRoKQotCSAqIAotCSAqIEBwYXJhbSBwcm9qIGFzc3VtZWQgaXQgaGFzIGphdmEgbmF0dXJlCi0JICogQHBhcmFtIHBhdGhUb0phciBwcm9qZWN0IHJlbGF0aXZlLCBubyBsZWFkaW5nIHNsYXNoCi0JICovCi0JcHVibGljIHN0YXRpYyB2b2lkIGFkZExpYnJhcnlFbnRyeShJUHJvamVjdCBwcm9qLCBTdHJpbmcgcGF0aFRvSmFyKSB7Ci0JCQotCQlJUGF0aCBwcm9qTG9jYXRpb24gPSBwcm9qLmdldExvY2F0aW9uKCk7Ci0JCUlQYXRoIGFic0phclBhdGggPSBwcm9qTG9jYXRpb24uYXBwZW5kKHBhdGhUb0phcik7Ci0JCQotCQlJSmF2YVByb2plY3QgalByb2ogPSBKYXZhQ29yZS5jcmVhdGUocHJvaik7Ci0JCQotCQlJQ2xhc3NwYXRoRW50cnkgc3RydXRzSmFyRW50cnkgPSBKYXZhQ29yZS5uZXdMaWJyYXJ5RW50cnkoYWJzSmFyUGF0aCwgbnVsbCwgbnVsbCk7Ci0JCXRyeSB7Ci0JCQlJQ2xhc3NwYXRoRW50cnlbXSBjdXJyZW50RW50cmllcyA9IGpQcm9qLmdldFJhd0NsYXNzcGF0aCgpOwotCQkJCi0JCQlMaXN0IGwgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCQlsLmFkZEFsbChBcnJheXMuYXNMaXN0KGN1cnJlbnRFbnRyaWVzKSk7Ci0JCQlsLmFkZChzdHJ1dHNKYXJFbnRyeSk7Ci0JCQkKLQkJCUlDbGFzc3BhdGhFbnRyeVtdIG5ld0VudHJpZXMgPSAoSUNsYXNzcGF0aEVudHJ5W10pbC50b0FycmF5KG5ldyBJQ2xhc3NwYXRoRW50cnlbbC5zaXplKCldKTsKLQkJCWpQcm9qLnNldFJhd0NsYXNzcGF0aChuZXdFbnRyaWVzLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoSmF2YU1vZGVsRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0JCi0JfQotCi0Jc3RhdGljIHZvaWQgX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShmaW5hbCBTdHJpbmcgcm9vdEVudHJ5LCBmaW5hbCBTdHJpbmcgZnVsbFRhcmdldFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJRW51bWVyYXRpb24gZW50cmllcyA9IEpTUFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5UGF0aHMocm9vdEVudHJ5KTsKLQkJd2hpbGUgKGVudHJpZXMgIT0gbnVsbCAmJiBlbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQlTdHJpbmcgZW50cnlQYXRoID0gZW50cmllcy5uZXh0RWxlbWVudCgpLnRvU3RyaW5nKCk7Ci0JCQlTdHJpbmcgdGFyZ2V0UGF0aCA9IG5ldyBQYXRoKGZ1bGxUYXJnZXRQYXRoICsgIi8iICsgZW50cnlQYXRoLnN1YnN0cmluZyhyb290RW50cnkubGVuZ3RoKCkpKS50b1N0cmluZygpOwotCQkJaWYgKGVudHJ5UGF0aC5lbmRzV2l0aCgiLyIpKSB7Ci0JCQkJSUZvbGRlciBmb2xkZXIgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZvbGRlcihuZXcgUGF0aCh0YXJnZXRQYXRoKSk7Ci0JCQkJaWYgKCFmb2xkZXIuZXhpc3RzKCkpIHsKLQkJCQkJZm9sZGVyLmNyZWF0ZSh0cnVlLCB0cnVlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCQl9Ci0JCQkJX2NvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZShlbnRyeVBhdGgsIHRhcmdldFBhdGgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZW50cnlQYXRoLCB0YXJnZXRQYXRoKTsKLQkJCX0KLQkJCS8vIFN5c3RlbS5vdXQucHJpbnRsbihlbnRyeVBhdGggKyAiIC0+ICIgKyB0YXJnZXRQYXRoKTsKLQkJfQotCX0KLQotCXN0YXRpYyBJRmlsZSBfY29weUJ1bmRsZUVudHJ5SW50b1dvcmtzcGFjZShTdHJpbmcgZW50cnluYW1lLCBTdHJpbmcgZnVsbFBhdGgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IG51bGw7Ci0JCVVSTCBlbnRyeSA9IEpTUFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGVudHJ5bmFtZSk7Ci0JCWlmIChlbnRyeSAhPSBudWxsKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBiID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQkJSW5wdXRTdHJlYW0gaW5wdXQgPSBlbnRyeS5vcGVuU3RyZWFtKCk7Ci0JCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIG91dHB1dCA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCQlpbnQgaSA9IC0xOwotCQkJCXdoaWxlICgoaSA9IGlucHV0LnJlYWQoYikpID4gLTEpIHsKLQkJCQkJb3V0cHV0LndyaXRlKGIsIDAsIGkpOwotCQkJCX0KLQkJCQlmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZ1bGxQYXRoKSk7Ci0JCQkJaWYgKGZpbGUgIT0gbnVsbCkgewotCQkJCQlpZiAoIWZpbGUuZXhpc3RzKCkpIHsKLQkJCQkJCWZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShvdXRwdXQudG9CeXRlQXJyYXkoKSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJZmlsZS5zZXRDb250ZW50cyhuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0ob3V0cHV0LnRvQnl0ZUFycmF5KCkpLCB0cnVlLCBmYWxzZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weUJ1bmRsZUVudHJpZXNJbnRvV29ya3NwYWNlKGZpbmFsIFN0cmluZyByb290RW50cnksIGZpbmFsIFN0cmluZyBmdWxsVGFyZ2V0UGF0aCkgewotCQlJV29ya3NwYWNlUnVubmFibGUgcnVubmFibGUgPSBuZXcgSVdvcmtzcGFjZVJ1bm5hYmxlKCkgewotCQkJcHVibGljIHZvaWQgcnVuKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCV9jb3B5QnVuZGxlRW50cmllc0ludG9Xb3Jrc3BhY2Uocm9vdEVudHJ5LCBmdWxsVGFyZ2V0UGF0aCk7Ci0JCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmNoZWNrcG9pbnQodHJ1ZSk7Ci0JCQl9Ci0JCX07Ci0JCXRyeSB7Ci0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKHJ1bm5hYmxlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogCi0JICogQHBhcmFtIGVudHJ5bmFtZSBwYXRoIHJlbGF0aXZlIHRvIFRFU1QgcGx1Z2luIHN0YXJ0aW5nIHcvIGEgIi8iCi0JICogCQkJCQkJKGVnLiAiL3Rlc3RmaWxlcy9idWdudW1iZXIvc3RydXRzLWxvZ2ljLnRsZCIpCi0JICogQHBhcmFtIGZ1bGxQYXRoIHBhdGggcmVsYXRpdmUgdG8ganVuaXQgdGVzdCB3b3JrcGFjZQotCSAqIAkJCQkJCShlZy4gIi9teXJ1bnRpbWVwcm9qL3N0cnV0cy1sb2dpYy50bGQiKQotCSAqIEByZXR1cm4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElGaWxlIGNvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZmluYWwgU3RyaW5nIGVudHJ5bmFtZSwgZmluYWwgU3RyaW5nIGZ1bGxQYXRoKSB7Ci0JCWZpbmFsIElGaWxlIGZpbGVbXSA9IG5ldyBJRmlsZVsxXTsKLQkJSVdvcmtzcGFjZVJ1bm5hYmxlIHJ1bm5hYmxlID0gbmV3IElXb3Jrc3BhY2VSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bihJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQlmaWxlWzBdID0gX2NvcHlCdW5kbGVFbnRyeUludG9Xb3Jrc3BhY2UoZW50cnluYW1lLCBmdWxsUGF0aCk7Ci0JCQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmNoZWNrcG9pbnQodHJ1ZSk7Ci0JCQl9Ci0JCX07Ci0JCXRyeSB7Ci0JCQlSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkucnVuKHJ1bm5hYmxlLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBmaWxlWzBdOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljICBJUHJvamVjdCBjcmVhdGVQcm9qZWN0KFN0cmluZyBuYW1lLCBJUGF0aCBsb2NhdGlvbiwgU3RyaW5nW10gbmF0dXJlSWRzKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKG5hbWUpOwotCQlpZiAobG9jYXRpb24gIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TG9jYXRpb24obG9jYXRpb24pOwotCQl9Ci0JCWlmIChuYXR1cmVJZHMgIT0gbnVsbCkgewotCQkJZGVzY3JpcHRpb24uc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCX0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChuYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3V0aWwvVGltZXN0YW1wVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhODU2ZGM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUaGlzIGNsYXNzIHByb3ZpZGVzIG9uZSB0aW1lc3RhbXAgcGVyIFZNIHJ1bi4KLSAqIChUZWNobmljYWxseSwgcGVyIGNsYXNzIGxvYWRpbmcuKQotICovCi1wdWJsaWMgY2xhc3MgVGltZXN0YW1wVXRpbCB7Ci0KLQlwcml2YXRlIHN0YXRpYyBEYXRlIHRpbWVzdGFtcCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgRGF0ZUZvcm1hdCBzaG9ydEZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCIpOwotCS8vCXByaXZhdGUgc3RhdGljIERhdGVGb3JtYXQgbG9uZ0Zvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCctJ2trJy0nbW0nLSdzcyIpOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIG5vd1Nob3J0ID0gbnVsbDsKLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHRpbWVzdGFtcCgpIHsKLQotCQlpZiAoVGltZXN0YW1wVXRpbC5ub3dTaG9ydCA9PSBudWxsKSB7Ci0JCQlUaW1lc3RhbXBVdGlsLm5vd1Nob3J0ID0gc2hvcnRGb3JtYXQuZm9ybWF0KGVuc3VyZVRpbWVzdGFtcCgpKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC5ub3dTaG9ydDsKLQl9Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIERhdGUgZW5zdXJlVGltZXN0YW1wKCkgewotCQkvLyBqdXN0IGNhbGN1bGF0ZSAndGltZXN0YW1wJyBvbmNlIHBlciBjbGFzcyBsb2FkaW5nLCAKLQkJLy8gc28gdGhpcyAndGltZXN0YW1wJyByZW1haW5zIHRoZSBzYW1lIGR1cmluZyAKLQkJLy8gZW50aXJlIHJ1bi4gCi0JCWlmIChUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9PSBudWxsKSB7Ci0JCQlDYWxlbmRhciBjYWxlbmRhciA9IENhbGVuZGFyLmdldEluc3RhbmNlKCk7Ci0JCQlUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCA9IGNhbGVuZGFyLmdldFRpbWUoKTsKLQkJfQotCQlyZXR1cm4gVGltZXN0YW1wVXRpbC50aW1lc3RhbXA7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhM2YxMDdhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdXRpbC9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLWNsYXNzIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBsZW1lbnRzIElQcm9ncmVzc01vbml0b3IgewotCXByaXZhdGUgYm9vbGVhbiBmaW5pc2hlZCA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgYmVnaW5UYXNrKFN0cmluZyBuYW1lLCBpbnQgdG90YWxXb3JrKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgZG9uZSgpIHsKLQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzRmluaXNoZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbnRlcm5hbFdvcmtlZChkb3VibGUgd29yaykgewotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsZWQoKSB7Ci0JCXJldHVybiBmaW5pc2hlZDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRDYW5jZWxlZChib29sZWFuIHZhbHVlKSB7Ci0JCWlmICh2YWx1ZSA9PSB0cnVlKQotCQkJZmluaXNoZWQgPSB0cnVlOwotCX0KLQotCXB1YmxpYyB2b2lkIHNldFRhc2tOYW1lKFN0cmluZyBuYW1lKSB7Ci0JfQotCi0JcHVibGljIHZvaWQgc3ViVGFzayhTdHJpbmcgbmFtZSkgewotCX0KLQotCXB1YmxpYyB2b2lkIHdvcmtlZChpbnQgd29yaykgewotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vSlNQSFRNTFZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmFsaWRhdGlvbi9KU1BIVE1MVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNjc4MDA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmFsaWRhdGlvbi9KU1BIVE1MVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamR0LmNvcmUuSmF2YUNvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uSlNQQ29udGVudFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnV0aWwuUHJvamVjdFV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci0KLS8qKgotICogVGVzdHMgSFRNTCB2YWxpZGF0b3Igb24ganNwIGZpbGUKLSAqLwotcHVibGljIGNsYXNzIEpTUEhUTUxWYWxpZGF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCVN0cmluZyB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiYnVnXzE0MzIwOSI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQlTdHJpbmcgbm9uaW50ZXJhY3RpdmUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIpOwotCQlpZiAobm9uaW50ZXJhY3RpdmUgIT0gbnVsbCkKLQkJCXd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSA9IG5vbmludGVyYWN0aXZlOwotCQlTeXN0ZW0uc2V0UHJvcGVydHkoInd0cC5hdXRvdGVzdC5ub25pbnRlcmFjdGl2ZSIsICJ0cnVlIik7Ci0KLQkJaWYgKCFSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKS5leGlzdHMoKSkgewotCQkJUHJvamVjdFV0aWwuY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUsIG51bGwsIG5ldyBTdHJpbmdbXXtKYXZhQ29yZS5OQVRVUkVfSUR9KTsKLQkJCVByb2plY3RVdGlsLmNvcHlCdW5kbGVFbnRyaWVzSW50b1dvcmtzcGFjZSgiL3Rlc3RmaWxlcy8iICsgUFJPSkVDVF9OQU1FLCAiLyIgKyBQUk9KRUNUX05BTUUpOwotCQl9Ci0JCWFzc2VydFRydWUoInByb2plY3QgY291bGQgbm90IGJlIGNyZWF0ZWQiLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoUFJPSkVDVF9OQU1FKS5leGlzdHMoKSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQkJaWYgKHd0cF9hdXRvdGVzdF9ub25pbnRlcmFjdGl2ZSAhPSBudWxsKQotCQkJU3lzdGVtLnNldFByb3BlcnR5KCJ3dHAuYXV0b3Rlc3Qubm9uaW50ZXJhY3RpdmUiLCB3dHBfYXV0b3Rlc3Rfbm9uaW50ZXJhY3RpdmUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGpzcCBleHByZXNzaW9uIGluIGh0bWwgYXR0cmlidXRlcyBpbiBqc3AgZmlsZQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEpTUGluQXR0cmlidXRlcygpIHRocm93cyBFeGNlcHRpb24gewotCQlKU1BDb250ZW50VmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBKU1BDb250ZW50VmFsaWRhdG9yKCk7Ci0JCUlSZXBvcnRlciByZXBvcnRlciA9IG5ldyBSZXBvcnRlckZvclRlc3QoKTsKLQkJVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGhlbHBlciA9IG5ldyBWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QoKTsKLQkJU3RyaW5nIGZpbGVQYXRoID0gIi8iICsgUFJPSkVDVF9OQU1FICsgIi9XZWJDb250ZW50L3VzZWpzcGluYXR0cmlidXRlLmpzcCI7Ci0JCWhlbHBlci5zZXRVUkkoZmlsZVBhdGgpOwotCQl2YWxpZGF0b3IudmFsaWRhdGUoaGVscGVyLCByZXBvcnRlcik7Ci0KLQkJYXNzZXJ0VHJ1ZSgianNwIGluIGF0dHJpYnV0ZXMgYXJlIGVycm9ycyB3aGVuIHRoZXkgc2hvdWxkIG5vdCBiZSAoaW4gLmpzcCkiLCByZXBvcnRlci5nZXRNZXNzYWdlcygpLmlzRW1wdHkoKSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMganNwIGV4cHJlc3Npb24gaW4gaHRtbCBhdHRyaWJ1dGVzIGluIGh0bWwgZmlsZQotCSAqIAotCSAqIEB0aHJvd3MgRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEpTUGluQXR0cmlidXRlc0hUTUwoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJSlNQQ29udGVudFZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgSlNQQ29udGVudFZhbGlkYXRvcigpOwotCQlJUmVwb3J0ZXIgcmVwb3J0ZXIgPSBuZXcgUmVwb3J0ZXJGb3JUZXN0KCk7Ci0JCVZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCBoZWxwZXIgPSBuZXcgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0KCk7Ci0JCVN0cmluZyBmaWxlUGF0aCA9ICIvIiArIFBST0pFQ1RfTkFNRSArICIvV2ViQ29udGVudC91c2Vqc3BpbmF0dHJpYnV0ZS5odG1sIjsKLQkJaGVscGVyLnNldFVSSShmaWxlUGF0aCk7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKLQotCQlhc3NlcnRUcnVlKCJqc3AgaW4gYXR0cmlidXRlcyBhcmUgbm90IGVycm9ycyB3aGVuIHRoZXkgc2hvdWxkIGJlIChpbiAuaHRtbCkiLCAhcmVwb3J0ZXIuZ2V0TWVzc2FnZXMoKS5pc0VtcHR5KCkpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGJhZCBhdHRyaWJ1dGUgbmFtZXMgaW4ganNwIGZpbGUgZmFsc2UKLQkgKiAKLQkgKiBAdGhyb3dzIEV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCYWRBdHRyaWJ1dGVOYW1lKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCUpTUENvbnRlbnRWYWxpZGF0b3IgdmFsaWRhdG9yID0gbmV3IEpTUENvbnRlbnRWYWxpZGF0b3IoKTsKLQkJSVJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFJlcG9ydGVyRm9yVGVzdCgpOwotCQlWYWxpZGF0aW9uQ29udGV4dEZvclRlc3QgaGVscGVyID0gbmV3IFZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdCgpOwotCQlTdHJpbmcgZmlsZVBhdGggPSAiLyIgKyBQUk9KRUNUX05BTUUgKyAiL1dlYkNvbnRlbnQvYmFkYXR0cmlidXRlbmFtZXMuanNwIjsKLQkJaGVscGVyLnNldFVSSShmaWxlUGF0aCk7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZShoZWxwZXIsIHJlcG9ydGVyKTsKLQotCQlhc3NlcnRUcnVlKCJiYWQgYXR0cmlidXRlIG5hbWUgaXMgbm90IGVycm9yIHdoZW4gaXQgc2hvdWxkIGJlIiwgIXJlcG9ydGVyLmdldE1lc3NhZ2VzKCkuaXNFbXB0eSgpKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vUmVwb3J0ZXJGb3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vUmVwb3J0ZXJGb3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlYTk4YWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92YWxpZGF0aW9uL1JlcG9ydGVyRm9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb247Ci0KLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwuY29yZS5JTWVzc2FnZUFjY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVJlcG9ydGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSVZhbGlkYXRvcjsKLQotY2xhc3MgUmVwb3J0ZXJGb3JUZXN0IGltcGxlbWVudHMgSVJlcG9ydGVyIHsKLQlMaXN0IGxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQlwdWJsaWMgUmVwb3J0ZXJGb3JUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZE1lc3NhZ2UoSVZhbGlkYXRvciBvcmlnaW4sIElNZXNzYWdlIG1lc3NhZ2UpIHsKLQkJbGlzdC5hZGQobWVzc2FnZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGlzcGxheVN1YnRhc2soSVZhbGlkYXRvciB2YWxpZGF0b3IsIElNZXNzYWdlIG1lc3NhZ2UpIHsKLQkJLyogZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50ICovCi0JfQotCi0JcHVibGljIElNZXNzYWdlQWNjZXNzIGdldE1lc3NhZ2VBY2Nlc3MoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBib29sZWFuIGlzQ2FuY2VsbGVkKCkgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlQWxsTWVzc2FnZXMoSVZhbGlkYXRvciBvcmlnaW4sIE9iamVjdCBvYmplY3QpIHsgLy8gZG8KLQkJLyogZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50ICovCi0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlQWxsTWVzc2FnZXMoSVZhbGlkYXRvciBvcmlnaW4pIHsKLQkJLyogZG8gbm90IG5lZWQgdG8gaW1wbGVtZW50ICovCi0JfQotCi0JcHVibGljIHZvaWQgcmVtb3ZlTWVzc2FnZVN1YnNldChJVmFsaWRhdG9yIHZhbGlkYXRvciwgT2JqZWN0IG9iaiwgU3RyaW5nIGdyb3VwTmFtZSkgey8vIGRvCi0JCS8qIGRvIG5vdCBuZWVkIHRvIGltcGxlbWVudCAqLwotCX0KLQotCXB1YmxpYyBMaXN0IGdldE1lc3NhZ2VzKCkgewotCQlyZXR1cm4gbGlzdDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZhbGlkYXRpb24vVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmNjEzZmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92YWxpZGF0aW9uL1ZhbGlkYXRpb25Db250ZXh0Rm9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzLnZhbGlkYXRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklWYWxpZGF0aW9uQ29udGV4dDsKLQotY2xhc3MgVmFsaWRhdGlvbkNvbnRleHRGb3JUZXN0IGltcGxlbWVudHMgSVZhbGlkYXRpb25Db250ZXh0IHsKLQlwcml2YXRlIFN0cmluZyBmVVJJID0gbnVsbDsKLQotCXB1YmxpYyB2b2lkIHNldFVSSShTdHJpbmcgdXJpKSB7Ci0JCWZVUkkgPSB1cmk7Ci0JfQotCi0JcHVibGljIFN0cmluZ1tdIGdldFVSSXMoKSB7Ci0JCWlmIChmVVJJICE9IG51bGwpCi0JCQlyZXR1cm4gbmV3IFN0cmluZ1tde2ZVUkl9OwotCQlyZXR1cm4gbmV3IFN0cmluZ1swXTsKLQl9Ci0KLQlwdWJsaWMgT2JqZWN0IGxvYWRNb2RlbChTdHJpbmcgc3ltYm9saWNOYW1lKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBPYmplY3QgbG9hZE1vZGVsKFN0cmluZyBzeW1ib2xpY05hbWUsIE9iamVjdFtdIHBhcm1zKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1AuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL2pzdC9qc3AvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uSlNQLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZTlhMmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1AuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JQXV0b0VkaXRTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHREb3VibGVDbGlja1N0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRIb3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5mb3JtYXR0ZXIuSUNvbnRlbnRGb3JtYXR0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5oeXBlcmxpbmsuSUh5cGVybGlua0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaW5mb3JtYXRpb24uSUluZm9ybWF0aW9uUHJlc2VudGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5JUmVjb25jaWxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbkhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AuY29yZS50ZXh0LklKU1BQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSlNQOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRleHQuSUhUTUxQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGV4dC5JWE1MUGFydGl0aW9uczsKLQotLyoqCi0gKiBAYXV0aG9yIHBhdmVyeQotICovCi1wdWJsaWMgY2xhc3MgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1AgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gICAgCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1AgZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGZEaXNwbGF5RXhpc3RzID0gdHJ1ZTsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZWaWV3ZXIgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JCi0gICAgcHVibGljIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSlNQKCkgewotICAgICAgICBzdXBlcigiVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25KU1AiKTsKLSAgICB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0gICAgCXN1cGVyLnNldFVwKCk7Ci0JCWlmKCF0aGlzLmlzU2V0dXApewotCQkJc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0gICAgfQotCQotCXByaXZhdGUgdm9pZCBzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0KLQkJaWYgKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQkJCQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0JCQkKLQkJCWlmKFBsYXRmb3JtVUkuaXNXb3JrYmVuY2hSdW5uaW5nKCkpIHsKLQkJCQlzaGVsbCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKTsKLQkJCX0KLQkJCWVsc2UgewkKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0JCQkKLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJZlZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCgpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QW5ub3RhdGlvbkhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQW5ub3RhdGlvbkhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRBbm5vdGF0aW9uSG92ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkFubm90YXRpb25Ib3ZlciBpcyBudWxsIiwgaG92ZXIpOwotICAgIH0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQXV0b0VkaXRTdHJhdGVneVtdIHN0cmF0ZWdpZXMgPSBmQ29uZmlnLmdldEF1dG9FZGl0U3RyYXRlZ2llcyhmVmlld2VyLCBJSlNQUGFydGl0aW9ucy5KU1BfREVGQVVMVCk7Ci0JCWFzc2VydE5vdE51bGwoc3RyYXRlZ2llcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBhdXRvIGVkaXQgc3RyYXRlZ2llcyIsIHN0cmF0ZWdpZXMubGVuZ3RoID4gMCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkQ29udGVudFR5cGVzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb25maWd1cmVkQ29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKGNvbmZpZ3VyZWRDb250ZW50VHlwZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBjb250ZW50IHR5cGVzIiwgY29uZmlndXJlZENvbnRlbnRUeXBlcy5sZW5ndGggPiAxKTsKLQl9Ci0JCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50QXNzaXN0YW50KCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQ29udGVudEFzc2lzdGFudCBjYSA9IGZDb25maWcuZ2V0Q29udGVudEFzc2lzdGFudChmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBhc3Npc3RhbnQiLCBjYSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50Rm9ybWF0dGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQ29udGVudEZvcm1hdHRlciBjZiA9IGZDb25maWcuZ2V0Q29udGVudEZvcm1hdHRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBmb3JtYXR0ZXIiLCBjZik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXREb3VibGVDbGlja1N0cmF0ZWd5KCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3kgc3RyYXRlZ3kgPSBmQ29uZmlnLmdldERvdWJsZUNsaWNrU3RyYXRlZ3koZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHN0cmF0ZWd5ICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgZG91YmxlIGNsaWNrIHN0cmF0ZWdpZXMiLCBmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRIeXBlcmxpbmtEZXRlY3RvcnMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlIeXBlcmxpbmtEZXRlY3RvcltdIGRldGVjdG9ycyA9IGZDb25maWcuZ2V0SHlwZXJsaW5rRGV0ZWN0b3JzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzLmxlbmd0aCA+IDEpOwotCX0KLQkKLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW5kZW50UHJlZml4ZXMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nIHByZWZpeGVzW10gPSBmQ29uZmlnLmdldEluZGVudFByZWZpeGVzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihwcmVmaXhlcyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGluZGVudCBwcmVmaXhlcyIsIGZhbHNlKTsKLQl9Ci0JCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yIGluZm9DcmVhdG9yID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yIGlzIG51bGwiLCBpbmZvQ3JlYXRvcik7Ci0gICAgfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlJbmZvcm1hdGlvblByZXNlbnRlciBwcmVzZW50ZXIgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uUHJlc2VudGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJJbmZvcm1hdGlvblByZXNlbnRlciBpcyBudWxsIiwgcHJlc2VudGVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldExpbmVTdHlsZVByb3ZpZGVycygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlMaW5lU3R5bGVQcm92aWRlciBwcm92aWRlcnNbXSA9IGZDb25maWcuZ2V0TGluZVN0eWxlUHJvdmlkZXJzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihwcm92aWRlcnMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBsaW5lIHN0eWxlIHByb3ZpZGVycyIsIGZhbHNlKTsKLQl9Ci0JCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRSZWNvbmNpbGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJUmVjb25jaWxlciByID0gZkNvbmZpZy5nZXRSZWNvbmNpbGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJSZWNvbmNpbGVyIGlzIG51bGwiLCByKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHRIb3ZlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGhvdmVyUGFydGl0aW9ucyA9IG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULAotCQkJCQkJCQkJCQkJCUlIVE1MUGFydGl0aW9ucy5TQ1JJUFQsCi0JCQkJCQkJCQkJCQkJSUpTUFBhcnRpdGlvbnMuSlNQX0RFRkFVTFQsCi0JCQkJCQkJCQkJCQkJSUpTUFBhcnRpdGlvbnMuSlNQX0RJUkVDVElWRSwKLQkJCQkJCQkJCQkJCQlJSlNQUGFydGl0aW9ucy5KU1BfQ09OVEVOVF9KQVZBLAotCQkJCQkJCQkJCQkJCUlYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUfTsKLQkJCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgaG92ZXJQYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQlJVGV4dEhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRUZXh0SG92ZXIoZlZpZXdlciwgaG92ZXJQYXJ0aXRpb25zW2ldLCBTV1QuTk9ORSk7Ci0JCQlhc3NlcnROb3ROdWxsKCJob3ZlciB3YXMgbnVsbCBmb3IgcGFydGl0aW9uOiAiICsgaG92ZXJQYXJ0aXRpb25zW2ldLCBob3Zlcik7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0SlNQLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS9qc3QvanNwL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0SlNQLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIwN2U1MGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2UvanN0L2pzcC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdEpTUC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDk2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JKU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuanN0LmpzcC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1A7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkluZGV4ZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci0KLXB1YmxpYyBjbGFzcyBWaWV3ZXJUZXN0SlNQIGV4dGVuZHMgVmlld1BhcnQgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFNTRV9FRElUT1JfRk9OVCA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRleHRmb250IjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBERUZBVUxUX1ZJRVdFUl9DT05URU5UUyA9ICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xXCIgJT5cbiI7Ci0KLQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmU291cmNlVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIElDb250ZW50T3V0bGluZVBhZ2UgZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbnVsbDsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZpZXdlcidzIGhpZ2hsaWdodGluZyB0ZXh0IHJhbmdlIHRvIHRoZSB0ZXh0IHJhbmdlIGluZGljYXRlZAotCSAqIGJ5IHRoZSBzZWxlY3RlZCBOb2Rlcy4KLQkgKi8KLQlwcm90ZWN0ZWQgY2xhc3MgTm9kZVJhbmdlU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKLQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJCWlmICghZXZlbnQuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGV2ZW50LmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpOwotCQkJCUluZGV4ZWRSZWdpb24gc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQlJbmRleGVkUmVnaW9uIGVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgc2VsZWN0aW9uLnRvQXJyYXkoKVtzZWxlY3Rpb24uc2l6ZSgpIC0gMV07Ci0KLQkJCQlpZiAoc3RhcnROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgc3RhcnROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQlpZiAoZW5kTm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCWVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBlbmROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQotCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCWludCBlbmQgPSBlbmROb2RlLmdldEVuZE9mZnNldCgpOwotCi0JCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQlmU291cmNlVmlld2VyLnNldFNlbGVjdGVkUmFuZ2Uoc3RhcnQsIDApOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBjbGFzcyBOdW1iZXJJbnB1dERpYWxvZyBleHRlbmRzIERpYWxvZyB7Ci0JCXB1YmxpYyBOdW1iZXJJbnB1dERpYWxvZyhTaGVsbCBzaGVsbCkgewotCQkJc3VwZXIoc2hlbGwpOwotCQl9Ci0KLQkJcHVibGljIFRleHQgc3RhcnQ7Ci0JCWludCBzdGFydFZhbHVlOwotCQlwdWJsaWMgVGV4dCBsZW5ndGg7Ci0JCWludCBsZW5ndGhWYWx1ZTsKLQotCQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCQlDb21wb3NpdGUgY29udGFpbmVyID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OVUxMKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgdHJ1ZSkpOwotCQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbCgpLmdldFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJTdGFydCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiTGVuZ3RoIik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJc3RhcnQgPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJc3RhcnRWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldE9mZnNldCgpOwotCQkJc3RhcnQuc2V0VGV4dCgiIiArIHN0YXJ0VmFsdWUpOwotCQkJc3RhcnQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxlbmd0aCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlsZW5ndGhWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldExlbmd0aCgpOwotCQkJbGVuZ3RoLnNldFRleHQoIiIgKyBsZW5ndGhWYWx1ZSk7Ci0JCQlsZW5ndGguc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCS8vIHN0YXJ0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IHN0YXJ0KSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQkvLyBsZW5ndGguYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8gcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLyBpZiAoZS53aWRnZXQgPT0gbGVuZ3RoKSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSBJbnRlZ2VyLmRlY29kZShsZW5ndGguZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8gfQotCQkJLy8gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0KLQkJCXJldHVybiBjb21wb3NpdGU7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nI29rUHJlc3NlZCgpCi0JCSAqLwotCQlwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKSB7Ci0JCQl0cnkgewotCQkJCXN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJc3RhcnRWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCX0KLQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCQlsZW5ndGhWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQlzdXBlci5va1ByZXNzZWQoKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGFkZEFjdGlvbnMoSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyKSB7Ci0JCWlmIChtZ3IgIT0gbnVsbCkgewotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJOZXcgSlNQIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlCdXN5SW5kaWNhdG9yLnNob3dXaGlsZShnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCksIG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJCQlzZXR1cFZpZXdlckZvck5ldygpOwotCQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCQl9Ci0JCQkJCX0pOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJDaGFuZ2UgVmlzaWJpbGl0eSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJTnVtYmVySW5wdXREaWFsb2cgZGxnID0gbmV3IE51bWJlcklucHV0RGlhbG9nKGZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJCQlpbnQgcHJvY2VlZCA9IGRsZy5vcGVuKCk7Ci0JCQkJCWlmIChwcm9jZWVkID09IFdpbmRvdy5DQU5DRUwpCi0JCQkJCQlyZXR1cm47Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihkbGcuc3RhcnRWYWx1ZSwgZGxnLmxlbmd0aFZhbHVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU2hvdyBBbGwiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIkNoYW5nZSBWaXNpYmlsaXR5IGluIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQkJCQkJSUVkaXRvclBhcnQgcGFydCA9IGdldFZpZXdTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAocGFydCAhPSBudWxsICYmIHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQkJc291cmNlVmlld2VyID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgcGFydCkuZ2V0VGV4dFZpZXdlcigpOwotCQkJCQl9Ci0JCQkJCWlmIChzb3VyY2VWaWV3ZXIgIT0gbnVsbCkgewotCQkJCQkJTnVtYmVySW5wdXREaWFsb2cgZGxnID0gbmV3IE51bWJlcklucHV0RGlhbG9nKHNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQkJCQlpbnQgcHJvY2VlZCA9IGRsZy5vcGVuKCk7Ci0JCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJCXJldHVybjsKLQkJCQkJCXNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJCXNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKGRsZy5zdGFydFZhbHVlLCBkbGcubGVuZ3RoVmFsdWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIGluIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQkJCQkJSUVkaXRvclBhcnQgcGFydCA9IGdldFZpZXdTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAocGFydCAhPSBudWxsICYmIHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQkJc291cmNlVmlld2VyID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgcGFydCkuZ2V0VGV4dFZpZXdlcigpOwotCQkJCQl9Ci0JCQkJCWlmIChzb3VyY2VWaWV3ZXIgIT0gbnVsbCkgewotCQkJCQkJc291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQkvLyBubyBsb25nZXIgYWJsZSB0byBzZXQgaW5wdXQgdG8gTlVMTAotCQkJLy8gbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJLy8gcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJLy8gcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkvLyB9Ci0JCQkvLwotCQkJLy8gcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCS8vIHJldHVybiAiU2V0IElucHV0IHRvIE5VTEwiOwotCQkJLy8gfQotCQkJLy8gcHVibGljIHZvaWQgcnVuKCkgewotCQkJLy8gc3VwZXIucnVuKCk7Ci0JCQkvLyB2aWV3ZXIuc2V0SW5wdXQobnVsbCk7Ci0JCQkvLyB9Ci0JCQkvLyB9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBmcm9tIEFjdGl2ZSBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCUlUZXh0RWRpdG9yIHRleHRFZGl0b3IgPSBnZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHRleHRFZGl0b3IgIT0gbnVsbCkgewotCQkJCQkJc2V0dXBWaWV3ZXJGb3JFZGl0b3IodGV4dEVkaXRvcik7Ci0JCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgYW5kIEZvbGxvdyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZvbGxvd1NlbGVjdGlvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIEFzIFJlYWRPbmx5IjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZShmYWxzZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlN0b3AgRm9sbG93aW5nIFNlbGVjdGlvbiI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOwotCQkJCX0KLQkJCX0pOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUpCi0JICovCi0JcHVibGljIHZvaWQgY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlIHBhcmVudCkgewotCQlJQ29udHJpYnV0aW9uTWFuYWdlciBtZ3IgPSBnZXRWaWV3U2l0ZSgpLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpOwotCQlhZGRBY3Rpb25zKG1ncik7Ci0KLQkJLy8gY3JlYXRlIHNvdXJjZSB2aWV3ZXIgJiBpdHMgY29udGVudCB0eXBlLXNwZWNpZmljIHZpZXdlcgotCQkvLyBjb25maWd1cmF0aW9uCi0JCWZTb3VyY2VWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwgU1dULk5PTkUpOwotCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkpTUCgpOwotCi0JCS8vIHNldCB1cCB0aGUgdmlld2VyIHdpdGggYSBkb2N1bWVudCAmIHZpZXdlciBjb25maWcKLQkJc2V0dXBWaWV3ZXJGb3JOZXcoKTsKLQotCQlzZXR1cFZpZXdlclByZWZlcmVuY2VzKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7Ci0JCWZTb3VyY2VWaWV3ZXIudW5jb25maWd1cmUoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLQkJaWYgKGZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpICE9IG51bGwgJiYgIWZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmlzRGlzcG9zZWQoKSkKLQkJCWZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLnNldEZvY3VzKCk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChJVmlld1NpdGUsIElNZW1lbnRvKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoSVZpZXdTaXRlIHNpdGUsIElNZW1lbnRvIG1lbWVudG8pIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLmluaXQoc2l0ZSwgbWVtZW50byk7Ci0JfQotCi0JLyoqCi0JICogU2V0IHVwIHNvdXJjZSB2aWV3ZXIgd2l0aCBhbnkgYWRkaXRpb25hbCBwcmVmZXJlbmNlcyBpdCBzaG91bGQgaGF2ZSBFeDoKLQkgKiBmb250LCB0YWIgd2lkdGgKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpIHsKLQkJZlNvdXJjZVZpZXdlci5nZXRUZXh0V2lkZ2V0KCkuc2V0Rm9udChKRmFjZVJlc291cmNlcy5nZXRGb250KFNTRV9FRElUT1JfRk9OVCkpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYSBuZXcgZG9jdW1lbnQgJiBjb25maWd1cmUgaXQKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JOZXcoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJSURvY3VtZW50IGRvYyA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoQ29udGVudFR5cGVJZEZvckpTUC5Db250ZW50VHlwZUlEX0pTUCk7Ci0JCWRvYy5zZXQoREVGQVVMVF9WSUVXRVJfQ09OVEVOVFMpOwotCi0JCWZTb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jKTsKLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShmQ29uZmlnKTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSB0ZXh0IGVkaXRvciBpZiBwb3NzaWJsZQotCSAqIAotCSAqIEByZXR1cm4gSVRleHRFZGl0b3IKLQkgKi8KLQlwcml2YXRlIElUZXh0RWRpdG9yIGdldEFjdGl2ZUVkaXRvcigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gbnVsbDsKLQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQ7Ci0JCWlmIChlZGl0b3IgPT0gbnVsbCAmJiBlZGl0b3JQYXJ0ICE9IG51bGwpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCXJldHVybiBlZGl0b3I7Ci0JfQotCi0JLyoqCi0JICogU2V0cyB1cCB0aGUgdmlld2VyIHdpdGggdGhlIHNhbWUgZG9jdW1lbnQvaW5wdXQgYXMgdGhlIGdpdmVuIGVkaXRvcgotCSAqIAotCSAqIEBwYXJhbSBJVGV4dEVkaXRvcgotCSAqICAgICAgICAgICAgZWRpdG9yIC0gdGhlIGVkaXRvciB0byB1c2UgKmNhbm5vdCB0byBiZSBudWxsKgotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlckZvckVkaXRvcihJVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOyAvLyBpZiB3YXMgZm9sbG93aW5nIHNlbGVjdGlvbiwgc3RvcAotCQlJRG9jdW1lbnQgZG9jID0gZWRpdG9yLmdldERvY3VtZW50UHJvdmlkZXIoKS5nZXREb2N1bWVudChlZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCWZTb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jKTsKLQotCQkvLyBuZWVkIHRvIHJlY29uZmlndXJlIGFmdGVyIHNldCBkb2N1bWVudCBqdXN0IHNvIGhpZ2hsaWdodGVyIHdvcmtzCi0JCWZTb3VyY2VWaWV3ZXIuY29uZmlndXJlKG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25KU1AoKSk7Ci0JfQotCi0JLyoqCi0JICogSG9va3MgdXAgdGhlIHZpZXdlciB0byBmb2xsb3cgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBhY3RpdmUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIGZvbGxvd1NlbGVjdGlvbigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3IgIT0gbnVsbCkgewotCQkJc2V0dXBWaWV3ZXJGb3JFZGl0b3IoZWRpdG9yKTsKLQkJCWlmIChmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9PSBudWxsKQotCQkJCWZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbmV3IE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0KLQkJCWZDb250ZW50T3V0bGluZVBhZ2UgPSAoKElDb250ZW50T3V0bGluZVBhZ2UpIGVkaXRvci5nZXRBZGFwdGVyKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKTsKLQkJCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCQlmQ29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0KLQkJCQlpZiAoIWZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCi0JCQkJCU9iamVjdFtdIG5vZGVzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSkudG9BcnJheSgpOwotCQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1swXTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdOwotCi0JCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgc3RhcnROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDZWFzZSBmb2xsb3dpbmcgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBlZGl0b3IKLQkgKi8KLQlwcml2YXRlIHZvaWQgc3RvcEZvbGxvd1NlbGVjdGlvbigpIHsKLQkJaWYgKGZDb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgewotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UgPSBudWxsOwotCQl9Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNmFkNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMuSlNQVUlUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMuemlwIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjQ4MGM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzLzExNjUyMy9zdHJ1dHMtbG9naWMudGxkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy1sb2dpYy50bGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5NzU5NzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy1sb2dpYy50bGQKKysrIC9kZXYvbnVsbApAQCAtMSw2NDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotCi0KLQotCi0KLTwhRE9DVFlQRSB0YWdsaWIgUFVCTElDICItLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgSlNQIFRhZyBMaWJyYXJ5IDEuMS8vRU4iICJodHRwOi8vamF2YS5zdW4uY29tL2oyZWUvZHRkcy93ZWItanNwdGFnbGlicmFyeV8xXzEuZHRkIj4KLTx0YWdsaWI+Ci08dGxpYnZlcnNpb24+MS4wPC90bGlidmVyc2lvbj4KLTxqc3B2ZXJzaW9uPjEuMTwvanNwdmVyc2lvbj4KLTxzaG9ydG5hbWU+bG9naWM8L3Nob3J0bmFtZT4KLTx1cmk+aHR0cDovL2pha2FydGEuYXBhY2hlLm9yZy9zdHJ1dHMvdGFncy1sb2dpYzwvdXJpPgotPHRhZz4KLTxuYW1lPmVtcHR5PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5FbXB0eVRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+ZXF1YWw8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkVxdWFsVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dmFsdWU8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPmZvcndhcmQ8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkZvcndhcmRUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PmVtcHR5PC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5ncmVhdGVyRXF1YWw8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkdyZWF0ZXJFcXVhbFRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnZhbHVlPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5ncmVhdGVyVGhhbjwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuR3JlYXRlclRoYW5UYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+aXRlcmF0ZTwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuSXRlcmF0ZVRhZzwvdGFnY2xhc3M+Ci08dGVpY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLkl0ZXJhdGVUZWk8L3RlaWNsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29sbGVjdGlvbjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5pZDwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT5mYWxzZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5pbmRleElkPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT5mYWxzZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5sZW5ndGg8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5vZmZzZXQ8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dHlwZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPmxlc3NFcXVhbDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTGVzc0VxdWFsVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dmFsdWU8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPmxlc3NUaGFuPC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5MZXNzVGhhblRhZzwvdGFnY2xhc3M+Ci08Ym9keWNvbnRlbnQ+SlNQPC9ib2R5Y29udGVudD4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5jb29raWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+aGVhZGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFyYW1ldGVyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnZhbHVlPC9uYW1lPgotPHJlcXVpcmVkPnRydWU8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5tYXRjaDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTWF0Y2hUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5sb2NhdGlvbjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bWVzc2FnZXNOb3RQcmVzZW50PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5NZXNzYWdlc05vdFByZXNlbnRUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5tZXNzYWdlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bWVzc2FnZXNQcmVzZW50PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5NZXNzYWdlc1ByZXNlbnRUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5tZXNzYWdlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bm90RW1wdHk8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLk5vdEVtcHR5VGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5ub3RFcXVhbDwvbmFtZT4KLTx0YWdjbGFzcz5vcmcuYXBhY2hlLnN0cnV0cy50YWdsaWIubG9naWMuTm90RXF1YWxUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT52YWx1ZTwvbmFtZT4KLTxyZXF1aXJlZD50cnVlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+bm90TWF0Y2g8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLk5vdE1hdGNoVGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bG9jYXRpb248L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dmFsdWU8L25hbWU+Ci08cmVxdWlyZWQ+dHJ1ZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTwvdGFnPgotPHRhZz4KLTxuYW1lPm5vdFByZXNlbnQ8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLk5vdFByZXNlbnRUYWc8L3RhZ2NsYXNzPgotPGJvZHljb250ZW50PkpTUDwvYm9keWNvbnRlbnQ+Ci08YXR0cmlidXRlPgotPG5hbWU+Y29va2llPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPmhlYWRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5uYW1lPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtZXRlcjwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wcm9wZXJ0eTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5yb2xlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnNjb3BlPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnVzZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTx0YWc+Ci08bmFtZT5wcmVzZW50PC9uYW1lPgotPHRhZ2NsYXNzPm9yZy5hcGFjaGUuc3RydXRzLnRhZ2xpYi5sb2dpYy5QcmVzZW50VGFnPC90YWdjbGFzcz4KLTxib2R5Y29udGVudD5KU1A8L2JvZHljb250ZW50PgotPGF0dHJpYnV0ZT4KLTxuYW1lPmNvb2tpZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5oZWFkZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+bmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbWV0ZXI8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cm9sZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5zY29wZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT51c2VyPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPC90YWc+Ci08dGFnPgotPG5hbWU+cmVkaXJlY3Q8L25hbWU+Ci08dGFnY2xhc3M+b3JnLmFwYWNoZS5zdHJ1dHMudGFnbGliLmxvZ2ljLlJlZGlyZWN0VGFnPC90YWdjbGFzcz4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5hbmNob3I8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+Zm9yd2FyZDwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5ocmVmPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPm5hbWU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cGFnZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbUlkPC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtTmFtZTwvbmFtZT4KLTxyZXF1aXJlZD5mYWxzZTwvcmVxdWlyZWQ+Ci08cnRleHBydmFsdWU+dHJ1ZTwvcnRleHBydmFsdWU+Ci08L2F0dHJpYnV0ZT4KLTxhdHRyaWJ1dGU+Ci08bmFtZT5wYXJhbVByb3BlcnR5PC9uYW1lPgotPHJlcXVpcmVkPmZhbHNlPC9yZXF1aXJlZD4KLTxydGV4cHJ2YWx1ZT50cnVlPC9ydGV4cHJ2YWx1ZT4KLTwvYXR0cmlidXRlPgotPGF0dHJpYnV0ZT4KLTxuYW1lPnBhcmFtU2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+cHJvcGVydHk8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+c2NvcGU8L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08YXR0cmlidXRlPgotPG5hbWU+dHJhbnNhY3Rpb248L25hbWU+Ci08cmVxdWlyZWQ+ZmFsc2U8L3JlcXVpcmVkPgotPHJ0ZXhwcnZhbHVlPnRydWU8L3J0ZXhwcnZhbHVlPgotPC9hdHRyaWJ1dGU+Ci08L3RhZz4KLTwvdGFnbGliPgotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvMTE2NTIzL3N0cnV0cy5qYXIgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xMTY1MjMvc3RydXRzLmphcgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGIzMmY5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy8xMTY1MjMvc3RydXRzLmphcgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0xL3dtbF8xXzEuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTEvd21sXzFfMS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM5NDUyNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTEvd21sXzFfMS5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzNTMgKzAsMCBAQAotPCEtLQ0KLVdpcmVsZXNzIE1hcmt1cCBMYW5ndWFnZSAoV01MKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLVdNTCBpcyBhbiBYTUwgbGFuZ3VhZ2UuICBUeXBpY2FsIHVzYWdlOg0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIg0KLSAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4NCi0gICA8d21sPg0KLSAgIC4uLg0KLSAgIDwvd21sPg0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotPCFFTlRJVFkgJSBsZW5ndGggICJDREFUQSI+ICAgIDwhLS0gWzAtOV0rIGZvciBwaXhlbHMgb3IgWzAtOV0rIiUiIGZvcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnRhZ2UgbGVuZ3RoIC0tPg0KLTwhRU5USVRZICUgdmRhdGEgICAiQ0RBVEEiPiAgICA8IS0tIGF0dHJpYnV0ZSB2YWx1ZSBwb3NzaWJseSBjb250YWluaW5nDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgcmVmZXJlbmNlcyAtLT4NCi08IUVOVElUWSAlIEhSRUYgICAgIiV2ZGF0YTsiPiAgPCEtLSBVUkksIFVSTCBvciBVUk4gZGVzaWduYXRpbmcgYSBoeXBlcnRleHQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLiBNYXkgY29udGFpbiB2YXJpYWJsZSByZWZlcmVuY2VzIC0tPg0KLTwhRU5USVRZICUgYm9vbGVhbgkiKHRydWV8ZmFsc2UpIj4NCi08IUVOVElUWSAlIG51bWJlciAgIk5NVE9LRU4iPiAgPCEtLSBhIG51bWJlciwgd2l0aCBmb3JtYXQgWzAtOV0rIC0tPg0KLTwhRU5USVRZICUgY29yZWF0dHJzICAiaWQgICAgSUQgICAgICNJTVBMSUVEIA0KLSAgICAgICAgICAgICAgICAgICAgICAgY2xhc3MgQ0RBVEEgICNJTVBMSUVEIj4NCi0NCi08IUVOVElUWSAlIGVtcGggICAgImVtIHwgc3Ryb25nIHwgYiB8IGkgfCB1IHwgYmlnIHwgc21hbGwiPg0KLTwhRU5USVRZICUgbGF5b3V0ICAiYnIiPg0KLQ0KLTwhRU5USVRZICUgdGV4dCAgICAgIiNQQ0RBVEEgfCAlZW1waDsiPg0KLQ0KLTwhLS0gZmxvdyBjb3ZlcnMgImNhcmQtbGV2ZWwiIGVsZW1lbnRzLCBzdWNoIGFzIHRleHQgYW5kIGltYWdlcyAtLT4NCi08IUVOVElUWSAlIGZsb3cgICAgICIldGV4dDsgfCAlbGF5b3V0OyB8IGltZyB8IGFuY2hvciB8IGEgfCB0YWJsZSI+DQotDQotPCEtLSBUYXNrIHR5cGVzIC0tPg0KLTwhRU5USVRZICUgdGFzayAgICJnbyB8IHByZXYgfCBub29wIHwgcmVmcmVzaCI+DQotDQotPCEtLSBOYXZpZ2F0aW9uIGFuZCBldmVudCBlbGVtZW50cyAtLT4NCi08IUVOVElUWSAlIG5hdmVsbXRzICJkbyB8IG9uZXZlbnQiPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IERlY2tzIGFuZCBDYXJkcyA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIHdtbCAoIGhlYWQ/LCB0ZW1wbGF0ZT8sIGNhcmQrICk+DQotPCFBVFRMSVNUIHdtbA0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS0gY2FyZCBpbnRyaW5zaWMgZXZlbnRzIC0tPg0KLTwhRU5USVRZICUgY2FyZGV2DQotICJvbmVudGVyZm9yd2FyZCAgJUhSRUY7ICAgICAgICAgICNJTVBMSUVEDQotICBvbmVudGVyYmFja3dhcmQgJUhSRUY7ICAgICAgICAgICNJTVBMSUVEDQotICBvbnRpbWVyICAgICAgICAgJUhSRUY7ICAgICAgICAgICNJTVBMSUVEIg0KLSAgPg0KLQ0KLTwhLS0gY2FyZCBmaWVsZCB0eXBlcyAtLT4NCi08IUVOVElUWSAlIGZpZWxkcyAgIiVmbG93OyB8IGlucHV0IHwgc2VsZWN0IHwgZmllbGRzZXQiPg0KLQ0KLTwhRUxFTUVOVCBjYXJkIChvbmV2ZW50KiwgdGltZXI/LCAoZG8gfCBwKSopPg0KLTwhQVRUTElTVCBjYXJkDQotICB0aXRsZSAgICAgICAgICAgJXZkYXRhOyAgICAgICAjSU1QTElFRA0KLSAgbmV3Y29udGV4dCAgICAgICVib29sZWFuOyAgICAgImZhbHNlIg0KLSAgb3JkZXJlZCAgICAgICAgICVib29sZWFuOyAgICAgInRydWUiDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNhcmRldjsNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gRXZlbnQgQmluZGluZ3MgPT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBkbyAoJXRhc2s7KT4NCi08IUFUVExJU1QgZG8NCi0gIHR5cGUgICAgICAgICBDREFUQSAgICAgICAjUkVRVUlSRUQNCi0gIGxhYmVsICAgICAgICAldmRhdGE7ICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgIE5NVE9LRU4gICAgICNJTVBMSUVEDQotICBvcHRpb25hbCAgICAgJWJvb2xlYW47ICAgImZhbHNlIg0KLSAgeG1sOmxhbmcgICAgIE5NVE9LRU4gICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBvbmV2ZW50ICgldGFzazspPg0KLTwhQVRUTElTVCBvbmV2ZW50DQotICB0eXBlICAgICAgICAgQ0RBVEEgICAgICAgI1JFUVVJUkVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IERlY2stbGV2ZWwgZGVjbGFyYXRpb25zID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgaGVhZCAoIGFjY2VzcyB8IG1ldGEgKSs+DQotPCFBVFRMSVNUIGhlYWQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIHRlbXBsYXRlICglbmF2ZWxtdHM7KSo+DQotPCFBVFRMSVNUIHRlbXBsYXRlDQotICAlY2FyZGV2Ow0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgYWNjZXNzIEVNUFRZPg0KLTwhQVRUTElTVCBhY2Nlc3MNCi0gIGRvbWFpbiAgICAgICBDREFUQSAgICAgICAjSU1QTElFRA0KLSAgcGF0aCAgICAgICAgIENEQVRBICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBtZXRhIEVNUFRZPg0KLTwhQVRUTElTVCBtZXRhDQotICBodHRwLWVxdWl2ICAgICBDREFUQSAgICAgICNJTVBMSUVEDQotICBuYW1lICAgICAgICAgICBDREFUQSAgICAgICNJTVBMSUVEDQotICBmb3J1YSAgICAgICAgICAlYm9vbGVhbjsgICNJTVBMSUVEDQotICBjb250ZW50ICAgICAgICBDREFUQSAgICAgICNSRVFVSVJFRA0KLSAgc2NoZW1lICAgICAgICAgQ0RBVEEgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBUYXNrcyA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIGdvIChwb3N0ZmllbGQgfCBzZXR2YXIpKj4NCi08IUFUVExJU1QgZ28NCi0gIGhyZWYgICAgICAgICAgICAlSFJFRjsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgc2VuZHJlZmVyZXIgICAgICVib29sZWFuOyAgICAgICAiZmFsc2UiDQotICBtZXRob2QgICAgICAgICAgKHBvc3R8Z2V0KSAgICAgICJnZXQiDQotICBhY2NlcHQtY2hhcnNldCAgQ0RBVEEgICAgICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBwcmV2IChzZXR2YXIpKj4NCi08IUFUVExJU1QgcHJldg0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgcmVmcmVzaCAoc2V0dmFyKSo+DQotPCFBVFRMSVNUIHJlZnJlc2gNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIG5vb3AgRU1QVFk+DQotPCFBVFRMSVNUIG5vb3ANCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT0gcG9zdGZpZWxkID09PT09PT09PT09PT09PT0tLT4NCi0gDQotPCFFTEVNRU5UIHBvc3RmaWVsZCBFTVBUWT4NCi08IUFUVExJU1QgcG9zdGZpZWxkDQotICBuYW1lICAgICAgICAgJXZkYXRhOyAgICAgICAgICAgI1JFUVVJUkVEDQotICB2YWx1ZSAgICAgICAgJXZkYXRhOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IHZhcmlhYmxlcyA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIHNldHZhciBFTVBUWT4NCi08IUFUVExJU1Qgc2V0dmFyDQotICBuYW1lICAgICAgICAgJXZkYXRhOyAgICAgICAgICAgI1JFUVVJUkVEDQotICB2YWx1ZSAgICAgICAgJXZkYXRhOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IENhcmQgRmllbGRzID09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgc2VsZWN0IChvcHRncm91cHxvcHRpb24pKz4NCi08IUFUVExJU1Qgc2VsZWN0DQotICB0aXRsZSAgICAgICAgJXZkYXRhOyAgICAgICAgICAgI0lNUExJRUQNCi0gIG5hbWUgICAgICAgICBOTVRPS0VOICAgICAgICAgICAjSU1QTElFRA0KLSAgdmFsdWUgICAgICAgICV2ZGF0YTsgICAgICAgICAgICNJTVBMSUVEDQotICBpbmFtZSAgICAgICAgTk1UT0tFTiAgICAgICAgICAgI0lNUExJRUQNCi0gIGl2YWx1ZSAgICAgICAldmRhdGE7ICAgICAgICAgICAjSU1QTElFRA0KLSAgbXVsdGlwbGUgICAgICVib29sZWFuOyAgICAgICAgICJmYWxzZSINCi0gIHRhYmluZGV4ICAgICAlbnVtYmVyOyAgICAgICAgICAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICAgIE5NVE9LRU4gICAgICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBvcHRncm91cCAob3B0Z3JvdXB8b3B0aW9uKSsgPg0KLTwhQVRUTElTVCBvcHRncm91cA0KLSAgdGl0bGUgICAgICAldmRhdGE7ICAgICNJTVBMSUVEDQotICB4bWw6bGFuZyAgIE5NVE9LRU4gICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIG9wdGlvbiAoI1BDREFUQSB8IG9uZXZlbnQpKj4NCi08IUFUVExJU1Qgb3B0aW9uDQotICB2YWx1ZSAgICAgICV2ZGF0YTsgICAgI0lNUExJRUQNCi0gIHRpdGxlICAgICAgJXZkYXRhOyAgICAjSU1QTElFRA0KLSAgb25waWNrICAgICAlSFJFRjsgICAgICNJTVBMSUVEDQotICB4bWw6bGFuZyAgIE5NVE9LRU4gICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIGlucHV0IEVNUFRZPg0KLTwhQVRUTElTVCBpbnB1dA0KLSAgbmFtZSAgICAgICBOTVRPS0VOICAgICAgICAgICAjUkVRVUlSRUQNCi0gIHR5cGUgICAgICAgKHRleHR8cGFzc3dvcmQpICAgInRleHQiDQotICB2YWx1ZSAgICAgICV2ZGF0YTsgICAgICAgICAgICNJTVBMSUVEDQotICBmb3JtYXQgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICBlbXB0eW9rICAgICVib29sZWFuOyAgICAgICAgICJmYWxzZSINCi0gIHNpemUgICAgICAgJW51bWJlcjsgICAgICAgICAgI0lNUExJRUQNCi0gIG1heGxlbmd0aCAgJW51bWJlcjsgICAgICAgICAgI0lNUExJRUQNCi0gIHRhYmluZGV4ICAgJW51bWJlcjsgICAgICAgICAgI0lNUExJRUQNCi0gIHRpdGxlICAgICAgJXZkYXRhOyAgICAgICAgICAgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgTk1UT0tFTiAgICAgICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIGZpZWxkc2V0ICglZmllbGRzOyB8IGRvKSogPg0KLTwhQVRUTElTVCBmaWVsZHNldA0KLSAgdGl0bGUgICAgICAgICAgICV2ZGF0YTsgICAgICAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgdGltZXIgRU1QVFk+DQotPCFBVFRMSVNUIHRpbWVyDQotICBuYW1lICAgICAgIE5NVE9LRU4gICAgICAgICAgICNJTVBMSUVEDQotICB2YWx1ZSAgICAgICV2ZGF0YTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBJbWFnZXMgPT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRU5USVRZICUgSUFsaWduICIodG9wfG1pZGRsZXxib3R0b20pIiA+DQotDQotPCFFTEVNRU5UIGltZyBFTVBUWT4NCi08IUFUVExJU1QgaW1nDQotICBhbHQgICAgICAgICV2ZGF0YTsgICAgICAjUkVRVUlSRUQNCi0gIHNyYyAgICAgICAgJUhSRUY7ICAgICAgICNSRVFVSVJFRA0KLSAgbG9jYWxzcmMgICAldmRhdGE7ICAgICAgI0lNUExJRUQNCi0gIHZzcGFjZSAgICAgJWxlbmd0aDsgICAgICIwIg0KLSAgaHNwYWNlICAgICAlbGVuZ3RoOyAgICAgIjAiDQotICBhbGlnbiAgICAgICVJQWxpZ247ICAgICAiYm90dG9tIg0KLSAgaGVpZ2h0ICAgICAlbGVuZ3RoOyAgICAgI0lNUExJRUQNCi0gIHdpZHRoICAgICAgJWxlbmd0aDsgICAgICNJTVBMSUVEDQotICB4bWw6bGFuZyAgIE5NVE9LRU4gICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBBbmNob3IgPT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBhbmNob3IgKCAjUENEQVRBIHwgYnIgfCBpbWcgfCBnbyB8IHByZXYgfCByZWZyZXNoICkqPg0KLTwhQVRUTElTVCBhbmNob3INCi0gIHRpdGxlICAgICAgICAldmRhdGE7ICAgICAgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgICBOTVRPS0VOICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIGEgKCAjUENEQVRBIHwgYnIgfCBpbWcgKSo+DQotPCFBVFRMSVNUIGENCi0gIGhyZWYgICAgICAgICAlSFJFRjsgICAgICAgI1JFUVVJUkVEDQotICB0aXRsZSAgICAgICAgJXZkYXRhOyAgICAgICNJTVBMSUVEDQotICB4bWw6bGFuZyAgICAgTk1UT0tFTiAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IFRhYmxlcyA9PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIHRhYmxlICh0cikrPg0KLTwhQVRUTElTVCB0YWJsZQ0KLSAgdGl0bGUgICAgICAgJXZkYXRhOyAgICAjSU1QTElFRA0KLSAgYWxpZ24gICAgICAgQ0RBVEEgICAgICAjSU1QTElFRA0KLSAgY29sdW1ucyAgICAgJW51bWJlcjsgICAjUkVRVUlSRUQNCi0gIHhtbDpsYW5nICAgIE5NVE9LRU4gICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIHRyICh0ZCkrPg0KLTwhQVRUTElTVCB0cg0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgdGQgKCAldGV4dDsgfCAlbGF5b3V0OyB8IGltZyB8IGFuY2hvciB8IGEgKSo+DQotPCFBVFRMSVNUIHRkDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBUZXh0IGxheW91dCBhbmQgbGluZSBicmVha3MgPT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBlbSAgICAgKCVmbG93OykqPg0KLTwhQVRUTElTVCBlbQ0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIHN0cm9uZyAoJWZsb3c7KSo+DQotPCFBVFRMSVNUIHN0cm9uZw0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIGIgICAgICAoJWZsb3c7KSo+DQotPCFBVFRMSVNUIGINCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBpICAgICAgKCVmbG93OykqPg0KLTwhQVRUTElTVCBpDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVMRU1FTlQgdSAgICAgICglZmxvdzspKj4NCi08IUFUVExJU1QgdQ0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIGJpZyAgICAoJWZsb3c7KSo+DQotPCFBVFRMSVNUIGJpZw0KLSAgeG1sOmxhbmcgICAgICAgIE5NVE9LRU4gICAgICAgI0lNUExJRUQNCi0gICVjb3JlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIHNtYWxsICAoJWZsb3c7KSo+DQotPCFBVFRMSVNUIHNtYWxsDQotICB4bWw6bGFuZyAgICAgICAgTk1UT0tFTiAgICAgICAjSU1QTElFRA0KLSAgJWNvcmVhdHRyczsNCi0gID4NCi0NCi08IUVOVElUWSAlIFRBbGlnbiAiKGxlZnR8cmlnaHR8Y2VudGVyKSI+DQotPCFFTlRJVFkgJSBXcmFwTW9kZSAiKHdyYXB8bm93cmFwKSIgPg0KLTwhRUxFTUVOVCBwICglZmllbGRzOyB8IGRvKSo+DQotPCFBVFRMSVNUIHANCi0gIGFsaWduICAgICAgICVUQWxpZ247ICAgICAibGVmdCINCi0gIG1vZGUgICAgICAgICVXcmFwTW9kZTsgICAjSU1QTElFRA0KLSAgeG1sOmxhbmcgICAgTk1UT0tFTiAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBiciBFTVBUWT4NCi08IUFUVExJU1QgYnINCi0gIHhtbDpsYW5nICAgICAgICBOTVRPS0VOICAgICAgICNJTVBMSUVEDQotICAlY29yZWF0dHJzOw0KLSAgPg0KLQ0KLTwhRU5USVRZIHF1b3QgICImIzM0OyI+ICAgICA8IS0tIHF1b3RhdGlvbiBtYXJrIC0tPg0KLTwhRU5USVRZIGFtcCAgICImIzM4OyMzODsiPiA8IS0tIGFtcGVyc2FuZCAtLT4NCi08IUVOVElUWSBhcG9zICAiJiMzOTsiPiAgICAgPCEtLSBhcG9zdHJvcGhlIC0tPg0KLTwhRU5USVRZIGx0ICAgICImIzM4OyM2MDsiPiA8IS0tIGxlc3MgdGhhbiAtLT4NCi08IUVOVElUWSBndCAgICAiJiM2MjsiPiAgICAgPCEtLSBncmVhdGVyIHRoYW4gLS0+DQotPCFFTlRJVFkgbmJzcCAgIiYjMTYwOyI+ICAgIDwhLS0gbm9uLWJyZWFraW5nIHNwYWNlIC0tPg0KLTwhRU5USVRZIHNoeSAgICImIzE3MzsiPiAgICA8IS0tIHNvZnQgaHlwaGVuIChkaXNjcmV0aW9uYXJ5IGh5cGhlbikgLS0+DQotDQotPCEtLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0tLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL2NoYW5uZWwxMi5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL2NoYW5uZWwxMi5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRmMjEwM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9jaGFubmVsMTIuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCEtLQ0KLSAgICAgIFRoaXMgRFREIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBpZGVudGlmaWVyOg0KLSAgICAgCSItLy9XQVBGT1JVTS8vRFREIENIQU5ORUwgMS4yLy9FTiINCi0tLT4NCi0NCi08IUVOVElUWSAlIEJvb2xlYW4gIiggdHJ1ZSB8IGZhbHNlICkiPg0KLQ0KLTwhLS0gYSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgLS0+DQotPCFFTlRJVFkgJSBVUkkgIkNEQVRBIiA+DQotDQotPCEtLSBvbmUgb3IgbW9yZSBkaWdpdHMgKE5VTUJFUikgLS0+DQotPCFFTlRJVFkgJSBOdW1iZXIgIkNEQVRBIiA+ICANCi0NCi08IS0tIENoYW5uZWwgRXZlbnRzIC0tPg0KLTwhRU5USVRZICUgQ2hhbm5lbEV2ZW50LmF0dHJpYnMNCi0JInN1Y2Nlc3MJCSVVUkk7CQkjSU1QTElFRA0KLQkgZmFpbHVyZQkJJVVSSTsJCSNJTVBMSUVEIg0KLT4NCi0NCi08IUVMRU1FTlQgY2hhbm5lbCAodGl0bGUgLCBhYnN0cmFjdD8gLCByZXNvdXJjZSogKSA+DQotPCFBVFRMSVNUIGNoYW5uZWwNCi0JbWF4c3BhY2UJCSVOdW1iZXI7CSNSRVFVSVJFRCANCi0JYmFzZQkJCSVVUkk7CQkjSU1QTElFRA0KLQlldmVudGlkCQkJQ0RBVEEJCSNJTVBMSUVEDQotCWNoYW5uZWxpZAkJQ0RBVEEJCSNSRVFVSVJFRCANCi0JdXNlcmFjY2Vzc2libGUgCQklQm9vbGVhbjsJImZhbHNlIg0KLQklQ2hhbm5lbEV2ZW50LmF0dHJpYnM7DQotPg0KLQ0KLTwhRUxFTUVOVCB0aXRsZSAoI1BDREFUQSk+DQotPCFFTEVNRU5UIGFic3RyYWN0ICgjUENEQVRBKT4NCi0NCi08IUVMRU1FTlQgcmVzb3VyY2UgRU1QVFk+DQotPCFBVFRMSVNUIHJlc291cmNlDQotCWhyZWYgICAgICAJJVVSSTsJICAgCSNSRVFVSVJFRA0KLQlsYXN0bW9kCQklTnVtYmVyOwkjSU1QTElFRA0KLQlldGFnCQlOTVRPS0VOCQkjSU1QTElFRA0KLQltZDUJCU5NVE9LRU4JCSNJTVBMSUVEDQotPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvcGFwXzEuMC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3BhcF8xLjAuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2VkMGQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvcGFwXzEuMC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotPCEtLQ0KLVB1c2ggQWNjZXNzIFByb3RvY29sIChQQVApIHYxLjAgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LTIwMDEuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1QQVAgaXMgYW4gWE1MIGxhbmd1YWdlLiBUeXBpY2FsIHVzYWdlOg0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSBwYXAgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFBBUCAxLjAvL0VOIg0KLSAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3BhcF8xLjAuZHRkIj4NCi0gICA8cGFwPg0KLSAgICAgIC4uLg0KLSAgIDwvcGFwPg0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotPCFFTlRJVFkgJSBEYXRldGltZSAiQ0RBVEEiPiAgICAgPCEtLSBJU08gZGF0ZSBhbmQgdGltZSAtLT4NCi08IUVOVElUWSAlIFN0YXRlICAiKHJlamVjdGVkIHwgcGVuZGluZyANCi0gICAgICAgICAgICAgICAgICB8IGRlbGl2ZXJlZCB8IHVuZGVsaXZlcmFibGUgDQotICAgICAgICAgICAgICAgICAgfCBleHBpcmVkIHwgYWJvcnRlZCANCi0gICAgICAgICAgICAgICAgICB8IHRpbWVvdXQgfCBjYW5jZWxsZWQgfCB1bmtub3duKSI+ICAgICAgICANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBQRyBNZXNzYWdlIFN0YXRlIC0tPg0KLQ0KLQ0KLTwhRUxFTUVOVCBwYXAgICAgICAgICAgICAgICAgICAgICggcHVzaC1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwdXNoLXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYW5jZWwtbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FuY2VsLXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXN1bHRub3RpZmljYXRpb24tbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVzdWx0bm90aWZpY2F0aW9uLXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdGF0dXNxdWVyeS1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdGF0dXNxdWVyeS1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NxLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjcS1yZXNwb25zZSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhZG1lc3NhZ2UtcmVzcG9uc2UpID4NCi08IUFUVExJU1QgcGFwDQotICAgICAgICAgIHByb2R1Y3QtbmFtZSAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIHB1c2ggc3VibWlzc2lvbiBtZXNzYWdlICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgcHVzaC1tZXNzYWdlICggYWRkcmVzcyssIHF1YWxpdHktb2Ytc2VydmljZT8gKSA+DQotPCFBVFRMSVNUIHB1c2gtbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVsaXZlci1iZWZvcmUtdGltZXN0YW1wICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgZGVsaXZlci1hZnRlci10aW1lc3RhbXAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgc291cmNlLXJlZmVyZW5jZSAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgcHBnLW5vdGlmeS1yZXF1ZXN0ZWQtdG8gICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQgDQotICAgICAgICAgIHByb2dyZXNzLW5vdGVzLXJlcXVlc3RlZCAgICggdHJ1ZSB8IGZhbHNlICkgICJmYWxzZSINCi0+DQotDQotPCFFTEVNRU5UIGFkZHJlc3MgRU1QVFkgPg0KLTwhQVRUTElTVCBhZGRyZXNzDQotICAgICAgICAgIGFkZHJlc3MtdmFsdWUgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEIA0KLT4NCi0NCi08IUVMRU1FTlQgcXVhbGl0eS1vZi1zZXJ2aWNlIEVNUFRZID4NCi08IUFUVExJU1QgcXVhbGl0eS1vZi1zZXJ2aWNlDQotICAgICAgICAgIHByaW9yaXR5ICAgICAgICAgICAgICAgKCBoaWdoIHwgbWVkaXVtIHwgbG93ICkgICAgICAgICJtZWRpdW0iDQotICAgICAgICAgIGRlbGl2ZXJ5LW1ldGhvZCAgICAgICAgKCBjb25maXJtZWQgfCBwcmVmZXJjb25maXJtZWQgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1bmNvbmZpcm1lZCB8IG5vdHNwZWNpZmllZCApICJub3RzcGVjaWZpZWQiDQotICAgICAgICAgIG5ldHdvcmsgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIG5ldHdvcmstcmVxdWlyZWQgICAgICAgKCB0cnVlIHwgZmFsc2UgKSAgICAgICAgICAgICAgICJmYWxzZSINCi0gICAgICAgICAgYmVhcmVyICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgYmVhcmVyLXJlcXVpcmVkICAgICAgICAoIHRydWUgfCBmYWxzZSApICAgICAgICAgICAgICAgImZhbHNlIg0KLT4NCi0NCi0NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBwdXNoLXJlc3BvbnNlICggcHJvZ3Jlc3Mtbm90ZSosIHJlc3BvbnNlLXJlc3VsdCApID4NCi08IUFUVExJU1QgcHVzaC1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBzZW5kZXItYWRkcmVzcyAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHNlbmRlci1uYW1lICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgcmVwbHktdGltZSAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IUVMRU1FTlQgcHJvZ3Jlc3Mtbm90ZSBFTVBUWSA+DQotPCFBVFRMSVNUIHByb2dyZXNzLW5vdGUNCi0gICAgICAgICAgc3RhZ2UgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgbm90ZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICB0aW1lICAgICAgICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhRUxFTUVOVCByZXNwb25zZS1yZXN1bHQgRU1QVFkgPg0KLTwhQVRUTElTVCByZXNwb25zZS1yZXN1bHQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgY2FuY2VsIG9wZXJhdGlvbiAgICAgICAgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBjYW5jZWwtbWVzc2FnZSAoIGFkZHJlc3MqICkgPg0KLTwhQVRUTElTVCBjYW5jZWwtbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBjYW5jZWwtcmVzcG9uc2UgKCBjYW5jZWwtcmVzdWx0KyApID4NCi08IUFUVExJU1QgY2FuY2VsLXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhRUxFTUVOVCBjYW5jZWwtcmVzdWx0ICggYWRkcmVzcyogKSA+DQotPCFBVFRMSVNUIGNhbmNlbC1yZXN1bHQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2Ygbm90aWZ5IHJlc3VsdCBvcGVyYXRpb24gICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCByZXN1bHRub3RpZmljYXRpb24tbWVzc2FnZSAoIGFkZHJlc3MsIHF1YWxpdHktb2Ytc2VydmljZT8gKSA+DQotPCFBVFRMSVNUIHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIHNlbmRlci1hZGRyZXNzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgc2VuZGVyLW5hbWUgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICByZWNlaXZlZC10aW1lICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGV2ZW50LXRpbWUgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbWVzc2FnZS1zdGF0ZSAgICAgICAgICAlU3RhdGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCByZXN1bHRub3RpZmljYXRpb24tcmVzcG9uc2UgKCBhZGRyZXNzICkgPg0KLTwhQVRUTElTVCByZXN1bHRub3RpZmljYXRpb24tcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2Ygc3RhdHVzcXVlcnkgb3BlcmF0aW9uICAgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1tZXNzYWdlICggYWRkcmVzcyogKSA+DQotPCFBVFRMSVNUIHN0YXR1c3F1ZXJ5LW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgc3RhdHVzcXVlcnktcmVzcG9uc2UgKCBzdGF0dXNxdWVyeS1yZXN1bHQrICkgPg0KLTwhQVRUTElTVCBzdGF0dXNxdWVyeS1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IUVMRU1FTlQgc3RhdHVzcXVlcnktcmVzdWx0ICggYWRkcmVzcyosIHF1YWxpdHktb2Ytc2VydmljZT8gKSA+DQotPCFBVFRMSVNUIHN0YXR1c3F1ZXJ5LXJlc3VsdA0KLSAgICAgICAgICBldmVudC10aW1lICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIG1lc3NhZ2Utc3RhdGUgICAgICAgICAgJVN0YXRlOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgY2FwYWJpbGl0aWVzIHF1ZXJ5IG9wZXJhdGlvbiAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgY2NxLW1lc3NhZ2UgKCBhZGRyZXNzICkgPg0KLTwhQVRUTElTVCBjY3EtbWVzc2FnZQ0KLSAgICAgICAgICBxdWVyeS1pZCAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGFwcC1pZCAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgY2NxLXJlc3BvbnNlICggYWRkcmVzcyApID4NCi08IUFUVExJU1QgY2NxLXJlc3BvbnNlDQotICAgICAgICAgIHF1ZXJ5LWlkICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBiYWQgbWVzc2FnZSByZXNwb25zZSBtZXNzYWdlICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBiYWRtZXNzYWdlLXJlc3BvbnNlIEVNUFRZID4NCi08IUFUVExJU1QgYmFkbWVzc2FnZS1yZXNwb25zZQ0KLQljb2RlCQkJQ0RBVEEJI1JFUVVJUkVEDQotCWRlc2MJCQlDREFUQQkjSU1QTElFRA0KLQliYWQtbWVzc2FnZS1mcmFnbWVudAlDREFUQQkjSU1QTElFRA0KLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgtMjAwMS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvc2kuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9zaS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZTk3YzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS9zaS5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08IS0tDQotU2VydmljZSBJbmRpY2F0aW9uIChTSSkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1TSSBpcyBhbiBYTUwgbGFuZ3VhZ2UuICBUeXBpY2FsIHVzYWdlOg0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSBzaSBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgU0kgMS4wLy9FTiINCi0gICAgICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9zaS5kdGQiPg0KLSAgIDxzaT4NCi0gICAuLi4NCi0gICA8L3NpPg0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotDQotPCFFTlRJVFkgJSBEYXRldGltZSAiQ0RBVEEiPiAgICAgICAgICAgICA8IS0tIElTTyBkYXRlIGFuZCB0aW1lIC0tPg0KLTwhRU5USVRZICUgVVJJICAgICAgIkNEQVRBIj4gICAgICAgICAgICAgPCEtLSBVUkkgZGVzaWduYXRpbmcgYSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlwZXJ0ZXh0IG5vZGUgICAgLS0+DQotDQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PT0gVGhlIFNJIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09PS0tPg0KLTwhRUxFTUVOVCBzaSAoaW5kaWNhdGlvbixpbmZvPyk+DQotDQotDQotPCEtLT09PT09PT09PT09PT09PT09PSBUaGUgaW5kaWNhdGlvbiBFbGVtZW50ID09PT09PT09PT09PT09PT09PS0tPg0KLTwhRUxFTUVOVCBpbmRpY2F0aW9uICgjUENEQVRBKT4NCi08IUFUVExJU1QgaW5kaWNhdGlvbg0KLSAgaHJlZgkgICAgICAgICVVUkk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgc2ktaWQJICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIGNyZWF0ZWQJJURhdGV0aW1lOwkgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgc2ktZXhwaXJlcwklRGF0ZXRpbWU7CSAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBhY3Rpb24JKHNpZ25hbC1ub25lfHNpZ25hbC1sb3d8DQotICAgICAgICAgICAgICAgICBzaWduYWwtbWVkaXVtfHNpZ25hbC1oaWdofGRlbGV0ZSkgICJzaWduYWwtbWVkaXVtIiANCi0+DQotDQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PSBUaGUgSU5GTyBFbGVtZW50ID09PT09PT09PT09PT09PT09PT09PS0tPg0KLTwhRUxFTUVOVCBpbmZvIChpdGVtKyk+DQotDQotPCFFTEVNRU5UIGl0ZW0gKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCBpdGVtDQotICBjbGFzcwkgICAgICAgIE5NVE9LRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNSRVFVSVJFRCANCi0+DQotDQotPCEtLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0tLT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3NsLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvc2wuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODczMTFjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvc2wuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCEtLQ0KLVNlcnZpY2UgTG9hZGluZyAoU0wpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotU0wgaXMgYW4gWE1MIGxhbmd1YWdlLiAgVHlwaWNhbCB1c2FnZToNCi0gICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICA8IURPQ1RZUEUgc2wgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFNMIDEuMC8vRU4iDQotICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvc2wuZHRkIj4NCi0gICA8c2w+DQotICAgLi4uDQotICAgPC9zbD4NCi0NCi1UZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyANCi1BcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIHdlYiBzaXRlIGF0DQotaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZG9jcy9jb3B5cmlnaHQuaHRtLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgVVJJICJDREFUQSI+ICAgICAgICAgICAgICAgIDwhLS0gVVJJIGRlc2lnbmF0aW5nIGEgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBlcnRleHQgbm9kZSAgICAtLT4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09IFRoZSBTTCBFbGVtZW50ID09PT09PT09PT09PT09PT09PT09PS0tPg0KLTwhRUxFTUVOVCBzbCBFTVBUWT4NCi08IUFUVExJU1Qgc2wNCi0gIGhyZWYgICAgICAgICAgJVVSSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgYWN0aW9uICAgICAgICAoZXhlY3V0ZS1sb3d8ZXhlY3V0ZS1oaWdofGNhY2hlKSAgICAiZXhlY3V0ZS1sb3ciIA0KLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yLTEvd21sMTMuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS93bWwxMy5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiOGE0OWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS93bWwxMy5kdGQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3d0YS13bWwxMi5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi0xL3d0YS13bWwxMi5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MGY3ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTItMS93dGEtd21sMTIuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPCEtLQ0KLVdpcmVsZXNzIFRlbGVwaG9ueSBBcHBsaWNhdGlvbnMgV2lyZWxlc3MgTWFya3VwIExhbmd1YWdlIChXVEEtV01MKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotV1RBLVdNTCBpcyBhbiBYTUwgbGFuZ3VhZ2UuIFR5cGljYWwgdXNhZ2U6DQotPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotPCFET0NUWVBFIHd0YS13bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdUQS1XTUwgMS4yLy9FTiINCi0JImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93dGEtd21sMTIuZHRkIj4NCi08d3RhLXdtbD4NCi0uLi4NCi08L3d0YS13bWw+DQotLS0+DQotDQotPCFFTlRJVFkgJSB3bWwtZHRkIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4yLy9FTiINCi0JImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwxMi5kdGQiPg0KLQ0KLSV3bWwtZHRkOw0KLQ0KLTwhRUxFTUVOVCB3dGEtd21sICggaGVhZD8sIHRlbXBsYXRlPywgY2FyZCsgKT4NCi08IUFUVExJU1Qgd3RhLXdtbA0KLQl4bWw6bGFuZwkJTk1UT0tFTgkjSU1QTElFRA0KLQklY29yZWF0dHJzOw0KLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9jaGFubmVsMTIuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvY2hhbm5lbDEyLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYyMTAzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9jaGFubmVsMTIuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCEtLQ0KLSAgICAgIFRoaXMgRFREIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBpZGVudGlmaWVyOg0KLSAgICAgCSItLy9XQVBGT1JVTS8vRFREIENIQU5ORUwgMS4yLy9FTiINCi0tLT4NCi0NCi08IUVOVElUWSAlIEJvb2xlYW4gIiggdHJ1ZSB8IGZhbHNlICkiPg0KLQ0KLTwhLS0gYSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgLS0+DQotPCFFTlRJVFkgJSBVUkkgIkNEQVRBIiA+DQotDQotPCEtLSBvbmUgb3IgbW9yZSBkaWdpdHMgKE5VTUJFUikgLS0+DQotPCFFTlRJVFkgJSBOdW1iZXIgIkNEQVRBIiA+ICANCi0NCi08IS0tIENoYW5uZWwgRXZlbnRzIC0tPg0KLTwhRU5USVRZICUgQ2hhbm5lbEV2ZW50LmF0dHJpYnMNCi0JInN1Y2Nlc3MJCSVVUkk7CQkjSU1QTElFRA0KLQkgZmFpbHVyZQkJJVVSSTsJCSNJTVBMSUVEIg0KLT4NCi0NCi08IUVMRU1FTlQgY2hhbm5lbCAodGl0bGUgLCBhYnN0cmFjdD8gLCByZXNvdXJjZSogKSA+DQotPCFBVFRMSVNUIGNoYW5uZWwNCi0JbWF4c3BhY2UJCSVOdW1iZXI7CSNSRVFVSVJFRCANCi0JYmFzZQkJCSVVUkk7CQkjSU1QTElFRA0KLQlldmVudGlkCQkJQ0RBVEEJCSNJTVBMSUVEDQotCWNoYW5uZWxpZAkJQ0RBVEEJCSNSRVFVSVJFRCANCi0JdXNlcmFjY2Vzc2libGUgCQklQm9vbGVhbjsJImZhbHNlIg0KLQklQ2hhbm5lbEV2ZW50LmF0dHJpYnM7DQotPg0KLQ0KLTwhRUxFTUVOVCB0aXRsZSAoI1BDREFUQSk+DQotPCFFTEVNRU5UIGFic3RyYWN0ICgjUENEQVRBKT4NCi0NCi08IUVMRU1FTlQgcmVzb3VyY2UgRU1QVFk+DQotPCFBVFRMSVNUIHJlc291cmNlDQotCWhyZWYgICAgICAJJVVSSTsJICAgCSNSRVFVSVJFRA0KLQlsYXN0bW9kCQklTnVtYmVyOwkjSU1QTElFRA0KLQlldGFnCQlOTVRPS0VOCQkjSU1QTElFRA0KLQltZDUJCU5NVE9LRU4JCSNJTVBMSUVEDQotPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3BhcF8xLjAuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvcGFwXzEuMC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZWQwZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvcGFwXzEuMC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMTkgKzAsMCBAQAotPCEtLQ0KLVB1c2ggQWNjZXNzIFByb3RvY29sIChQQVApIHYxLjAgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LTIwMDEuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1QQVAgaXMgYW4gWE1MIGxhbmd1YWdlLiBUeXBpY2FsIHVzYWdlOg0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSBwYXAgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFBBUCAxLjAvL0VOIg0KLSAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3BhcF8xLjAuZHRkIj4NCi0gICA8cGFwPg0KLSAgICAgIC4uLg0KLSAgIDwvcGFwPg0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotPCFFTlRJVFkgJSBEYXRldGltZSAiQ0RBVEEiPiAgICAgPCEtLSBJU08gZGF0ZSBhbmQgdGltZSAtLT4NCi08IUVOVElUWSAlIFN0YXRlICAiKHJlamVjdGVkIHwgcGVuZGluZyANCi0gICAgICAgICAgICAgICAgICB8IGRlbGl2ZXJlZCB8IHVuZGVsaXZlcmFibGUgDQotICAgICAgICAgICAgICAgICAgfCBleHBpcmVkIHwgYWJvcnRlZCANCi0gICAgICAgICAgICAgICAgICB8IHRpbWVvdXQgfCBjYW5jZWxsZWQgfCB1bmtub3duKSI+ICAgICAgICANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBQRyBNZXNzYWdlIFN0YXRlIC0tPg0KLQ0KLQ0KLTwhRUxFTUVOVCBwYXAgICAgICAgICAgICAgICAgICAgICggcHVzaC1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwdXNoLXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYW5jZWwtbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FuY2VsLXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXN1bHRub3RpZmljYXRpb24tbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVzdWx0bm90aWZpY2F0aW9uLXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdGF0dXNxdWVyeS1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdGF0dXNxdWVyeS1yZXNwb25zZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NxLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNjcS1yZXNwb25zZSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGJhZG1lc3NhZ2UtcmVzcG9uc2UpID4NCi08IUFUVExJU1QgcGFwDQotICAgICAgICAgIHByb2R1Y3QtbmFtZSAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIERlY2xhcmF0aW9uIG9mIHB1c2ggc3VibWlzc2lvbiBtZXNzYWdlICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgcHVzaC1tZXNzYWdlICggYWRkcmVzcyssIHF1YWxpdHktb2Ytc2VydmljZT8gKSA+DQotPCFBVFRMSVNUIHB1c2gtbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVsaXZlci1iZWZvcmUtdGltZXN0YW1wICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgZGVsaXZlci1hZnRlci10aW1lc3RhbXAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgc291cmNlLXJlZmVyZW5jZSAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgcHBnLW5vdGlmeS1yZXF1ZXN0ZWQtdG8gICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQgDQotICAgICAgICAgIHByb2dyZXNzLW5vdGVzLXJlcXVlc3RlZCAgICggdHJ1ZSB8IGZhbHNlICkgICJmYWxzZSINCi0+DQotDQotPCFFTEVNRU5UIGFkZHJlc3MgRU1QVFkgPg0KLTwhQVRUTElTVCBhZGRyZXNzDQotICAgICAgICAgIGFkZHJlc3MtdmFsdWUgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEIA0KLT4NCi0NCi08IUVMRU1FTlQgcXVhbGl0eS1vZi1zZXJ2aWNlIEVNUFRZID4NCi08IUFUVExJU1QgcXVhbGl0eS1vZi1zZXJ2aWNlDQotICAgICAgICAgIHByaW9yaXR5ICAgICAgICAgICAgICAgKCBoaWdoIHwgbWVkaXVtIHwgbG93ICkgICAgICAgICJtZWRpdW0iDQotICAgICAgICAgIGRlbGl2ZXJ5LW1ldGhvZCAgICAgICAgKCBjb25maXJtZWQgfCBwcmVmZXJjb25maXJtZWQgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1bmNvbmZpcm1lZCB8IG5vdHNwZWNpZmllZCApICJub3RzcGVjaWZpZWQiDQotICAgICAgICAgIG5ldHdvcmsgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIG5ldHdvcmstcmVxdWlyZWQgICAgICAgKCB0cnVlIHwgZmFsc2UgKSAgICAgICAgICAgICAgICJmYWxzZSINCi0gICAgICAgICAgYmVhcmVyICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgYmVhcmVyLXJlcXVpcmVkICAgICAgICAoIHRydWUgfCBmYWxzZSApICAgICAgICAgICAgICAgImZhbHNlIg0KLT4NCi0NCi0NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBwdXNoLXJlc3BvbnNlICggcHJvZ3Jlc3Mtbm90ZSosIHJlc3BvbnNlLXJlc3VsdCApID4NCi08IUFUVExJU1QgcHVzaC1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBzZW5kZXItYWRkcmVzcyAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHNlbmRlci1uYW1lICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgcmVwbHktdGltZSAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IUVMRU1FTlQgcHJvZ3Jlc3Mtbm90ZSBFTVBUWSA+DQotPCFBVFRMSVNUIHByb2dyZXNzLW5vdGUNCi0gICAgICAgICAgc3RhZ2UgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgbm90ZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICB0aW1lICAgICAgICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhRUxFTUVOVCByZXNwb25zZS1yZXN1bHQgRU1QVFkgPg0KLTwhQVRUTElTVCByZXNwb25zZS1yZXN1bHQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgY2FuY2VsIG9wZXJhdGlvbiAgICAgICAgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBjYW5jZWwtbWVzc2FnZSAoIGFkZHJlc3MqICkgPg0KLTwhQVRUTElTVCBjYW5jZWwtbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBjYW5jZWwtcmVzcG9uc2UgKCBjYW5jZWwtcmVzdWx0KyApID4NCi08IUFUVExJU1QgY2FuY2VsLXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhRUxFTUVOVCBjYW5jZWwtcmVzdWx0ICggYWRkcmVzcyogKSA+DQotPCFBVFRMSVNUIGNhbmNlbC1yZXN1bHQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2Ygbm90aWZ5IHJlc3VsdCBvcGVyYXRpb24gICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCByZXN1bHRub3RpZmljYXRpb24tbWVzc2FnZSAoIGFkZHJlc3MsIHF1YWxpdHktb2Ytc2VydmljZT8gKSA+DQotPCFBVFRMSVNUIHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIHNlbmRlci1hZGRyZXNzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgc2VuZGVyLW5hbWUgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICByZWNlaXZlZC10aW1lICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGV2ZW50LXRpbWUgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbWVzc2FnZS1zdGF0ZSAgICAgICAgICAlU3RhdGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCByZXN1bHRub3RpZmljYXRpb24tcmVzcG9uc2UgKCBhZGRyZXNzICkgPg0KLTwhQVRUTElTVCByZXN1bHRub3RpZmljYXRpb24tcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2Ygc3RhdHVzcXVlcnkgb3BlcmF0aW9uICAgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1tZXNzYWdlICggYWRkcmVzcyogKSA+DQotPCFBVFRMSVNUIHN0YXR1c3F1ZXJ5LW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgc3RhdHVzcXVlcnktcmVzcG9uc2UgKCBzdGF0dXNxdWVyeS1yZXN1bHQrICkgPg0KLTwhQVRUTElTVCBzdGF0dXNxdWVyeS1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IUVMRU1FTlQgc3RhdHVzcXVlcnktcmVzdWx0ICggYWRkcmVzcyosIHF1YWxpdHktb2Ytc2VydmljZT8gKSA+DQotPCFBVFRMSVNUIHN0YXR1c3F1ZXJ5LXJlc3VsdA0KLSAgICAgICAgICBldmVudC10aW1lICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIG1lc3NhZ2Utc3RhdGUgICAgICAgICAgJVN0YXRlOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgY2FwYWJpbGl0aWVzIHF1ZXJ5IG9wZXJhdGlvbiAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgY2NxLW1lc3NhZ2UgKCBhZGRyZXNzICkgPg0KLTwhQVRUTElTVCBjY3EtbWVzc2FnZQ0KLSAgICAgICAgICBxdWVyeS1pZCAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGFwcC1pZCAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgY2NxLXJlc3BvbnNlICggYWRkcmVzcyApID4NCi08IUFUVExJU1QgY2NxLXJlc3BvbnNlDQotICAgICAgICAgIHF1ZXJ5LWlkICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBiYWQgbWVzc2FnZSByZXNwb25zZSBtZXNzYWdlICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBiYWRtZXNzYWdlLXJlc3BvbnNlIEVNUFRZID4NCi08IUFUVExJU1QgYmFkbWVzc2FnZS1yZXNwb25zZQ0KLQljb2RlCQkJQ0RBVEEJI1JFUVVJUkVEDQotCWRlc2MJCQlDREFUQQkjSU1QTElFRA0KLQliYWQtbWVzc2FnZS1mcmFnbWVudAlDREFUQQkjSU1QTElFRA0KLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgtMjAwMS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3NpLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3NpLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNlOTdjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9zaS5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08IS0tDQotU2VydmljZSBJbmRpY2F0aW9uIChTSSkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1TSSBpcyBhbiBYTUwgbGFuZ3VhZ2UuICBUeXBpY2FsIHVzYWdlOg0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSBzaSBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgU0kgMS4wLy9FTiINCi0gICAgICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9zaS5kdGQiPg0KLSAgIDxzaT4NCi0gICAuLi4NCi0gICA8L3NpPg0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotDQotPCFFTlRJVFkgJSBEYXRldGltZSAiQ0RBVEEiPiAgICAgICAgICAgICA8IS0tIElTTyBkYXRlIGFuZCB0aW1lIC0tPg0KLTwhRU5USVRZICUgVVJJICAgICAgIkNEQVRBIj4gICAgICAgICAgICAgPCEtLSBVUkkgZGVzaWduYXRpbmcgYSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlwZXJ0ZXh0IG5vZGUgICAgLS0+DQotDQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PT0gVGhlIFNJIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09PS0tPg0KLTwhRUxFTUVOVCBzaSAoaW5kaWNhdGlvbixpbmZvPyk+DQotDQotDQotPCEtLT09PT09PT09PT09PT09PT09PSBUaGUgaW5kaWNhdGlvbiBFbGVtZW50ID09PT09PT09PT09PT09PT09PS0tPg0KLTwhRUxFTUVOVCBpbmRpY2F0aW9uICgjUENEQVRBKT4NCi08IUFUVExJU1QgaW5kaWNhdGlvbg0KLSAgaHJlZgkgICAgICAgICVVUkk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgc2ktaWQJICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIGNyZWF0ZWQJJURhdGV0aW1lOwkgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgc2ktZXhwaXJlcwklRGF0ZXRpbWU7CSAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBhY3Rpb24JKHNpZ25hbC1ub25lfHNpZ25hbC1sb3d8DQotICAgICAgICAgICAgICAgICBzaWduYWwtbWVkaXVtfHNpZ25hbC1oaWdofGRlbGV0ZSkgICJzaWduYWwtbWVkaXVtIiANCi0+DQotDQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PSBUaGUgSU5GTyBFbGVtZW50ID09PT09PT09PT09PT09PT09PT09PS0tPg0KLTwhRUxFTUVOVCBpbmZvIChpdGVtKyk+DQotDQotPCFFTEVNRU5UIGl0ZW0gKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCBpdGVtDQotICBjbGFzcwkgICAgICAgIE5NVE9LRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNSRVFVSVJFRCANCi0+DQotDQotPCEtLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0tLT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9zbC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi9zbC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NzMxMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvc2wuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCEtLQ0KLVNlcnZpY2UgTG9hZGluZyAoU0wpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotU0wgaXMgYW4gWE1MIGxhbmd1YWdlLiAgVHlwaWNhbCB1c2FnZToNCi0gICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICA8IURPQ1RZUEUgc2wgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFNMIDEuMC8vRU4iDQotICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvc2wuZHRkIj4NCi0gICA8c2w+DQotICAgLi4uDQotICAgPC9zbD4NCi0NCi1UZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyANCi1BcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIHdlYiBzaXRlIGF0DQotaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZG9jcy9jb3B5cmlnaHQuaHRtLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgVVJJICJDREFUQSI+ICAgICAgICAgICAgICAgIDwhLS0gVVJJIGRlc2lnbmF0aW5nIGEgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBlcnRleHQgbm9kZSAgICAtLT4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09IFRoZSBTTCBFbGVtZW50ID09PT09PT09PT09PT09PT09PT09PS0tPg0KLTwhRUxFTUVOVCBzbCBFTVBUWT4NCi08IUFUVExJU1Qgc2wNCi0gIGhyZWYgICAgICAgICAgJVVSSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgYWN0aW9uICAgICAgICAoZXhlY3V0ZS1sb3d8ZXhlY3V0ZS1oaWdofGNhY2hlKSAgICAiZXhlY3V0ZS1sb3ciIA0KLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3dtbDEyLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMS0yL3dtbDEyLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQwM2M2Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi93bWwxMi5kdGQKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi93dGEtd21sMTIuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0xLTIvd3RhLXdtbDEyLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDYwZjdkZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTEtMi93dGEtd21sMTIuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotPCEtLQ0KLVdpcmVsZXNzIFRlbGVwaG9ueSBBcHBsaWNhdGlvbnMgV2lyZWxlc3MgTWFya3VwIExhbmd1YWdlIChXVEEtV01MKSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotV1RBLVdNTCBpcyBhbiBYTUwgbGFuZ3VhZ2UuIFR5cGljYWwgdXNhZ2U6DQotPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotPCFET0NUWVBFIHd0YS13bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdUQS1XTUwgMS4yLy9FTiINCi0JImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93dGEtd21sMTIuZHRkIj4NCi08d3RhLXdtbD4NCi0uLi4NCi08L3d0YS13bWw+DQotLS0+DQotDQotPCFFTlRJVFkgJSB3bWwtZHRkIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4yLy9FTiINCi0JImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwxMi5kdGQiPg0KLQ0KLSV3bWwtZHRkOw0KLQ0KLTwhRUxFTUVOVCB3dGEtd21sICggaGVhZD8sIHRlbXBsYXRlPywgY2FyZCsgKT4NCi08IUFUVExJU1Qgd3RhLXdtbA0KLQl4bWw6bGFuZwkJTk1UT0tFTgkjSU1QTElFRA0KLQklY29yZWF0dHJzOw0KLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9jaGFubmVsMTIuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvY2hhbm5lbDEyLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGYyMTAzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9jaGFubmVsMTIuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotPCEtLQ0KLSAgICAgIFRoaXMgRFREIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBpZGVudGlmaWVyOg0KLSAgICAgCSItLy9XQVBGT1JVTS8vRFREIENIQU5ORUwgMS4yLy9FTiINCi0tLT4NCi0NCi08IUVOVElUWSAlIEJvb2xlYW4gIiggdHJ1ZSB8IGZhbHNlICkiPg0KLQ0KLTwhLS0gYSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgLS0+DQotPCFFTlRJVFkgJSBVUkkgIkNEQVRBIiA+DQotDQotPCEtLSBvbmUgb3IgbW9yZSBkaWdpdHMgKE5VTUJFUikgLS0+DQotPCFFTlRJVFkgJSBOdW1iZXIgIkNEQVRBIiA+ICANCi0NCi08IS0tIENoYW5uZWwgRXZlbnRzIC0tPg0KLTwhRU5USVRZICUgQ2hhbm5lbEV2ZW50LmF0dHJpYnMNCi0JInN1Y2Nlc3MJCSVVUkk7CQkjSU1QTElFRA0KLQkgZmFpbHVyZQkJJVVSSTsJCSNJTVBMSUVEIg0KLT4NCi0NCi08IUVMRU1FTlQgY2hhbm5lbCAodGl0bGUgLCBhYnN0cmFjdD8gLCByZXNvdXJjZSogKSA+DQotPCFBVFRMSVNUIGNoYW5uZWwNCi0JbWF4c3BhY2UJCSVOdW1iZXI7CSNSRVFVSVJFRCANCi0JYmFzZQkJCSVVUkk7CQkjSU1QTElFRA0KLQlldmVudGlkCQkJQ0RBVEEJCSNJTVBMSUVEDQotCWNoYW5uZWxpZAkJQ0RBVEEJCSNSRVFVSVJFRCANCi0JdXNlcmFjY2Vzc2libGUgCQklQm9vbGVhbjsJImZhbHNlIg0KLQklQ2hhbm5lbEV2ZW50LmF0dHJpYnM7DQotPg0KLQ0KLTwhRUxFTUVOVCB0aXRsZSAoI1BDREFUQSk+DQotPCFFTEVNRU5UIGFic3RyYWN0ICgjUENEQVRBKT4NCi0NCi08IUVMRU1FTlQgcmVzb3VyY2UgRU1QVFk+DQotPCFBVFRMSVNUIHJlc291cmNlDQotCWhyZWYgICAgICAJJVVSSTsJICAgCSNSRVFVSVJFRA0KLQlsYXN0bW9kCQklTnVtYmVyOwkjSU1QTElFRA0KLQlldGFnCQlOTVRPS0VOCQkjSU1QTElFRA0KLQltZDUJCU5NVE9LRU4JCSNJTVBMSUVEDQotPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3BhcF8yLjAuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvcGFwXzIuMC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNmU4ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvcGFwXzIuMC5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwyMjMgKzAsMCBAQAotPCEtLQ0KLVB1c2ggQWNjZXNzIFByb3RvY29sIChQQVApIHYyLjAgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LTIwMDEuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1QQVAgaXMgYW4gWE1MIGxhbmd1YWdlLiBUeXBpY2FsIHVzYWdlOg0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSBwYXAgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFBBUCAyLjAvL0VOIg0KLSAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3BhcF8yLjAuZHRkIg0KLSAgICAgICAgICAgICBbPD93YXAtcGFwLXZlciBzdXBwb3J0ZWQtdmVyc2lvbnM9IjIuMCwxLioiPz5dPg0KLSAgIDxwYXA+DQotICAgICAgLi4uDQotICAgPC9wYXA+DQotDQotVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgDQotQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiB3ZWIgc2l0ZSBhdA0KLWh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2RvY3MvY29weXJpZ2h0Lmh0bS4NCi0tLT4NCi0NCi08IUVOVElUWSAlIERhdGV0aW1lICJDREFUQSI+ICAgICA8IS0tIElTTyBkYXRlIGFuZCB0aW1lIC0tPg0KLTwhRU5USVRZICUgU3RhdGUgICIocmVqZWN0ZWQgfCBwZW5kaW5nIA0KLSAgICAgICAgICAgICAgICAgIHwgZGVsaXZlcmVkIHwgdW5kZWxpdmVyYWJsZSANCi0gICAgICAgICAgICAgICAgICB8IGV4cGlyZWQgfCBhYm9ydGVkIA0KLSAgICAgICAgICAgICAgICAgIHwgdGltZW91dCB8IGNhbmNlbGxlZCB8IHVua25vd24pIj4gICAgICAgIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUFBHIE1lc3NhZ2UgU3RhdGUgLS0+DQotDQotDQotPCFFTEVNRU5UIHBhcCAgICAgICAgICAgICAgICAgICAgKCBwdXNoLW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHB1c2gtcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhbmNlbC1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYW5jZWwtcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXN1bHRub3RpZmljYXRpb24tcmVzcG9uc2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0YXR1c3F1ZXJ5LW1lc3NhZ2UNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHN0YXR1c3F1ZXJ5LXJlc3BvbnNlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjY3EtbWVzc2FnZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2NxLXJlc3BvbnNlIA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFkbWVzc2FnZS1yZXNwb25zZSkgPg0KLTwhQVRUTElTVCBwYXANCi0gICAgICAgICAgcHJvZHVjdC1uYW1lICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgcHVzaCBzdWJtaXNzaW9uIG1lc3NhZ2UgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBwdXNoLW1lc3NhZ2UgKCBhZGRyZXNzKywgcXVhbGl0eS1vZi1zZXJ2aWNlPyApID4NCi08IUFUVExJU1QgcHVzaC1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICByZXBsYWNlLXB1c2gtaWQgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICByZXBsYWNlLW1ldGhvZCAgICAgICAgICAgICAoIHBlbmRpbmctb25seSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhbGwgKSAgICAgICAgICAgImFsbCINCi0gICAgICAgICAgZGVsaXZlci1iZWZvcmUtdGltZXN0YW1wICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgZGVsaXZlci1hZnRlci10aW1lc3RhbXAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgc291cmNlLXJlZmVyZW5jZSAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgcHBnLW5vdGlmeS1yZXF1ZXN0ZWQtdG8gICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQgDQotICAgICAgICAgIHByb2dyZXNzLW5vdGVzLXJlcXVlc3RlZCAgICggdHJ1ZSB8IGZhbHNlICkgICJmYWxzZSINCi0+DQotDQotPCFFTEVNRU5UIGFkZHJlc3MgRU1QVFkgPg0KLTwhQVRUTElTVCBhZGRyZXNzDQotICAgICAgICAgIGFkZHJlc3MtdmFsdWUgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEIA0KLT4NCi0NCi08IUVMRU1FTlQgcXVhbGl0eS1vZi1zZXJ2aWNlIEVNUFRZID4NCi08IUFUVExJU1QgcXVhbGl0eS1vZi1zZXJ2aWNlDQotICAgICAgICAgIHByaW9yaXR5ICAgICAgICAgICAgICAgKCBoaWdoIHwgbWVkaXVtIHwgbG93ICkgICAgICAgICJtZWRpdW0iDQotICAgICAgICAgIGRlbGl2ZXJ5LW1ldGhvZCAgICAgICAgKCBjb25maXJtZWQgfCBwcmVmZXJjb25maXJtZWQgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1bmNvbmZpcm1lZCB8IG5vdHNwZWNpZmllZCApICJub3RzcGVjaWZpZWQiDQotICAgICAgICAgIG5ldHdvcmsgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIG5ldHdvcmstcmVxdWlyZWQgICAgICAgKCB0cnVlIHwgZmFsc2UgKSAgICAgICAgICAgICAgICJmYWxzZSINCi0gICAgICAgICAgYmVhcmVyICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgYmVhcmVyLXJlcXVpcmVkICAgICAgICAoIHRydWUgfCBmYWxzZSApICAgICAgICAgICAgICAgImZhbHNlIg0KLT4NCi0NCi0NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBwdXNoLXJlc3BvbnNlICggcHJvZ3Jlc3Mtbm90ZSosIHJlc3BvbnNlLXJlc3VsdCApID4NCi08IUFUVExJU1QgcHVzaC1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBzZW5kZXItYWRkcmVzcyAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIHNlbmRlci1uYW1lICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgcmVwbHktdGltZSAgICAgICAgICAgICAlRGF0ZXRpbWU7ICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IUVMRU1FTlQgcHJvZ3Jlc3Mtbm90ZSBFTVBUWSA+DQotPCFBVFRMSVNUIHByb2dyZXNzLW5vdGUNCi0gICAgICAgICAgc3RhZ2UgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgbm90ZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICB0aW1lICAgICAgICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotPg0KLQ0KLTwhRUxFTUVOVCByZXNwb25zZS1yZXN1bHQgRU1QVFkgPg0KLTwhQVRUTElTVCByZXNwb25zZS1yZXN1bHQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgY2FuY2VsIG9wZXJhdGlvbiAgICAgICAgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBjYW5jZWwtbWVzc2FnZSAoIGFkZHJlc3MqICkgPg0KLTwhQVRUTElTVCBjYW5jZWwtbWVzc2FnZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBjYW5jZWwtcmVzcG9uc2UgKCBjYW5jZWwtcmVzdWx0KyApID4NCi08IUFUVExJU1QgY2FuY2VsLXJlc3BvbnNlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotPg0KLQ0KLTwhRUxFTUVOVCBjYW5jZWwtcmVzdWx0ICggYWRkcmVzcyogKSA+DQotPCFBVFRMSVNUIGNhbmNlbC1yZXN1bHQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2Ygbm90aWZ5IHJlc3VsdCBvcGVyYXRpb24gICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCByZXN1bHRub3RpZmljYXRpb24tbWVzc2FnZSAoIGFkZHJlc3MsIHF1YWxpdHktb2Ytc2VydmljZT8gKSA+DQotPCFBVFRMSVNUIHJlc3VsdG5vdGlmaWNhdGlvbi1tZXNzYWdlDQotICAgICAgICAgIHB1c2gtaWQgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIHNlbmRlci1hZGRyZXNzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgc2VuZGVyLW5hbWUgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICAgICByZWNlaXZlZC10aW1lICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGV2ZW50LXRpbWUgICAgICAgICAgICAgJURhdGV0aW1lOyAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgbWVzc2FnZS1zdGF0ZSAgICAgICAgICAlU3RhdGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCByZXN1bHRub3RpZmljYXRpb24tcmVzcG9uc2UgKCBhZGRyZXNzICkgPg0KLTwhQVRUTElTVCByZXN1bHRub3RpZmljYXRpb24tcmVzcG9uc2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi0NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2Ygc3RhdHVzcXVlcnkgb3BlcmF0aW9uICAgICAgLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgUHVzaCBJbml0aWF0b3IgdG8gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheS0tPg0KLQ0KLTwhRUxFTUVOVCBzdGF0dXNxdWVyeS1tZXNzYWdlICggYWRkcmVzcyogKSA+DQotPCFBVFRMSVNUIHN0YXR1c3F1ZXJ5LW1lc3NhZ2UNCi0gICAgICAgICAgcHVzaC1pZCAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgc3RhdHVzcXVlcnktcmVzcG9uc2UgKCBzdGF0dXNxdWVyeS1yZXN1bHQrICkgPg0KLTwhQVRUTElTVCBzdGF0dXNxdWVyeS1yZXNwb25zZQ0KLSAgICAgICAgICBwdXNoLWlkICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi0NCi08IUVMRU1FTlQgc3RhdHVzcXVlcnktcmVzdWx0ICggYWRkcmVzcyosIHF1YWxpdHktb2Ytc2VydmljZT8gKSA+DQotPCFBVFRMSVNUIHN0YXR1c3F1ZXJ5LXJlc3VsdA0KLSAgICAgICAgICBldmVudC10aW1lICAgICAgICAgICAgICVEYXRldGltZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIG1lc3NhZ2Utc3RhdGUgICAgICAgICAgJVN0YXRlOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGNvZGUgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgICAgIGRlc2MgICAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotDQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gRGVjbGFyYXRpb24gb2YgY2FwYWJpbGl0aWVzIHF1ZXJ5IG9wZXJhdGlvbiAgICAtLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIFB1c2ggSW5pdGlhdG9yIHRvIHRoZSBwdXNoIHByb3h5IGdhdGV3YXktLT4NCi0NCi08IUVMRU1FTlQgY2NxLW1lc3NhZ2UgKCBhZGRyZXNzICkgPg0KLTwhQVRUTElTVCBjY3EtbWVzc2FnZQ0KLSAgICAgICAgICBxdWVyeS1pZCAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGFwcC1pZCAgICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCEtLXRoaXMgbWVzc2FnZSBnb2VzIGZyb20gdGhlIHB1c2ggcHJveHkgZ2F0ZXdheSB0byB0aGUgUHVzaCBJbml0aWF0b3ItLT4NCi0NCi08IUVMRU1FTlQgY2NxLXJlc3BvbnNlICggYWRkcmVzcyApID4NCi08IUFUVExJU1QgY2NxLXJlc3BvbnNlDQotICAgICAgICAgIHF1ZXJ5LWlkICAgICAgICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAgICAgY29kZSAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICAgICAgZGVzYyAgICAgICAgICAgICAgICAgICBDREFUQSAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBEZWNsYXJhdGlvbiBvZiBiYWQgbWVzc2FnZSByZXNwb25zZSBtZXNzYWdlICAgIC0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi0NCi0NCi08IS0tdGhpcyBtZXNzYWdlIGdvZXMgZnJvbSB0aGUgcHVzaCBwcm94eSBnYXRld2F5IHRvIHRoZSBQdXNoIEluaXRpYXRvci0tPg0KLQ0KLTwhRUxFTUVOVCBiYWRtZXNzYWdlLXJlc3BvbnNlIEVNUFRZID4NCi08IUFUVExJU1QgYmFkbWVzc2FnZS1yZXNwb25zZQ0KLSAgICAgICAgICBjb2RlICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgICAgICBkZXNjICAgICAgICAgICAgICAgICAgIENEQVRBICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgICAgIGJhZC1tZXNzYWdlLWZyYWdtZW50ICAgQ0RBVEEgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCEtLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LTIwMDEuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0tLT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9wcm92LmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3Byb3YuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmMwNDZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3Byb3YuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotPCEtLQ0KLUNsaWVudCBQcm92aXNpb25pbmcgdjEuMCBEb2N1bWVudCBUeXBlIERlZmluaXRpb24uDQotDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgtMjAwMS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLQ0KLUNvbm5lY3Rpdml0eSBEb2N1bWVudCBUeXBlIERlZmluaXRpb24NCi1Db25uZWN0aXZpdHkgaXMgYW4gWE1MIGxhbmd1YWdlLiBUeXBpY2FsIFVzYWdlOg0KLQ0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSB3YXAtcHJvdmlzaW9uaW5nZG9jIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBQUk9WIDEuMC8vRU4iDQotICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvcHJvdi5kdGQiPg0KLSAgICAgICAgICAgIA0KLTx3YXAtcHJvdmlzaW9uaW5nZG9jPg0KLS4uLg0KLTwvd2FwLXByb3Zpc2lvbmluZ2RvYz4NCi0NCi0NCi1UZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyANCi1BcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIHdlYiBzaXRlIGF0DQotaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZG9jcy9jb3B5cmlnaHQuaHRtLg0KLS0tPg0KLQ0KLTwhRUxFTUVOVCB3YXAtcHJvdmlzaW9uaW5nZG9jIChjaGFyYWN0ZXJpc3RpYyspPg0KLTwhQVRUTElTVCB3YXAtcHJvdmlzaW9uaW5nZG9jDQotICB2ZXJzaW9uICAgQ0RBVEEgI0lNUExJRUQNCi0+DQotDQotPCFFTEVNRU5UIGNoYXJhY3RlcmlzdGljIChwYXJtKiwgY2hhcmFjdGVyaXN0aWMqKT4NCi08IUFUVExJU1QgY2hhcmFjdGVyaXN0aWMNCi0gIHR5cGUgQ0RBVEEgI1JFUVVJUkVEDQotIA0KLT4NCi0NCi08IUVMRU1FTlQgcGFybSBFTVBUWT4NCi08IUFUVExJU1QgcGFybQ0KLSAgbmFtZSAgQ0RBVEEgI1JFUVVJUkVEDQotICB2YWx1ZSBDREFUQSAjSU1QTElFRA0KLT4NCi0NCi0NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgtMjAwMS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3NpLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3NpLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNlOTdjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9zaS5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBACi08IS0tDQotU2VydmljZSBJbmRpY2F0aW9uIChTSSkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0NCi1TSSBpcyBhbiBYTUwgbGFuZ3VhZ2UuICBUeXBpY2FsIHVzYWdlOg0KLSAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgIDwhRE9DVFlQRSBzaSBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgU0kgMS4wLy9FTiINCi0gICAgICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC9zaS5kdGQiPg0KLSAgIDxzaT4NCi0gICAuLi4NCi0gICA8L3NpPg0KLQ0KLVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIA0KLUFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gd2ViIHNpdGUgYXQNCi1odHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kb2NzL2NvcHlyaWdodC5odG0uDQotLS0+DQotDQotDQotPCFFTlRJVFkgJSBEYXRldGltZSAiQ0RBVEEiPiAgICAgICAgICAgICA8IS0tIElTTyBkYXRlIGFuZCB0aW1lIC0tPg0KLTwhRU5USVRZICUgVVJJICAgICAgIkNEQVRBIj4gICAgICAgICAgICAgPCEtLSBVUkkgZGVzaWduYXRpbmcgYSANCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHlwZXJ0ZXh0IG5vZGUgICAgLS0+DQotDQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PT0gVGhlIFNJIEVsZW1lbnQgPT09PT09PT09PT09PT09PT09PT09PS0tPg0KLTwhRUxFTUVOVCBzaSAoaW5kaWNhdGlvbixpbmZvPyk+DQotDQotDQotPCEtLT09PT09PT09PT09PT09PT09PSBUaGUgaW5kaWNhdGlvbiBFbGVtZW50ID09PT09PT09PT09PT09PT09PS0tPg0KLTwhRUxFTUVOVCBpbmRpY2F0aW9uICgjUENEQVRBKT4NCi08IUFUVExJU1QgaW5kaWNhdGlvbg0KLSAgaHJlZgkgICAgICAgICVVUkk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgc2ktaWQJICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gIGNyZWF0ZWQJJURhdGV0aW1lOwkgICAgICAgICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgc2ktZXhwaXJlcwklRGF0ZXRpbWU7CSAgICAgICAgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICBhY3Rpb24JKHNpZ25hbC1ub25lfHNpZ25hbC1sb3d8DQotICAgICAgICAgICAgICAgICBzaWduYWwtbWVkaXVtfHNpZ25hbC1oaWdofGRlbGV0ZSkgICJzaWduYWwtbWVkaXVtIiANCi0+DQotDQotDQotPCEtLT09PT09PT09PT09PT09PT09PT09PSBUaGUgSU5GTyBFbGVtZW50ID09PT09PT09PT09PT09PT09PT09PS0tPg0KLTwhRUxFTUVOVCBpbmZvIChpdGVtKyk+DQotDQotPCFFTEVNRU5UIGl0ZW0gKCNQQ0RBVEEpPg0KLTwhQVRUTElTVCBpdGVtDQotICBjbGFzcwkgICAgICAgIE5NVE9LRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNSRVFVSVJFRCANCi0+DQotDQotPCEtLQ0KLUNvcHlyaWdodCBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuLCAxOTk4LDE5OTkuDQotICAgICAgICAgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuICANCi0tLT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9zbC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC9zbC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4NzMxMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvc2wuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotPCEtLQ0KLVNlcnZpY2UgTG9hZGluZyAoU0wpIERvY3VtZW50IFR5cGUgRGVmaW5pdGlvbi4NCi0NCi1Db3B5cmlnaHQgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiwgMTk5OCwxOTk5Lg0KLSAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgDQotDQotU0wgaXMgYW4gWE1MIGxhbmd1YWdlLiAgVHlwaWNhbCB1c2FnZToNCi0gICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICA8IURPQ1RZUEUgc2wgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFNMIDEuMC8vRU4iDQotICAgICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvc2wuZHRkIj4NCi0gICA8c2w+DQotICAgLi4uDQotICAgPC9zbD4NCi0NCi1UZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyANCi1BcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIHdlYiBzaXRlIGF0DQotaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZG9jcy9jb3B5cmlnaHQuaHRtLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgVVJJICJDREFUQSI+ICAgICAgICAgICAgICAgIDwhLS0gVVJJIGRlc2lnbmF0aW5nIGEgDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoeXBlcnRleHQgbm9kZSAgICAtLT4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09IFRoZSBTTCBFbGVtZW50ID09PT09PT09PT09PT09PT09PT09PS0tPg0KLTwhRUxFTUVOVCBzbCBFTVBUWT4NCi08IUFUVExJU1Qgc2wNCi0gIGhyZWYgICAgICAgICAgJVVSSTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNSRVFVSVJFRA0KLSAgYWN0aW9uICAgICAgICAoZXhlY3V0ZS1sb3d8ZXhlY3V0ZS1oaWdofGNhY2hlKSAgICAiZXhlY3V0ZS1sb3ciIA0KLT4NCi0NCi08IS0tDQotQ29weXJpZ2h0IFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4sIDE5OTgsMTk5OS4NCi0gICAgICAgICAgICAgICAgICAgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIA0KLS0tPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbC1kZXByZWNhdGVkLTEubW9kIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLWRlcHJlY2F0ZWQtMS5tb2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNGFkMmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLWRlcHJlY2F0ZWQtMS5tb2QKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotPCEtLSBXTUwgRGVwcmVjYXRlZCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbC1kZXByZWNhdGVkLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VMRU1FTlRTIFdNTCBEZXByZWNhdGVkIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAid21sLWRlcHJlY2F0ZWQtMS5tb2QiDQotDQotCVRoaXMgbW9kdWxlIGNvbnRhaW5zIGRlcHJlY2F0ZWQgZWxlbWVudHMgYW5kIGF0dHJpYnV0ZXMuDQotCQ0KLQkJQXR0cmlidXRlczogV01MIG1vZGUsIFhIVE1MIGFsaWduLCBYSFRNTCB2c3BhY2UsIFhIVE1MIGhzcGFjZQ0KLQkJDQotCQlFbGVtZW50czogdSwgYiwgYmlnLCBpLCBzbWFsbCANCi0JCQ0KLS0tPg0KLTwhLS0gDQotCXAgDQotCQ0KLQkqV01MIG1vZGUNCi0JKlhIVE1MIGFsaWduDQotCQ0KLQlSZXBsYWNlbWVudDogVXNlIENTUyBzdHlsZSBzaGVldHMgDQotLS0+DQotPCFBVFRMSVNUICVwLnFuYW1lOw0KLQklYXR0Lm1vZGUucW5hbWU7ICh3cmFwIHwgbm93cmFwKSAjSU1QTElFRA0KLQlhbGlnbiAobGVmdCB8IHJpZ2h0IHwgY2VudGVyKSAibGVmdCINCi0+DQotPCEtLSANCi0JdGFibGUgDQotCQ0KLQkqV01MIGFsaWduIA0KLQkNCi0JTm90ZTogVGhlIFdNTCBhbGlnbiBhdHRyaWJ1dGUgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBYSFRNTCBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lLg0KLS0tPg0KLTwhQVRUTElTVCAldGFibGUucW5hbWU7DQotCSVhdHQuYWxpZ24ucW5hbWU7IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCWltZyANCi0JDQotCSpYSFRNTCB2c3BhY2UsIGhzcGFjZSwgYWxpZ24NCi0JDQotCVJlcGxhY2VtZW50OiBVc2UgQ1NTIHN0eWxlIHNoZWV0cyANCi0tLT4NCi08IUFUVExJU1QgaW1nDQotCXZzcGFjZSBDREFUQSAiMCINCi0JaHNwYWNlIENEQVRBICIwIg0KLQlhbGlnbiAodG9wIHwgbWlkZGxlIHwgYm90dG9tKSAiYm90dG9tIg0KLT4NCi08IS0tIA0KLQlJbmxpbmUgUHJlc2VudGF0aW9uIA0KLQkNCi0JKlhIVE1MICBiLCBiaWcsIGksIHNtYWxsCQ0KLQkNCi0JUmVwbGFjZW1lbnQ6IFVzZSBDU1Mgc3R5bGUgc2hlZXRzIA0KLS0tPg0KLTwhRU5USVRZICUgc3ViLmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdWIuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1cC5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3VwLmF0dGxpc3QgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB0dC5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgdHQuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHhodG1sLWlubHByZXMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotCQkieGh0bWwtaW5scHJlcy0xLm1vZCI+DQotJXhodG1sLWlubHByZXMubW9kOw0KLTwhLS0gDQotCXUNCi0NCi0JVGhpcyBlbGVtZW50IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIFhIVE1MIGlubGluZSBwcmVzZW50YXRpb24gbW9kdWxlLg0KLQlJdCB3YXMgZGVwcmVjYXRlZCBhbHJlYWR5IGluIEhUTUwgNC4wLg0KLQkNCi0JUmVwbGFjZW1lbnQ6IFVzZSBDU1Mgc3R5bGUgc2hlZXRzIA0KLS0tPg0KLTwhRU5USVRZICUgdS5jb250ZW50ICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiPg0KLTwhRU5USVRZICUgdS5xbmFtZSAidSI+DQotPCFFTEVNRU5UICV1LnFuYW1lOyAldS5jb250ZW50Oz4NCi08IUFUVExJU1QgJXUucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0+DQotPCEtLSANCi0JbWV0YSANCi0JDQotCSpXTUwgZm9ydWEgYXR0cmlidXRlDQotLS0+DQotPCFBVFRMSVNUICVtZXRhLnFuYW1lOw0KLQklYXR0LmZvcnVhLnFuYW1lOyAlQm9vbGVhbi5kYXRhdHlwZTsgInRydWUiDQotPg0KLTwhLS0NCi0JaHRtbA0KLQkNCi0JKldNTCB1c2UteG1sLWZyYWdtZW50IGF0dHJpYnV0ZQ0KLS0tPg0KLTwhQVRUTElTVCAlaHRtbC5xbmFtZTsNCi0JJWF0dC51c2V4bWxmcmFnbWVudC5xbmFtZTsgCSVCb29sZWFuLmRhdGF0eXBlOyAidHJ1ZSINCi0+DQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLWZyYW1ld29yay0xLm1vZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbC1mcmFtZXdvcmstMS5tb2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwNjFhZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLWZyYW1ld29yay0xLm1vZAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLTwhLS0gV01MIE1vZHVsYXIgRnJhbWV3b3JrIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbC1mcmFtZXdvcmstMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIE1vZHVsYXIgRnJhbWV3b3JrIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZHRkL3dtbC1mcmFtZXdvcmstMS5tb2QiDQotICAgICAgIA0KLSAgICAgICBUaGlzIGlzIGFuIGV4dGVuc2lvbiBvZiB0aGUgWEhUTUwgTW9kdWxhciBGcmFtZXdvcmsgbW9kdWxlLiBJbiBhZGRpdGlvbiB0byB0aGUgDQotICAgICAgIHJlcXVpcmVkIFhIVE1MIGVudGl0aWVzIGl0IGluY2x1ZGVzOg0KLSAgICAgICANCi0gICAgICAgCQkqV01MIGRhdGF0eXBlcw0KLSAgICAgICAJCSpXTUwgbmFtZXNwYWNlIHF1YWxpZmllZCBuYW1lcw0KLSAgICAgICAJCSpXTUwgZG9jdW1lbnQgbW9kZWwgICAgICAgDQotLS0+DQotPCEtLSANCi0JWEhUTUwgbm90YXRpb25zDQotLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1ub3RhdGlvbnMubW9kIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTlMgWEhUTUwgTm90YXRpb25zIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ub3RhdGlvbnMtMS5tb2QiPg0KLSV4aHRtbC1ub3RhdGlvbnMubW9kOw0KLTwhLS0gDQotCVdNTCBkYXRhdHlwZXMNCi0tLT4NCi08IUVOVElUWSAlIEJvb2xlYW4uZGF0YXR5cGUgIih0cnVlfGZhbHNlKSI+DQotPCEtLSANCi0JWEhUTUwgZGF0YXR5cGVzDQotLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1kYXRhdHlwZXMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBEYXRhdHlwZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWRhdGF0eXBlcy0xLm1vZCI+DQotJXhodG1sLWRhdGF0eXBlcy5tb2Q7DQotPCEtLSANCi0JV01MIHF1YWxpZmllZCBuYW1lcw0KLS0tPg0KLTwhRU5USVRZICUgd21sLXFuYW1lLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgUXVhbGlmaWVkIE5hbWVzIDEuMC8vRU4iDQotICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLXFuYW1lLTEubW9kIj4NCi0ld21sLXFuYW1lLm1vZDsNCi08IS0tIA0KLQlYSFRNTCBxdWFsaWZpZWQgbmFtZXMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLXFuYW1lLm1vZCBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgUXVhbGlmaWVkIE5hbWVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1xbmFtZS0xLm1vZCI+DQotJXhodG1sLXFuYW1lLm1vZDsNCi08IS0tDQotCVhIVE1MIGdsb2JhbCBhdHRyaWJ1dGVzDQotLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1pbmxzdHlsZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBTdHlsZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5sc3R5bGUtMS5tb2QiPg0KLSV4aHRtbC1pbmxzdHlsZS5tb2Q7DQotPCFFTlRJVFkgJSBYSFRNTC5iaWRpICJJR05PUkUiPg0KLTwhRU5USVRZICUgeGh0bWwtYXR0cmlicy5tb2QgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENvbW1vbiBBdHRyaWJ1dGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1hdHRyaWJzLTEubW9kIj4NCi0leGh0bWwtYXR0cmlicy5tb2Q7DQotPCEtLSANCi0JWEhUTUwgY2hhcmFjdGVyIGVudGl0aWVzDQotLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1jaGFyZW50Lm1vZCBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgQ2hhcmFjdGVyIEVudGl0aWVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1jaGFyZW50LTEubW9kIj4NCi0leGh0bWwtY2hhcmVudC5tb2Q7DQotPCEtLSANCi0JV01MIGRvY3VtZW50IG1vZGVsDQotLS0+DQotPCFFTlRJVFkgJSB3bWwtbW9kZWwubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCAyLjAgRG9jdW1lbnQgTW9kZWwgMS4wLy9FTiINCi0gICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWwyMC1tb2RlbC0xLm1vZCI+DQotJXdtbC1tb2RlbC5tb2Q7DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLXFuYW1lLTEubW9kIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLXFuYW1lLTEubW9kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY1YTU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbC1xbmFtZS0xLm1vZAorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLTwhLS0gV01MIFF1YWxpZmllZCBOYW1lcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogd21sLXFuYW1lLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgIA0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLQlQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgUXVhbGlmaWVkIE5hbWVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAid21sLXFuYW1lLTEubW9kIg0KLQ0KLQlUaGlzIG1vZHVsZSBkZWNsYXJlcyBXTUwgbmFtZXMgd2l0aCB0aGUgV01MIG5hbWVzcGFjZSBwcmVmaXguCQ0KLQ0KLS0tPg0KLTwhLS0NCi0JVGhlIFdNTCBuYW1lc3BhY2UgbmFtZQ0KLS0tPg0KLTwhRU5USVRZICUgV01MLnhtbG5zICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy8yMDAxL3dtbCI+DQotPCEtLQ0KLQlXTUwgbmFtZXNwYWNlIHByZWZpeA0KLQkNCi0JT24gV01MIGVsZW1lbnRzIFdNTCBpcyBkZWNsYXJlZCBhcyB0aGUgZGVmYXVsdCBuYW1lc3BhY2UuIA0KLQlOYW1lc3BhY2UgcHJlZml4IGlzIHVzZWQgb25seSBmb3IgV01MIGF0dHJpYnV0ZXMgb24gWEhUTUwgZWxlbWVudHMuDQotLS0+DQotPCFFTlRJVFkgJSBXTUwucHJlZml4ICJ3bWwiPg0KLTwhLS0NCi0JUGFyYW1ldGVyIGVudGl0eSB3aXRoIHRoZSBXTUwgbmFtZXNwYWNlIHByZWZpeCBwbHVzIHRoZSAiOiIuIA0KLQlUaGUgYWN0dWFsIHByZWZpeCwgV01MLnByZWZpeCwgaXMgZGVjbGFyZWQgaW4gdGhlIFdNTCBEVEQgZHJpdmVyLiANCi0tLT4NCi08IUVOVElUWSAlIFdNTC5wZnggIiVXTUwucHJlZml4OzoiPg0KLTwhLS0NCi0JQXR0cmlidXRlIHVzZWQgdG8gZGVjbGFyZSB0aGUgV01MIG5hbWVzcGFjZSB3aXRoIHRoZSBXTUwgcHJlZml4Lg0KLS0tPg0KLTwhRU5USVRZICUgV01MLnhtbG5zLmV4dHJhLmF0dHJpYiAieG1sbnM6JVdNTC5wcmVmaXg7CSAlVVJJLmRhdGF0eXBlOyAJCSNGSVhFRCAJJyVXTUwueG1sbnM7JyI+DQotPCEtLQ0KLQlBbGwgV01MIHF1YWxpZmllZCBuYW1lcy4gDQotCQ0KLQlOb3RlIHRoYXQgZWxlbWVudCBuYW1lcyBhcmUgbm90IHByZWZpeGVkLiBPbmx5IGF0dHJpYnV0ZSBuYW1lcyBhcmUuDQotLS0+DQotPCFFTlRJVFkgJSBjYXJkLnFuYW1lICIlV01MLnBmeDtjYXJkIj4NCi08IUVOVElUWSAlIGRvLnFuYW1lICIlV01MLnBmeDtkbyI+DQotPCFFTlRJVFkgJSBhY2Nlc3MucW5hbWUgIiVXTUwucGZ4O2FjY2VzcyI+DQotPCFFTlRJVFkgJSBnby5xbmFtZSAiJVdNTC5wZng7Z28iPg0KLTwhRU5USVRZICUgcHJldi5xbmFtZSAiJVdNTC5wZng7cHJldiI+DQotPCFFTlRJVFkgJSByZWZyZXNoLnFuYW1lICIlV01MLnBmeDtyZWZyZXNoIj4NCi08IUVOVElUWSAlIG5vb3AucW5hbWUgIiVXTUwucGZ4O25vb3AiPg0KLTwhRU5USVRZICUgb25ldmVudC5xbmFtZSAiJVdNTC5wZng7b25ldmVudCI+DQotPCFFTlRJVFkgJSBwb3N0ZmllbGQucW5hbWUgIiVXTUwucGZ4O3Bvc3RmaWVsZCI+DQotPCFFTlRJVFkgJSBzZXR2YXIucW5hbWUgIiVXTUwucGZ4O3NldHZhciI+DQotPCFFTlRJVFkgJSBnZXR2YXIucW5hbWUgIiVXTUwucGZ4O2dldHZhciI+DQotPCFFTlRJVFkgJSB0aW1lci5xbmFtZSAiJVdNTC5wZng7dGltZXIiPg0KLTwhRU5USVRZICUgd2lkZ2V0LnFuYW1lICIlV01MLnBmeDt3aWRnZXQiPg0KLTwhRU5USVRZICUgYW5jaG9yLnFuYW1lICIlV01MLnBmeDthbmNob3IiPg0KLTwhRU5USVRZICUgYXR0LmZvcnVhLnFuYW1lICIlV01MLnBmeDtmb3J1YSI+DQotPCFFTlRJVFkgJSBhdHQudmFsdWUucW5hbWUgIiVXTUwucGZ4O3ZhbHVlIj4NCi08IUVOVElUWSAlIGF0dC5pbmFtZS5xbmFtZSAiJVdNTC5wZng7aW5hbWUiPg0KLTwhRU5USVRZICUgYXR0Lm5hbWUucW5hbWUgIiVXTUwucGZ4O25hbWUiPg0KLTwhRU5USVRZICUgYXR0Lml2YWx1ZS5xbmFtZSAiJVdNTC5wZng7aXZhbHVlIj4NCi08IUVOVElUWSAlIGF0dC5mb3JtYXQucW5hbWUgIiVXTUwucGZ4O2Zvcm1hdCI+DQotPCFFTlRJVFkgJSBhdHQuZW1wdHlvay5xbmFtZSAiJVdNTC5wZng7ZW1wdHlvayI+DQotPCFFTlRJVFkgJSBhdHQubG9jYWxzcmMucW5hbWUgIiVXTUwucGZ4O2xvY2Fsc3JjIj4NCi08IUVOVElUWSAlIGF0dC5jb2x1bW5zLnFuYW1lICIlV01MLnBmeDtjb2x1bW5zIj4NCi08IUVOVElUWSAlIGF0dC5hbGlnbi5xbmFtZSAiJVdNTC5wZng7YWxpZ24iPg0KLTwhRU5USVRZICUgYXR0Lm1vZGUucW5hbWUgIiVXTUwucGZ4O21vZGUiPg0KLTwhRU5USVRZICUgYXR0Lm9uZW50ZXJmb3J3YXJkLnFuYW1lICIlV01MLnBmeDtvbmVudGVyZm9yd2FyZCI+DQotPCFFTlRJVFkgJSBhdHQub25lbnRlcmJhY2t3YXJkLnFuYW1lICIlV01MLnBmeDtvbmVudGVyYmFja3dhcmQiPg0KLTwhRU5USVRZICUgYXR0Lm9udGltZXIucW5hbWUgIiVXTUwucGZ4O29udGltZXIiPg0KLTwhRU5USVRZICUgYXR0Lm9ucGljay5xbmFtZSAiJVdNTC5wZng7b25waWNrIj4NCi08IUVOVElUWSAlIGF0dC5uZXdjb250ZXh0LnFuYW1lICIlV01MLnBmeDtuZXdjb250ZXh0Ij4NCi08IUVOVElUWSAlIGF0dC51c2V4bWxmcmFnbWVudC5xbmFtZSAiJVdNTC5wZng7dXNlLXhtbC1mcmFnbWVudHMiPg0KLTwhRU5USVRZICUgYXR0LnR5cGUucW5hbWUgIiVXTUwucGZ4O3R5cGUiPg0KLTwhLS0NCi0JVGhlIHUgZWxlbWVudCBpcyBub3QgZGVjbGFyZWQgaW4gWEhUTUwsIGJlY2F1c2UgaXQgaGFzIGJlZWQgcmVtb3ZlZCBmcm9tIHRoZSBsYW5ndWFnZS4gDQotCVNvIGl0IG11c3QgYmUgZGVjbGFyZWQgaGVyZS4gSXQgaXMsIGhvd2V2ZXIsIGRlcHJlY2F0ZWQgaW4gV01MLiANCi0tLT4NCi08IUVOVElUWSAlIHUucW5hbWUgInUiPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbC1zcGVjaWFsLTEubW9kIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLXNwZWNpYWwtMS5tb2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ODU5MTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sLXNwZWNpYWwtMS5tb2QKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBAQAotPCEtLSBXTUwgMi4wIFNwZWNpYWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwtc3BlY2lhbC0xLm1vZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTEVNRU5UUyBXTUwgU3BlY2lhbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gIndtbC1zcGVjaWFsLTEubW9kIg0KLQ0KLQlUaGlzIG1vZHVsZSBjb250YWlucyBkZWNsYXJhdGlvbnMgb2YgdGhlIGZvbGxvd2luZyBXTUwgZWxlbWVudHMuIA0KLQkNCi0JCWNhcmQsIGRvLCBvbmV2ZW50LCBhY2Nlc3MsIGdvLCBwcmV2LA0KLQkJcmVmcmVzaCwgbm9vcCwgIHBvc3RmaWVsZCwgc2V0dmFyLCBnZXR2YXINCi0JCXRpbWVyLCBhbmNob3INCi0JCQ0KLQlJdCBhbHNvIGNvbnRhaW5zIFdNTCBleHRlbnNpb25zIG9mIFhIVE1MIGVsZW1lbnRzLiANCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCVdNTCBHbG9iYWwgYXR0cmlidXRlcw0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JV01MIEV2ZW50IGF0dHJpYnV0ZXMNCi0JDQotCVRoZXNlIGFyZSB1c2VkIG9uIHRoZSBYSFRNTCBib2R5IGFuZCBodG1sIGVsZW1lbnRzLg0KLQlUaGUgc2FtZSBhdHRyaWJ1dGVzIGFyZSBhbHNvIGF2YWlsYWJsZSBvbiB0aGUgV01MIGNhcmQgZWxlbWVudCwgYnV0DQotCXdpdGhvdXQgbmFtZXNwYWNlIHByZWZpeC4NCi0tLT4NCi08IUVOVElUWSAlIFdNTC5ldmVudC5hdHRyaWIgIiVhdHQub25lbnRlcmZvcndhcmQucW5hbWU7IENEQVRBCSNJTVBMSUVEDQotICVhdHQub25lbnRlcmJhY2t3YXJkLnFuYW1lOyBDREFUQQkjSU1QTElFRA0KLSAlYXR0Lm9udGltZXIucW5hbWU7IENEQVRBCSNJTVBMSUVEIj4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCVdNTCBFbGVtZW50cw0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JQ2FyZHMgDQotCQ0KLQlVc2Ugc2FtZSBjb250ZW50IG1vZGVsIGFzIHRoZSBIVE1MIGJvZHkgZWxlbWVudA0KLS0tPg0KLTwhRUxFTUVOVCAlY2FyZC5xbmFtZTsgJUNhcmRCb2R5Lm1peDs+DQotPCFBVFRMSVNUICVjYXJkLnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotCW5ld2NvbnRleHQgJUJvb2xlYW4uZGF0YXR5cGU7ICJmYWxzZSINCi0Jb25lbnRlcmZvcndhcmQgQ0RBVEEgI0lNUExJRUQNCi0Jb25lbnRlcmJhY2t3YXJkIENEQVRBICNJTVBMSUVEDQotCW9udGltZXIgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JRG8gDQotLS0+DQotPCFFTEVNRU5UICVkby5xbmFtZTsgKCVUYXNrcy5jbGFzczspPg0KLTwhQVRUTElTVCAlZG8ucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0gIAl0eXBlICAgICAgICAgICAgIENEQVRBICAgICAgICNSRVFVSVJFRA0KLSAgCWxhYmVsICAgICAgICAgICAgIENEQVRBICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCU9uZXZlbnQgDQotLS0+DQotPCFFTEVNRU5UICVvbmV2ZW50LnFuYW1lOyAlVGFza3MuY2xhc3M7Pg0KLTwhQVRUTElTVCAlb25ldmVudC5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JdHlwZSBDREFUQSAjUkVRVUlSRUQNCi0+DQotPCEtLSANCi0JQWNjZXNzIA0KLS0tPg0KLTwhRUxFTUVOVCAlYWNjZXNzLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJWFjY2Vzcy5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JZG9tYWluIENEQVRBICNJTVBMSUVEDQotCXBhdGggQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JR28gDQotLS0+DQotPCFFTlRJVFkgJSBjYWNoZS1jb250cm9sICcobm8tY2FjaGUpJz4NCi08IUVMRU1FTlQgJWdvLnFuYW1lOyAoJXBvc3RmaWVsZC5xbmFtZTsgfCAlc2V0dmFyLnFuYW1lOykqPg0KLTwhQVRUTElTVCAlZ28ucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCWhyZWYgJVVSSS5kYXRhdHlwZTsgI1JFUVVJUkVEDQotCXNlbmRyZWZlcmVyICVCb29sZWFuLmRhdGF0eXBlOyAiZmFsc2UiDQotCXR5cGUgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAjSU1QTElFRA0KLQltZXRob2QgKHBvc3QgfCBnZXQpICJnZXQiDQotCWVuY3R5cGUgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIg0KLQlhY2NlcHQtY2hhcnNldCBDREFUQSAjSU1QTElFRA0KLQljYWNoZS1jb250cm9sICVjYWNoZS1jb250cm9sOyAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlQcmV2IA0KLS0tPg0KLTwhRUxFTUVOVCAlcHJldi5xbmFtZTsgKCVzZXR2YXIucW5hbWU7KSo+DQotPCFBVFRMSVNUICVwcmV2LnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLT4NCi08IS0tIA0KLQlSZWZyZXNoIA0KLS0tPg0KLTwhRUxFTUVOVCAlcmVmcmVzaC5xbmFtZTsgKCVzZXR2YXIucW5hbWU7KSo+DQotPCFBVFRMSVNUICVyZWZyZXNoLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLT4NCi08IS0tIA0KLQlOb29wIA0KLS0tPg0KLTwhRUxFTUVOVCAlbm9vcC5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVub29wLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLT4NCi08IS0tIA0KLQlQb3N0ZmllbGQgDQotLS0+DQotPCFFTEVNRU5UICVwb3N0ZmllbGQucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlcG9zdGZpZWxkLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQluYW1lIENEQVRBICNSRVFVSVJFRA0KLQl2YWx1ZSBDREFUQSAjUkVRVUlSRUQNCi0+DQotPCEtLSANCi0JU2V0dmFyIA0KLS0tPg0KLTwhRUxFTUVOVCAlc2V0dmFyLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJXNldHZhci5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JbmFtZSBDREFUQSAjUkVRVUlSRUQNCi0JdmFsdWUgQ0RBVEEgI1JFUVVJUkVEDQotPg0KLTwhLS0gDQotCUdldHZhcg0KLS0tPg0KLTwhRUxFTUVOVCAlZ2V0dmFyLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJWdldHZhci5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JbmFtZSBDREFUQSAjUkVRVUlSRUQNCi0JY29udmVyc2lvbiAoZXNjYXBlIHwgbm9lc2MgfCB1bmVzYykgIm5vZXNjIg0KLT4NCi08IS0tIA0KLQlUaW1lciAgDQotLS0+DQotPCFFTEVNRU5UICV0aW1lci5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICV0aW1lci5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JbmFtZSBOTVRPS0VOICNJTVBMSUVEDQotCXZhbHVlIENEQVRBICNSRVFVSVJFRA0KLT4NCi08IS0tIA0KLQlBbmNob3IgDQotCQ0KLQlTYW1lIGNvbnRlbnQgbW9kZWwgYXMgSFRNTCBhIGVsZW1lbnQsIGJ1dCBleHRlbmRlZCB3aXRoIFdNTCB0YXNrcy4NCi0tLT4NCi08IUVMRU1FTlQgJWFuY2hvci5xbmFtZTsgKCNQQ0RBVEEgfCAlSW5sTm9BbmNob3IubWl4OyB8ICVUYXNrcy1ub25vb3AuY2xhc3M7KSo+DQotPCFBVFRMSVNUICVhbmNob3IucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0JYWNjZXNza2V5IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JV01MIGV4dGVuc2lvbnMgb2YgWEhUTUwgZWxlbWVudHMNCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCXNlbGVjdCANCi0JDQotCSpXTUwgaW5hbWUsIGl2YWx1ZSwgdmFsdWUsIGFuZCBuYW1lIGF0dHJpYnV0ZXMNCi0JKlhIVE1MIHRhYmluZGV4IChub3QgaW4gQmFzaWMgRm9ybXMgbW9kdWxlKQ0KLS0tPg0KLTwhQVRUTElTVCAlc2VsZWN0LnFuYW1lOw0KLQklYXR0LmluYW1lLnFuYW1lOyBOTVRPS0VOICNJTVBMSUVEDQotCSVhdHQudmFsdWUucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQuaXZhbHVlLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLQklYXR0Lm5hbWUucW5hbWU7IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCWlucHV0IA0KLQkNCi0JKldNTCBmb3JtYXQsIGVtcHR5b2ssIGFuZCBuYW1lIGF0dHJpYnV0ZXMNCi0JKlhIVE1MIHRhYmluZGV4IChub3QgaW4gQmFzaWMgRm9ybXMgbW9kdWxlKQ0KLS0tPg0KLTwhQVRUTElTVCAlaW5wdXQucW5hbWU7DQotCSVhdHQuZm9ybWF0LnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLQklYXR0LmVtcHR5b2sucW5hbWU7ICVCb29sZWFuLmRhdGF0eXBlOyAjSU1QTElFRA0KLQklYXR0Lm5hbWUucW5hbWU7IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCXRleHRhcmVhDQotCQ0KLQkqV01MIGZvcm1hdCwgZW1wdHlvaywgYW5kIG5hbWUgYXR0cmlidXRlcw0KLQkqWEhUTUwgdGFiaW5kZXggYXR0cmlidXRlIChub3QgaW4gQmFzaWMgRm9ybXMgbW9kdWxlKQ0KLS0tPg0KLTwhQVRUTElTVCAldGV4dGFyZWEucW5hbWU7DQotCSVhdHQuZm9ybWF0LnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLQklYXR0LmVtcHR5b2sucW5hbWU7ICVCb29sZWFuLmRhdGF0eXBlOyAjSU1QTElFRA0KLQklYXR0Lm5hbWUucW5hbWU7IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCW9wdGlvbg0KLQkNCi0JKldNTCBvbnBpY2sgYXR0cmlidXRlDQotLS0+DQotPCFBVFRMSVNUICVvcHRpb24ucW5hbWU7DQotCSVhdHQub25waWNrLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlpbWcgDQotDQotCSpXTUwgbG9jYWxzcmMgYXR0cmlidXRlDQotLS0+DQotPCFBVFRMSVNUIGltZw0KLQklYXR0LmxvY2Fsc3JjLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLQklYXR0LnR5cGUucW5hbWU7ICVDb250ZW50VHlwZS5kYXRhdHlwZTsgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JdGFibGUgDQotCQ0KLQkqV01MIGNvbHVtbnMgYXR0cmlidXRlDQotCQ0KLS0tPg0KLTwhQVRUTElTVCAldGFibGUucW5hbWU7DQotCSVhdHQuY29sdW1ucy5xbmFtZTsgJU51bWJlci5kYXRhdHlwZTsgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JYm9keSANCi0JDQotCSpXTUwgbmV3Y29udGV4dCANCi0JKldNTCBldmVudCBhdHRyaWJ1dGVzDQotLS0+DQotPCFBVFRMSVNUICVib2R5LnFuYW1lOw0KLQklYXR0Lm5ld2NvbnRleHQucW5hbWU7ICVCb29sZWFuLmRhdGF0eXBlOyAiZmFsc2UiDQotCSVXTUwuZXZlbnQuYXR0cmliOyANCi0+DQotPCEtLSANCi0JaHRtbCANCi0JDQotCSpEZWNsYXJhdGlvbiBvZiBXTUwgbmFtZXNwYWNlIHdpdGggcHJlZml4CQ0KLQkqV01MIGV2ZW50IGF0dHJpYnV0ZXMNCi0tLT4NCi08IUFUVExJU1QgJWh0bWwucW5hbWU7DQotCSVXTUwueG1sbnMuZXh0cmEuYXR0cmliOyANCi0JJVdNTC5ldmVudC5hdHRyaWI7IA0KLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwyMC1mbGF0LmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbDIwLWZsYXQuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDU3MGE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbDIwLWZsYXQuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzYwOSArMCwwIEBACi08IS0tIFdNTCAyLjAgRFREICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwyMC5kdGQgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0JVGhpcyBpcyB0aGUgV01MIDIuMCBEVEQgZHJpdmVyIGZpbGUuIFBsZWFzZSB1c2UgdGhpcyBmb3JtYWwgcHVibGljIGlkZW50aWZpZXIgdG8gaWRlbnRpZnkgaXQ6DQotDQotICAgICAgICAgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDIuMC8vRU4iDQotICAgICAgICAgICAgICAgICAgIAkgICAgICAgICAgDQotICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBXTUwgMi4wIGRpcmVjdGx5LCB1c2UNCi0gICAgIHRoZSBGUEkgaW4gdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24sIHdpdGggdGhlIHhtbG5zIGF0dHJpYnV0ZQ0KLSAgICAgb24gdGhlIGRvY3VtZW50IGVsZW1lbnQgdG8gaWRlbnRpZnkgdGhlIGRlZmF1bHQgbmFtZXNwYWNlOg0KLQ0KLSAgICAgICAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgICAgICAgIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2R0ZC93bWwyMC5kdGQiID4NCi0gICAgICAgICA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCINCi0gICAgICAgICAgICAgICAgICAgeG1sbnM6d21sPSJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy8yMDAxL3dtbCI+DQotICAgICAgICAgLi4uDQotICAgICAgICAgPC9odG1sPg0KLQ0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJVmVyc2lvbiwgWE1MIE5hbWVzcGFjZXMsIGFuZCBwcm9maWxlIGluZm9ybWF0aW9uIA0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQlWYWx1ZSBvZiBYSFRNTCB2ZXJzaW9uIGF0dHJpYnV0ZSANCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnZlcnNpb24gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDIuMC8vRU4iPg0KLTwhLS0gDQotCVZhbHVlIG9mIFhIVE1MIHByb2ZpbGUgYXR0cmlidXRlDQotCQ0KLQlSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSB3aXRoIGRvY3VtZW50IHByb2ZpbGVzIA0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwucHJvZmlsZSAiIj4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JCU1vZHVsYXJpc2F0aW9uIGZyYW1ld29yayBzZXR1cA0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCFFTlRJVFkgJSB3bWwtZnJhbWV3b3JrLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgTW9kdWxhciBGcmFtZXdvcmsgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbC1mcmFtZXdvcmstMS5tb2QiPg0KLTwhLS0gV01MIE1vZHVsYXIgRnJhbWV3b3JrIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbC1mcmFtZXdvcmstMS5tb2QgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIE1vZHVsYXIgRnJhbWV3b3JrIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZHRkL3dtbC1mcmFtZXdvcmstMS5tb2QiDQotICAgICAgIA0KLSAgICAgICBUaGlzIGlzIGFuIGV4dGVuc2lvbiBvZiB0aGUgWEhUTUwgTW9kdWxhciBGcmFtZXdvcmsgbW9kdWxlLiBJbiBhZGRpdGlvbiB0byB0aGUgDQotICAgICAgIHJlcXVpcmVkIFhIVE1MIGVudGl0aWVzIGl0IGluY2x1ZGVzOg0KLSAgICAgICANCi0gICAgICAgCQkqV01MIGRhdGF0eXBlcw0KLSAgICAgICAJCSpXTUwgbmFtZXNwYWNlIHF1YWxpZmllZCBuYW1lcw0KLSAgICAgICAJCSpXTUwgZG9jdW1lbnQgbW9kZWwgICAgICAgDQotLS0+DQotPCEtLSANCi0JWEhUTUwgbm90YXRpb25zDQotLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1ub3RhdGlvbnMubW9kIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTlMgWEhUTUwgTm90YXRpb25zIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ub3RhdGlvbnMtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIE5vdGF0aW9ucyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1ub3RhdGlvbnMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJA0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT05TIFhIVE1MIE5vdGF0aW9ucyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ub3RhdGlvbnMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTm90YXRpb25zDQotDQotICAgICBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgbm90YXRpb25zLCBtYW55IG9mIHRoZXNlIGltcG9ydGVkIGZyb20NCi0gICAgIG90aGVyIHNwZWNpZmljYXRpb25zIGFuZCBzdGFuZGFyZHMuIFdoZW4gYW4gZXhpc3RpbmcgRlBJIGlzDQotICAgICBrbm93biwgaXQgaXMgaW5jb3Jwb3JhdGVkIGhlcmUuDQotLS0+DQotDQotPCEtLSBYTUwgTm90YXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBTR01MIGFuZCBYTUwgTm90YXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBXM0MgWE1MIDEuMCBSZWNvbW1lbmRhdGlvbiAtLT4NCi08IU5PVEFUSU9OIHczYy14bWwNCi0gICAgIFBVQkxJQyAiSVNPIDg4NzkvL05PVEFUSU9OIEV4dGVuc2libGUgTWFya3VwIExhbmd1YWdlIChYTUwpIDEuMC8vRU4iID4NCi0NCi08IS0tIFhNTCAxLjAgQ0RBVEEgLS0+DQotPCFOT1RBVElPTiBjZGF0YQ0KLSAgICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhNTCAxLjA6IENEQVRBLy9FTiIgPg0KLQ0KLTwhLS0gU0dNTCBGb3JtYWwgUHVibGljIElkZW50aWZpZXJzIC0tPg0KLTwhTk9UQVRJT04gZnBpDQotICAgICBQVUJMSUMgIklTTyA4ODc5OjE5ODYvL05PVEFUSU9OIEZvcm1hbCBQdWJsaWMgSWRlbnRpZmllci8vRU4iID4NCi0NCi08IS0tIFhIVE1MIE5vdGF0aW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIExlbmd0aCBkZWZpbmVkIGZvciBjZWxscGFkZGluZy9jZWxsc3BhY2luZyAtLT4NCi0NCi08IS0tIG5uIGZvciBwaXhlbHMgb3Igbm4lIGZvciBwZXJjZW50YWdlIGxlbmd0aCAtLT4NCi08IU5PVEFUSU9OIGxlbmd0aA0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IExlbmd0aC8vRU4iID4NCi0NCi08IS0tIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGxpbmsgdHlwZXMgLS0+DQotPCFOT1RBVElPTiBsaW5rVHlwZXMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBMaW5rVHlwZXMvL0VOIiA+DQotDQotPCEtLSBzaW5nbGUgb3IgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgZGVzY3JpcHRvcnMgLS0+DQotPCFOT1RBVElPTiBtZWRpYURlc2MNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBNZWRpYURlc2MvL0VOIiA+DQotDQotPCEtLSBwaXhlbCwgcGVyY2VudGFnZSwgb3IgcmVsYXRpdmUgLS0+DQotPCFOT1RBVElPTiBtdWx0aUxlbmd0aA0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IE11bHRpTGVuZ3RoLy9FTiIgPg0KLQ0KLTwhLS0gb25lIG9yIG1vcmUgZGlnaXRzIChOVU1CRVIpIC0tPg0KLTwhTk9UQVRJT04gbnVtYmVyDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTnVtYmVyLy9FTiIgPg0KLQ0KLTwhLS0gaW50ZWdlciByZXByZXNlbnRpbmcgbGVuZ3RoIGluIHBpeGVscyAtLT4NCi08IU5PVEFUSU9OIHBpeGVscw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFBpeGVscy8vRU4iID4NCi0NCi08IS0tIHNjcmlwdCBleHByZXNzaW9uIC0tPg0KLTwhTk9UQVRJT04gc2NyaXB0DQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogU2NyaXB0Ly9FTiIgPg0KLQ0KLTwhLS0gdGV4dHVhbCBjb250ZW50IC0tPg0KLTwhTk9UQVRJT04gdGV4dA0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFRleHQvL0VOIiA+DQotDQotPCEtLSBJbXBvcnRlZCBOb3RhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSBbSVNPMTA2NDZdIC0tPg0KLTwhTk9UQVRJT04gY2hhcmFjdGVyDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogQ2hhcmFjdGVyLy9FTiIgPg0KLQ0KLTwhLS0gYSBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFOT1RBVElPTiBjaGFyc2V0DQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogQ2hhcnNldC8vRU4iID4NCi0NCi08IS0tIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcmFjdGVyIGVuY29kaW5ncywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IU5PVEFUSU9OIGNoYXJzZXRzDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogQ2hhcnNldHMvL0VOIiA+DQotDQotPCEtLSBtZWRpYSB0eXBlLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhTk9UQVRJT04gY29udGVudFR5cGUNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDb250ZW50VHlwZS8vRU4iID4NCi0NCi08IS0tIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIHR5cGVzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhTk9UQVRJT04gY29udGVudFR5cGVzDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogQ29udGVudFR5cGVzLy9FTiIgPg0KLQ0KLTwhLS0gZGF0ZSBhbmQgdGltZSBpbmZvcm1hdGlvbi4gSVNPIGRhdGUgZm9ybWF0IC0tPg0KLTwhTk9UQVRJT04gZGF0ZXRpbWUNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBEYXRldGltZS8vRU4iID4NCi0NCi08IS0tIGEgbGFuZ3VhZ2UgY29kZSwgYXMgcGVyIFtSRkMzMDY2XSAtLT4NCi08IU5PVEFUSU9OIGxhbmd1YWdlQ29kZQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IExhbmd1YWdlQ29kZS8vRU4iID4NCi0NCi08IS0tIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBzZWUgW1VSSV0gLS0+DQotPCFOT1RBVElPTiB1cmkNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBVUkkvL0VOIiA+DQotDQotPCEtLSBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcnMsIHNlZSBbVVJJXSAtLT4NCi08IU5PVEFUSU9OIHVyaXMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBVUklzLy9FTiIgPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLW5vdGF0aW9ucy0xLm1vZCAtLT4NCi0NCi08IS0tIA0KLQlXTUwgZGF0YXR5cGVzDQotLS0+DQotPCFFTlRJVFkgJSBCb29sZWFuLmRhdGF0eXBlICIodHJ1ZXxmYWxzZSkiPg0KLTwhLS0gDQotCVhIVE1MIGRhdGF0eXBlcw0KLS0tPg0KLTwhRU5USVRZICUgeGh0bWwtZGF0YXR5cGVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgRGF0YXR5cGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1kYXRhdHlwZXMtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIERhdGF0eXBlcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1kYXRhdHlwZXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIERhdGF0eXBlcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1kYXRhdHlwZXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gRGF0YXR5cGVzDQotDQotICAgICBkZWZpbmVzIGNvbnRhaW5lcnMgZm9yIHRoZSBmb2xsb3dpbmcgZGF0YXR5cGVzLCBtYW55IG9mDQotICAgICB0aGVzZSBpbXBvcnRlZCBmcm9tIG90aGVyIHNwZWNpZmljYXRpb25zIGFuZCBzdGFuZGFyZHMuDQotLS0+DQotDQotPCEtLSBMZW5ndGggZGVmaW5lZCBmb3IgY2VsbHBhZGRpbmcvY2VsbHNwYWNpbmcgLS0+DQotDQotPCEtLSBubiBmb3IgcGl4ZWxzIG9yIG5uJSBmb3IgcGVyY2VudGFnZSBsZW5ndGggLS0+DQotPCFFTlRJVFkgJSBMZW5ndGguZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBsaW5rIHR5cGVzIC0tPg0KLTwhRU5USVRZICUgTGlua1R5cGVzLmRhdGF0eXBlICJOTVRPS0VOUyIgPg0KLQ0KLTwhLS0gc2luZ2xlIG9yIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIGRlc2NyaXB0b3JzIC0tPg0KLTwhRU5USVRZICUgTWVkaWFEZXNjLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gcGl4ZWwsIHBlcmNlbnRhZ2UsIG9yIHJlbGF0aXZlIC0tPg0KLTwhRU5USVRZICUgTXVsdGlMZW5ndGguZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBvbmUgb3IgbW9yZSBkaWdpdHMgKE5VTUJFUikgLS0+DQotPCFFTlRJVFkgJSBOdW1iZXIuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBpbnRlZ2VyIHJlcHJlc2VudGluZyBsZW5ndGggaW4gcGl4ZWxzIC0tPg0KLTwhRU5USVRZICUgUGl4ZWxzLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gc2NyaXB0IGV4cHJlc3Npb24gLS0+DQotPCFFTlRJVFkgJSBTY3JpcHQuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSB0ZXh0dWFsIGNvbnRlbnQgLS0+DQotPCFFTlRJVFkgJSBUZXh0LmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gSW1wb3J0ZWQgRGF0YXR5cGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gW0lTTzEwNjQ2XSAtLT4NCi08IUVOVElUWSAlIENoYXJhY3Rlci5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGEgY2hhcmFjdGVyIGVuY29kaW5nLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhRU5USVRZICUgQ2hhcnNldC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcmFjdGVyIGVuY29kaW5ncywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IUVOVElUWSAlIENoYXJzZXRzLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gQ29sb3Igc3BlY2lmaWNhdGlvbiB1c2luZyBjb2xvciBuYW1lIG9yIHNSR0IgKCNSUkdHQkIpIHZhbHVlcyAtLT4NCi08IUVOVElUWSAlIENvbG9yLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gbWVkaWEgdHlwZSwgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IUVOVElUWSAlIENvbnRlbnRUeXBlLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgdHlwZXMsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFFTlRJVFkgJSBDb250ZW50VHlwZXMuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBkYXRlIGFuZCB0aW1lIGluZm9ybWF0aW9uLiBJU08gZGF0ZSBmb3JtYXQgLS0+DQotPCFFTlRJVFkgJSBEYXRldGltZS5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGZvcm1hbCBwdWJsaWMgaWRlbnRpZmllciwgYXMgcGVyIFtJU084ODc5XSAtLT4NCi08IUVOVElUWSAlIEZQSS5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGEgbGFuZ3VhZ2UgY29kZSwgYXMgcGVyIFtSRkMzMDY2XSAtLT4NCi08IUVOVElUWSAlIExhbmd1YWdlQ29kZS5kYXRhdHlwZSAiTk1UT0tFTiIgPg0KLQ0KLTwhLS0gYSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIHNlZSBbVVJJXSAtLT4NCi08IUVOVElUWSAlIFVSSS5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVycywgc2VlIFtVUkldIC0tPg0KLTwhRU5USVRZICUgVVJJcy5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1kYXRhdHlwZXMtMS5tb2QgLS0+DQotDQotPCEtLSANCi0JV01MIHF1YWxpZmllZCBuYW1lcw0KLS0tPg0KLTwhRU5USVRZICUgd21sLXFuYW1lLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgUXVhbGlmaWVkIE5hbWVzIDEuMC8vRU4iDQotICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLXFuYW1lLTEubW9kIj4NCi08IS0tIFdNTCBRdWFsaWZpZWQgTmFtZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbC1xbmFtZS0xLm1vZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLSAgICANCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0JUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIFF1YWxpZmllZCBOYW1lcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gIndtbC1xbmFtZS0xLm1vZCINCi0NCi0JVGhpcyBtb2R1bGUgZGVjbGFyZXMgV01MIG5hbWVzIHdpdGggdGhlIFdNTCBuYW1lc3BhY2UgcHJlZml4LgkNCi0NCi0tLT4NCi08IS0tDQotCVRoZSBXTUwgbmFtZXNwYWNlIG5hbWUNCi0tLT4NCi08IUVOVElUWSAlIFdNTC54bWxucyAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvMjAwMS93bWwiPg0KLTwhLS0NCi0JV01MIG5hbWVzcGFjZSBwcmVmaXgNCi0JDQotCU9uIFdNTCBlbGVtZW50cyBXTUwgaXMgZGVjbGFyZWQgYXMgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLiANCi0JTmFtZXNwYWNlIHByZWZpeCBpcyB1c2VkIG9ubHkgZm9yIFdNTCBhdHRyaWJ1dGVzIG9uIFhIVE1MIGVsZW1lbnRzLg0KLS0tPg0KLTwhRU5USVRZICUgV01MLnByZWZpeCAid21sIj4NCi08IS0tDQotCVBhcmFtZXRlciBlbnRpdHkgd2l0aCB0aGUgV01MIG5hbWVzcGFjZSBwcmVmaXggcGx1cyB0aGUgIjoiLiANCi0JVGhlIGFjdHVhbCBwcmVmaXgsIFdNTC5wcmVmaXgsIGlzIGRlY2xhcmVkIGluIHRoZSBXTUwgRFREIGRyaXZlci4gDQotLS0+DQotPCFFTlRJVFkgJSBXTUwucGZ4ICIlV01MLnByZWZpeDs6Ij4NCi08IS0tDQotCUF0dHJpYnV0ZSB1c2VkIHRvIGRlY2xhcmUgdGhlIFdNTCBuYW1lc3BhY2Ugd2l0aCB0aGUgV01MIHByZWZpeC4NCi0tLT4NCi08IUVOVElUWSAlIFdNTC54bWxucy5leHRyYS5hdHRyaWIgInhtbG5zOiVXTUwucHJlZml4OwkgJVVSSS5kYXRhdHlwZTsgCQkjRklYRUQgCSclV01MLnhtbG5zOyciPg0KLTwhLS0NCi0JQWxsIFdNTCBxdWFsaWZpZWQgbmFtZXMuIA0KLQkNCi0JTm90ZSB0aGF0IGVsZW1lbnQgbmFtZXMgYXJlIG5vdCBwcmVmaXhlZC4gT25seSBhdHRyaWJ1dGUgbmFtZXMgYXJlLg0KLS0tPg0KLTwhRU5USVRZICUgY2FyZC5xbmFtZSAiJVdNTC5wZng7Y2FyZCI+DQotPCFFTlRJVFkgJSBkby5xbmFtZSAiJVdNTC5wZng7ZG8iPg0KLTwhRU5USVRZICUgYWNjZXNzLnFuYW1lICIlV01MLnBmeDthY2Nlc3MiPg0KLTwhRU5USVRZICUgZ28ucW5hbWUgIiVXTUwucGZ4O2dvIj4NCi08IUVOVElUWSAlIHByZXYucW5hbWUgIiVXTUwucGZ4O3ByZXYiPg0KLTwhRU5USVRZICUgcmVmcmVzaC5xbmFtZSAiJVdNTC5wZng7cmVmcmVzaCI+DQotPCFFTlRJVFkgJSBub29wLnFuYW1lICIlV01MLnBmeDtub29wIj4NCi08IUVOVElUWSAlIG9uZXZlbnQucW5hbWUgIiVXTUwucGZ4O29uZXZlbnQiPg0KLTwhRU5USVRZICUgcG9zdGZpZWxkLnFuYW1lICIlV01MLnBmeDtwb3N0ZmllbGQiPg0KLTwhRU5USVRZICUgc2V0dmFyLnFuYW1lICIlV01MLnBmeDtzZXR2YXIiPg0KLTwhRU5USVRZICUgZ2V0dmFyLnFuYW1lICIlV01MLnBmeDtnZXR2YXIiPg0KLTwhRU5USVRZICUgdGltZXIucW5hbWUgIiVXTUwucGZ4O3RpbWVyIj4NCi08IUVOVElUWSAlIHdpZGdldC5xbmFtZSAiJVdNTC5wZng7d2lkZ2V0Ij4NCi08IUVOVElUWSAlIGFuY2hvci5xbmFtZSAiJVdNTC5wZng7YW5jaG9yIj4NCi08IUVOVElUWSAlIGF0dC5mb3J1YS5xbmFtZSAiJVdNTC5wZng7Zm9ydWEiPg0KLTwhRU5USVRZICUgYXR0LnZhbHVlLnFuYW1lICIlV01MLnBmeDt2YWx1ZSI+DQotPCFFTlRJVFkgJSBhdHQuaW5hbWUucW5hbWUgIiVXTUwucGZ4O2luYW1lIj4NCi08IUVOVElUWSAlIGF0dC5uYW1lLnFuYW1lICIlV01MLnBmeDtuYW1lIj4NCi08IUVOVElUWSAlIGF0dC5pdmFsdWUucW5hbWUgIiVXTUwucGZ4O2l2YWx1ZSI+DQotPCFFTlRJVFkgJSBhdHQuZm9ybWF0LnFuYW1lICIlV01MLnBmeDtmb3JtYXQiPg0KLTwhRU5USVRZICUgYXR0LmVtcHR5b2sucW5hbWUgIiVXTUwucGZ4O2VtcHR5b2siPg0KLTwhRU5USVRZICUgYXR0LmxvY2Fsc3JjLnFuYW1lICIlV01MLnBmeDtsb2NhbHNyYyI+DQotPCFFTlRJVFkgJSBhdHQuY29sdW1ucy5xbmFtZSAiJVdNTC5wZng7Y29sdW1ucyI+DQotPCFFTlRJVFkgJSBhdHQuYWxpZ24ucW5hbWUgIiVXTUwucGZ4O2FsaWduIj4NCi08IUVOVElUWSAlIGF0dC5tb2RlLnFuYW1lICIlV01MLnBmeDttb2RlIj4NCi08IUVOVElUWSAlIGF0dC5vbmVudGVyZm9yd2FyZC5xbmFtZSAiJVdNTC5wZng7b25lbnRlcmZvcndhcmQiPg0KLTwhRU5USVRZICUgYXR0Lm9uZW50ZXJiYWNrd2FyZC5xbmFtZSAiJVdNTC5wZng7b25lbnRlcmJhY2t3YXJkIj4NCi08IUVOVElUWSAlIGF0dC5vbnRpbWVyLnFuYW1lICIlV01MLnBmeDtvbnRpbWVyIj4NCi08IUVOVElUWSAlIGF0dC5vbnBpY2sucW5hbWUgIiVXTUwucGZ4O29ucGljayI+DQotPCFFTlRJVFkgJSBhdHQubmV3Y29udGV4dC5xbmFtZSAiJVdNTC5wZng7bmV3Y29udGV4dCI+DQotPCFFTlRJVFkgJSBhdHQudXNleG1sZnJhZ21lbnQucW5hbWUgIiVXTUwucGZ4O3VzZS14bWwtZnJhZ21lbnRzIj4NCi08IUVOVElUWSAlIGF0dC50eXBlLnFuYW1lICIlV01MLnBmeDt0eXBlIj4NCi08IS0tDQotCVRoZSB1IGVsZW1lbnQgaXMgbm90IGRlY2xhcmVkIGluIFhIVE1MLCBiZWNhdXNlIGl0IGhhcyBiZWVkIHJlbW92ZWQgZnJvbSB0aGUgbGFuZ3VhZ2UuIA0KLQlTbyBpdCBtdXN0IGJlIGRlY2xhcmVkIGhlcmUuIEl0IGlzLCBob3dldmVyLCBkZXByZWNhdGVkIGluIFdNTC4gDQotLS0+DQotPCFFTlRJVFkgJSB1LnFuYW1lICJ1Ij4NCi0NCi08IS0tIA0KLQlYSFRNTCBxdWFsaWZpZWQgbmFtZXMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLXFuYW1lLm1vZCBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgUXVhbGlmaWVkIE5hbWVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1xbmFtZS0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIFFuYW1lIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtcW5hbWUtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIFF1YWxpZmllZCBOYW1lcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1xbmFtZS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0jMjAwMC0xMC0yMjogYWRkZWQgcW5hbWUgZGVjbGFyYXRpb25zIGZvciBydWJ5IGVsZW1lbnRzDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFhIVE1MIFFuYW1lIChRdWFsaWZpZWQgTmFtZSkgTW9kdWxlDQotDQotICAgICBUaGlzIG1vZHVsZSBpcyBjb250YWluZWQgaW4gdHdvIHBhcnRzLCBsYWJlbGVkIFNlY3Rpb24gJ0EnIGFuZCAnQic6DQotDQotICAgICAgIFNlY3Rpb24gQSBkZWNsYXJlcyBwYXJhbWV0ZXIgZW50aXRpZXMgdG8gc3VwcG9ydCBuYW1lc3BhY2UtDQotICAgICAgIHF1YWxpZmllZCBuYW1lcywgbmFtZXNwYWNlIGRlY2xhcmF0aW9ucywgYW5kIG5hbWUgcHJlZml4aW5nDQotICAgICAgIGZvciBYSFRNTCBhbmQgZXh0ZW5zaW9ucy4NCi0NCi0gICAgICAgU2VjdGlvbiBCIGRlY2xhcmVzIHBhcmFtZXRlciBlbnRpdGllcyB1c2VkIHRvIHByb3ZpZGUNCi0gICAgICAgbmFtZXNwYWNlLXF1YWxpZmllZCBuYW1lcyBmb3IgYWxsIFhIVE1MIGVsZW1lbnQgdHlwZXM6DQotDQotICAgICAgICAgJWFwcGxldC5xbmFtZTsgICB0aGUgeG1sbnMtcXVhbGlmaWVkIG5hbWUgZm9yIDxhcHBsZXQ+DQotICAgICAgICAgJWJhc2UucW5hbWU7ICAgICB0aGUgeG1sbnMtcXVhbGlmaWVkIG5hbWUgZm9yIDxiYXNlPg0KLSAgICAgICAgIC4uLg0KLQ0KLSAgICAgWEhUTUwgZXh0ZW5zaW9ucyB3b3VsZCBjcmVhdGUgYSBtb2R1bGUgc2ltaWxhciB0byB0aGlzIG9uZS4NCi0gICAgIEluY2x1ZGVkIGluIHRoZSBYSFRNTCBkaXN0cmlidXRpb24gaXMgYSB0ZW1wbGF0ZSBtb2R1bGUNCi0gICAgICgndGVtcGxhdGUtcW5hbWUtMS5tb2QnKSBzdWl0YWJsZSBmb3IgdGhpcyBwdXJwb3NlLg0KLS0tPg0KLQ0KLTwhLS0gU2VjdGlvbiBBOiBYSFRNTCBYTUwgTmFtZXNwYWNlIEZyYW1ld29yayA6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OiAtLT4NCi0NCi08IS0tIDEuIERlY2xhcmUgYSAlWEhUTUwucHJlZml4ZWQ7IGNvbmRpdGlvbmFsIHNlY3Rpb24ga2V5d29yZCwgdXNlZA0KLSAgICAgICAgdG8gYWN0aXZhdGUgbmFtZXNwYWNlIHByZWZpeGluZy4gVGhlIGRlZmF1bHQgdmFsdWUgc2hvdWxkDQotICAgICAgICBpbmhlcml0ICclTlMucHJlZml4ZWQ7JyBmcm9tIHRoZSBEVEQgZHJpdmVyLCBzbyB0aGF0IHVubGVzcw0KLSAgICAgICAgb3ZlcnJpZGRlbiwgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGZvbGxvd3MgdGhlIG92ZXJhbGwgRFREDQotICAgICAgICBwcmVmaXhpbmcgc2NoZW1lLg0KLS0tPg0KLTwhRU5USVRZICUgTlMucHJlZml4ZWQgIklHTk9SRSIgPg0KLTwhRU5USVRZICUgWEhUTUwucHJlZml4ZWQgIiVOUy5wcmVmaXhlZDsiID4NCi0NCi08IS0tIDIuIERlY2xhcmUgYSBwYXJhbWV0ZXIgZW50aXR5IChlZy4sICVYSFRNTC54bWxuczspIGNvbnRhaW5pbmcNCi0gICAgICAgIHRoZSBVUkkgcmVmZXJlbmNlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIFhIVE1MIG5hbWVzcGFjZToNCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnhtbG5zICAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgPg0KLQ0KLTwhLS0gMy4gRGVjbGFyZSBwYXJhbWV0ZXIgZW50aXRpZXMgKGVnLiwgJVhIVE1MLnByZWZpeDspIGNvbnRhaW5pbmcNCi0gICAgICAgIHRoZSBkZWZhdWx0IG5hbWVzcGFjZSBwcmVmaXggc3RyaW5nKHMpIHRvIHVzZSB3aGVuIHByZWZpeGluZw0KLSAgICAgICAgaXMgZW5hYmxlZC4gVGhpcyBtYXkgYmUgb3ZlcnJpZGRlbiBpbiB0aGUgRFREIGRyaXZlciBvciB0aGUNCi0gICAgICAgIGludGVybmFsIHN1YnNldCBvZiBhbiBkb2N1bWVudCBpbnN0YW5jZS4gSWYgbm8gZGVmYXVsdCBwcmVmaXgNCi0gICAgICAgIGlzIGRlc2lyZWQsIHRoaXMgbWF5IGJlIGRlY2xhcmVkIGFzIGFuIGVtcHR5IHN0cmluZy4NCi0NCi0gICAgIE5PVEU6IEFzIHNwZWNpZmllZCBpbiBbWE1MTkFNRVNdLCB0aGUgbmFtZXNwYWNlIHByZWZpeCBzZXJ2ZXMNCi0gICAgIGFzIGEgcHJveHkgZm9yIHRoZSBVUkkgcmVmZXJlbmNlLCBhbmQgaXMgbm90IGluIGl0c2VsZiBzaWduaWZpY2FudC4NCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnByZWZpeCAgIiIgPg0KLQ0KLTwhLS0gNC4gRGVjbGFyZSBwYXJhbWV0ZXIgZW50aXRpZXMgKGVnLiwgJVhIVE1MLnBmeDspIGNvbnRhaW5pbmcgdGhlDQotICAgICAgICBjb2xvbml6ZWQgcHJlZml4KGVzKSAoZWcuLCAnJVhIVE1MLnByZWZpeDs6JykgdXNlZCB3aGVuDQotICAgICAgICBwcmVmaXhpbmcgaXMgYWN0aXZlLCBhbiBlbXB0eSBzdHJpbmcgd2hlbiBpdCBpcyBub3QuDQotLS0+DQotPCFbJVhIVE1MLnByZWZpeGVkO1sNCi08IUVOVElUWSAlIFhIVE1MLnBmeCAgIiVYSFRNTC5wcmVmaXg7OiIgPg0KLV1dPg0KLTwhRU5USVRZICUgWEhUTUwucGZ4ICAiIiA+DQotDQotPCEtLSBkZWNsYXJlIHF1YWxpZmllZCBuYW1lIGV4dGVuc2lvbnMgaGVyZSAuLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1xbmFtZS1leHRyYS5tb2QgIiIgPg0KLQ0KLQ0KLTwhLS0gNS4gVGhlIHBhcmFtZXRlciBlbnRpdHkgJVhIVE1MLnhtbG5zLmV4dHJhLmF0dHJpYjsgbWF5IGJlDQotICAgICAgICByZWRlY2xhcmVkIHRvIGNvbnRhaW4gYW55IG5vbi1YSFRNTCBuYW1lc3BhY2UgZGVjbGFyYXRpb24NCi0gICAgICAgIGF0dHJpYnV0ZXMgZm9yIG5hbWVzcGFjZXMgZW1iZWRkZWQgaW4gWEhUTUwuIFRoZSBkZWZhdWx0DQotICAgICAgICBpcyBhbiBlbXB0eSBzdHJpbmcuICBYTGluayBzaG91bGQgYmUgaW5jbHVkZWQgaGVyZSBpZiB1c2VkDQotICAgICAgICBpbiB0aGUgRFRELg0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwueG1sbnMuZXh0cmEuYXR0cmliICIiID4NCi0NCi08IS0tIFRoZSByZW1haW5kZXIgb2YgU2VjdGlvbiBBIGlzIG9ubHkgZm9sbG93ZWQgaW4gWEhUTUwsIG5vdCBleHRlbnNpb25zLiAtLT4NCi0NCi08IS0tIERlY2xhcmUgYSBwYXJhbWV0ZXIgZW50aXR5ICVOUy5kZWNsLmF0dHJpYjsgY29udGFpbmluZw0KLSAgICAgYWxsIFhNTCBOYW1lc3BhY2UgZGVjbGFyYXRpb25zIHVzZWQgaW4gdGhlIERURCwgcGx1cyB0aGUNCi0gICAgIHhtbG5zIGRlY2xhcmF0aW9uIGZvciBYSFRNTCwgaXRzIGZvcm0gZGVwZW5kZW50IG9uIHdoZXRoZXINCi0gICAgIHByZWZpeGluZyBpcyBhY3RpdmUuDQotLS0+DQotPCFbJVhIVE1MLnByZWZpeGVkO1sNCi08IUVOVElUWSAlIE5TLmRlY2wuYXR0cmliDQotICAgICAieG1sbnM6JVhIVE1MLnByZWZpeDsgICVVUkkuZGF0YXR5cGU7ICAgI0ZJWEVEICclWEhUTUwueG1sbnM7Jw0KLSAgICAgICVYSFRNTC54bWxucy5leHRyYS5hdHRyaWI7Ig0KLT4NCi1dXT4NCi08IUVOVElUWSAlIE5TLmRlY2wuYXR0cmliDQotICAgICAiJVhIVE1MLnhtbG5zLmV4dHJhLmF0dHJpYjsiDQotPg0KLQ0KLTwhLS0gVGhpcyBpcyBhIHBsYWNlaG9sZGVyIGZvciBmdXR1cmUgWExpbmsgc3VwcG9ydC4NCi0tLT4NCi08IUVOVElUWSAlIFhMSU5LLnhtbG5zLmF0dHJpYiAiIiA+DQotDQotPCEtLSBEZWNsYXJlIGEgcGFyYW1ldGVyIGVudGl0eSAlTlMuZGVjbC5hdHRyaWI7IGNvbnRhaW5pbmcgYWxsDQotICAgICBYTUwgbmFtZXNwYWNlIGRlY2xhcmF0aW9uIGF0dHJpYnV0ZXMgdXNlZCBieSBYSFRNTCwgaW5jbHVkaW5nDQotICAgICBhIGRlZmF1bHQgeG1sbnMgYXR0cmlidXRlIHdoZW4gcHJlZml4aW5nIGlzIGluYWN0aXZlLg0KLS0tPg0KLTwhWyVYSFRNTC5wcmVmaXhlZDtbDQotPCFFTlRJVFkgJSBYSFRNTC54bWxucy5hdHRyaWINCi0gICAgICIlTlMuZGVjbC5hdHRyaWI7DQotICAgICAgJVhMSU5LLnhtbG5zLmF0dHJpYjsiDQotPg0KLV1dPg0KLTwhRU5USVRZICUgWEhUTUwueG1sbnMuYXR0cmliDQotICAgICAieG1sbnMgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjRklYRUQgJyVYSFRNTC54bWxuczsnDQotICAgICAgJVhMSU5LLnhtbG5zLmF0dHJpYjsiDQotPg0KLQ0KLTwhLS0gcGxhY2Vob2xkZXIgZm9yIHF1YWxpZmllZCBuYW1lIHJlZGVjbGFyYXRpb25zIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtcW5hbWUucmVkZWNsICIiID4NCi0NCi0NCi08IS0tIFNlY3Rpb24gQjogWEhUTUwgUXVhbGlmaWVkIE5hbWVzIDo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6IC0tPg0KLQ0KLTwhLS0gNi4gVGhpcyBzZWN0aW9uIGRlY2xhcmVzIHBhcmFtZXRlciBlbnRpdGllcyB1c2VkIHRvIHByb3ZpZGUNCi0gICAgICAgIG5hbWVzcGFjZS1xdWFsaWZpZWQgbmFtZXMgZm9yIGFsbCBYSFRNTCBlbGVtZW50IHR5cGVzLg0KLS0tPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYXBwbGV0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgYXBwbGV0LnFuYW1lICAiJVhIVE1MLnBmeDthcHBsZXQiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWJhc2UtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBiYXNlLnFuYW1lICAgICIlWEhUTUwucGZ4O2Jhc2UiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWJkby0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGJkby5xbmFtZSAgICAgIiVYSFRNTC5wZng7YmRvIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1ibGtwaHJhcy0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGFkZHJlc3MucW5hbWUgIiVYSFRNTC5wZng7YWRkcmVzcyIgPg0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5xbmFtZSAgIiVYSFRNTC5wZng7YmxvY2txdW90ZSIgPg0KLTwhRU5USVRZICUgcHJlLnFuYW1lICAgICAiJVhIVE1MLnBmeDtwcmUiID4NCi08IUVOVElUWSAlIGgxLnFuYW1lICAgICAgIiVYSFRNTC5wZng7aDEiID4NCi08IUVOVElUWSAlIGgyLnFuYW1lICAgICAgIiVYSFRNTC5wZng7aDIiID4NCi08IUVOVElUWSAlIGgzLnFuYW1lICAgICAgIiVYSFRNTC5wZng7aDMiID4NCi08IUVOVElUWSAlIGg0LnFuYW1lICAgICAgIiVYSFRNTC5wZng7aDQiID4NCi08IUVOVElUWSAlIGg1LnFuYW1lICAgICAgIiVYSFRNTC5wZng7aDUiID4NCi08IUVOVElUWSAlIGg2LnFuYW1lICAgICAgIiVYSFRNTC5wZng7aDYiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWJsa3ByZXMtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBoci5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2hyIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1ibGtzdHJ1Y3QtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBkaXYucW5hbWUgICAgICIlWEhUTUwucGZ4O2RpdiIgPg0KLTwhRU5USVRZICUgcC5xbmFtZSAgICAgICAiJVhIVE1MLnBmeDtwIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1lZGl0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgaW5zLnFuYW1lICAgICAiJVhIVE1MLnBmeDtpbnMiID4NCi08IUVOVElUWSAlIGRlbC5xbmFtZSAgICAgIiVYSFRNTC5wZng7ZGVsIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1mb3JtLTEubW9kIC0tPg0KLTwhRU5USVRZICUgZm9ybS5xbmFtZSAgICAiJVhIVE1MLnBmeDtmb3JtIiA+DQotPCFFTlRJVFkgJSBsYWJlbC5xbmFtZSAgICIlWEhUTUwucGZ4O2xhYmVsIiA+DQotPCFFTlRJVFkgJSBpbnB1dC5xbmFtZSAgICIlWEhUTUwucGZ4O2lucHV0IiA+DQotPCFFTlRJVFkgJSBzZWxlY3QucW5hbWUgICIlWEhUTUwucGZ4O3NlbGVjdCIgPg0KLTwhRU5USVRZICUgb3B0Z3JvdXAucW5hbWUgICIlWEhUTUwucGZ4O29wdGdyb3VwIiA+DQotPCFFTlRJVFkgJSBvcHRpb24ucW5hbWUgICIlWEhUTUwucGZ4O29wdGlvbiIgPg0KLTwhRU5USVRZICUgdGV4dGFyZWEucW5hbWUgICIlWEhUTUwucGZ4O3RleHRhcmVhIiA+DQotPCFFTlRJVFkgJSBmaWVsZHNldC5xbmFtZSAgIiVYSFRNTC5wZng7ZmllbGRzZXQiID4NCi08IUVOVElUWSAlIGxlZ2VuZC5xbmFtZSAgIiVYSFRNTC5wZng7bGVnZW5kIiA+DQotPCFFTlRJVFkgJSBidXR0b24ucW5hbWUgICIlWEhUTUwucGZ4O2J1dHRvbiIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaHlwZXJ0ZXh0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgYS5xbmFtZSAgICAgICAiJVhIVE1MLnBmeDthIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pbWFnZS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGltZy5xbmFtZSAgICAgIiVYSFRNTC5wZng7aW1nIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pbmxwaHJhcy0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGFiYnIucW5hbWUgICAgIiVYSFRNTC5wZng7YWJiciIgPg0KLTwhRU5USVRZICUgYWNyb255bS5xbmFtZSAiJVhIVE1MLnBmeDthY3JvbnltIiA+DQotPCFFTlRJVFkgJSBjaXRlLnFuYW1lICAgICIlWEhUTUwucGZ4O2NpdGUiID4NCi08IUVOVElUWSAlIGNvZGUucW5hbWUgICAgIiVYSFRNTC5wZng7Y29kZSIgPg0KLTwhRU5USVRZICUgZGZuLnFuYW1lICAgICAiJVhIVE1MLnBmeDtkZm4iID4NCi08IUVOVElUWSAlIGVtLnFuYW1lICAgICAgIiVYSFRNTC5wZng7ZW0iID4NCi08IUVOVElUWSAlIGtiZC5xbmFtZSAgICAgIiVYSFRNTC5wZng7a2JkIiA+DQotPCFFTlRJVFkgJSBxLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O3EiID4NCi08IUVOVElUWSAlIHNhbXAucW5hbWUgICAgIiVYSFRNTC5wZng7c2FtcCIgPg0KLTwhRU5USVRZICUgc3Ryb25nLnFuYW1lICAiJVhIVE1MLnBmeDtzdHJvbmciID4NCi08IUVOVElUWSAlIHZhci5xbmFtZSAgICAgIiVYSFRNTC5wZng7dmFyIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pbmxwcmVzLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYi5xbmFtZSAgICAgICAiJVhIVE1MLnBmeDtiIiA+DQotPCFFTlRJVFkgJSBiaWcucW5hbWUgICAgICIlWEhUTUwucGZ4O2JpZyIgPg0KLTwhRU5USVRZICUgaS5xbmFtZSAgICAgICAiJVhIVE1MLnBmeDtpIiA+DQotPCFFTlRJVFkgJSBzbWFsbC5xbmFtZSAgICIlWEhUTUwucGZ4O3NtYWxsIiA+DQotPCFFTlRJVFkgJSBzdWIucW5hbWUgICAgICIlWEhUTUwucGZ4O3N1YiIgPg0KLTwhRU5USVRZICUgc3VwLnFuYW1lICAgICAiJVhIVE1MLnBmeDtzdXAiID4NCi08IUVOVElUWSAlIHR0LnFuYW1lICAgICAgIiVYSFRNTC5wZng7dHQiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWlubHN0cnVjdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGJyLnFuYW1lICAgICAgIiVYSFRNTC5wZng7YnIiID4NCi08IUVOVElUWSAlIHNwYW4ucW5hbWUgICAgIiVYSFRNTC5wZng7c3BhbiIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaXNtYXAtMS5tb2QgKGFsc28gY3Npc21hcCwgc3Npc21hcCkgLS0+DQotPCFFTlRJVFkgJSBtYXAucW5hbWUgICAgICIlWEhUTUwucGZ4O21hcCIgPg0KLTwhRU5USVRZICUgYXJlYS5xbmFtZSAgICAiJVhIVE1MLnBmeDthcmVhIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1saW5rLTEubW9kIC0tPg0KLTwhRU5USVRZICUgbGluay5xbmFtZSAgICAiJVhIVE1MLnBmeDtsaW5rIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1saXN0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgZGwucW5hbWUgICAgICAiJVhIVE1MLnBmeDtkbCIgPg0KLTwhRU5USVRZICUgZHQucW5hbWUgICAgICAiJVhIVE1MLnBmeDtkdCIgPg0KLTwhRU5USVRZICUgZGQucW5hbWUgICAgICAiJVhIVE1MLnBmeDtkZCIgPg0KLTwhRU5USVRZICUgb2wucW5hbWUgICAgICAiJVhIVE1MLnBmeDtvbCIgPg0KLTwhRU5USVRZICUgdWwucW5hbWUgICAgICAiJVhIVE1MLnBmeDt1bCIgPg0KLTwhRU5USVRZICUgbGkucW5hbWUgICAgICAiJVhIVE1MLnBmeDtsaSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtbWV0YS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIG1ldGEucW5hbWUgICAgIiVYSFRNTC5wZng7bWV0YSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtcGFyYW0tMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBwYXJhbS5xbmFtZSAgICIlWEhUTUwucGZ4O3BhcmFtIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1vYmplY3QtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBvYmplY3QucW5hbWUgICIlWEhUTUwucGZ4O29iamVjdCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtc2NyaXB0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgc2NyaXB0LnFuYW1lICAiJVhIVE1MLnBmeDtzY3JpcHQiID4NCi08IUVOVElUWSAlIG5vc2NyaXB0LnFuYW1lICAiJVhIVE1MLnBmeDtub3NjcmlwdCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtc3RydWN0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgaHRtbC5xbmFtZSAgICAiJVhIVE1MLnBmeDtodG1sIiA+DQotPCFFTlRJVFkgJSBoZWFkLnFuYW1lICAgICIlWEhUTUwucGZ4O2hlYWQiID4NCi08IUVOVElUWSAlIHRpdGxlLnFuYW1lICAgIiVYSFRNTC5wZng7dGl0bGUiID4NCi08IUVOVElUWSAlIGJvZHkucW5hbWUgICAgIiVYSFRNTC5wZng7Ym9keSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtc3R5bGUtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBzdHlsZS5xbmFtZSAgICIlWEhUTUwucGZ4O3N0eWxlIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC10YWJsZS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIHRhYmxlLnFuYW1lICAgIiVYSFRNTC5wZng7dGFibGUiID4NCi08IUVOVElUWSAlIGNhcHRpb24ucW5hbWUgIiVYSFRNTC5wZng7Y2FwdGlvbiIgPg0KLTwhRU5USVRZICUgdGhlYWQucW5hbWUgICAiJVhIVE1MLnBmeDt0aGVhZCIgPg0KLTwhRU5USVRZICUgdGZvb3QucW5hbWUgICAiJVhIVE1MLnBmeDt0Zm9vdCIgPg0KLTwhRU5USVRZICUgdGJvZHkucW5hbWUgICAiJVhIVE1MLnBmeDt0Ym9keSIgPg0KLTwhRU5USVRZICUgY29sZ3JvdXAucW5hbWUgICIlWEhUTUwucGZ4O2NvbGdyb3VwIiA+DQotPCFFTlRJVFkgJSBjb2wucW5hbWUgICAgICIlWEhUTUwucGZ4O2NvbCIgPg0KLTwhRU5USVRZICUgdHIucW5hbWUgICAgICAiJVhIVE1MLnBmeDt0ciIgPg0KLTwhRU5USVRZICUgdGgucW5hbWUgICAgICAiJVhIVE1MLnBmeDt0aCIgPg0KLTwhRU5USVRZICUgdGQucW5hbWUgICAgICAiJVhIVE1MLnBmeDt0ZCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtcnVieS0xLm1vZCAtLT4NCi0NCi08IUVOVElUWSAlIHJ1YnkucW5hbWUgICAgIiVYSFRNTC5wZng7cnVieSIgPg0KLTwhRU5USVRZICUgcmJjLnFuYW1lICAgICAiJVhIVE1MLnBmeDtyYmMiID4NCi08IUVOVElUWSAlIHJ0Yy5xbmFtZSAgICAgIiVYSFRNTC5wZng7cnRjIiA+DQotPCFFTlRJVFkgJSByYi5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3JiIiA+DQotPCFFTlRJVFkgJSBydC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3J0IiA+DQotPCFFTlRJVFkgJSBycC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3JwIiA+DQotDQotPCEtLSBQcm92aXNpb25hbCBYSFRNTCAyLjAgUXVhbGlmaWVkIE5hbWVzICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW1hZ2UtMi5tb2QgLS0+DQotPCFFTlRJVFkgJSBhbHQucW5hbWUgICAgICIlWEhUTUwucGZ4O2FsdCIgPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXFuYW1lLTEubW9kIC0tPg0KLQ0KLTwhLS0NCi0JWEhUTUwgZ2xvYmFsIGF0dHJpYnV0ZXMNCi0tLT4NCi08IUVOVElUWSAlIHhodG1sLWlubHN0eWxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFN0eWxlIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxzdHlsZS0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSW5saW5lIFN0eWxlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWlubHN0eWxlLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIElubGluZSBTdHlsZSAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxzdHlsZS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBJbmxpbmUgU3R5bGUNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSAnc3R5bGUnIGF0dHJpYnV0ZSwgdXNlZCB0byBzdXBwb3J0IGlubGluZQ0KLSAgICAgc3R5bGUgbWFya3VwLiBUaGlzIG1vZHVsZSBtdXN0IGJlIGluc3RhbnRpYXRlZCBwcmlvciB0byB0aGUgWEhUTUwNCi0gICAgIENvbW1vbiBBdHRyaWJ1dGVzIG1vZHVsZSBpbiBvcmRlciB0byBiZSBpbmNsdWRlZCBpbiAlQ29yZS5hdHRyaWI7Lg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgc3R5bGUuYXR0cmliDQotICAgICAic3R5bGUgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotDQotPCFFTlRJVFkgJSBDb3JlLmV4dHJhLmF0dHJpYg0KLSAgICAgIiVzdHlsZS5hdHRyaWI7Ig0KLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1pbmxzdHlsZS0xLm1vZCAtLT4NCi0NCi08IUVOVElUWSAlIFhIVE1MLmJpZGkgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB4aHRtbC1hdHRyaWJzLm1vZCBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgQ29tbW9uIEF0dHJpYnV0ZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWF0dHJpYnMtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIENvbW1vbiBBdHRyaWJ1dGVzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1hdHRyaWJzLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBDb21tb24gQXR0cmlidXRlcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1hdHRyaWJzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIENvbW1vbiBBdHRyaWJ1dGVzDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyBtYW55IG9mIHRoZSBjb21tb24gYXR0cmlidXRlcyBmb3IgdGhlIFhIVE1MIERURC4NCi0gICAgICVOUy5kZWNsLmF0dHJpYjsgaXMgZGVjbGFyZWQgaW4gdGhlIFhIVE1MIFFuYW1lIG1vZHVsZS4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGlkLmF0dHJpYg0KLSAgICAgImlkICAgICAgICAgICBJRCAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhRU5USVRZICUgY2xhc3MuYXR0cmliDQotICAgICAiY2xhc3MgICAgICAgIE5NVE9LRU5TICAgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCFFTlRJVFkgJSB0aXRsZS5hdHRyaWINCi0gICAgICJ0aXRsZSAgICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IUVOVElUWSAlIENvcmUuZXh0cmEuYXR0cmliICIiID4NCi0NCi08IUVOVElUWSAlIENvcmUuYXR0cmliDQotICAgICAiJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlaWQuYXR0cmliOw0KLSAgICAgICVjbGFzcy5hdHRyaWI7DQotICAgICAgJXRpdGxlLmF0dHJpYjsNCi0gICAgICAlQ29yZS5leHRyYS5hdHRyaWI7Ig0KLT4NCi0NCi08IUVOVElUWSAlIGxhbmcuYXR0cmliDQotICAgICAieG1sOmxhbmcgICAgICVMYW5ndWFnZUNvZGUuZGF0YXR5cGU7ICAjSU1QTElFRCINCi0+DQotDQotPCFbJVhIVE1MLmJpZGk7Ww0KLTwhRU5USVRZICUgZGlyLmF0dHJpYg0KLSAgICAgImRpciAgICAgICAgICAoIGx0ciB8IHJ0bCApICAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhRU5USVRZICUgSTE4bi5hdHRyaWINCi0gICAgICIlZGlyLmF0dHJpYjsNCi0gICAgICAlbGFuZy5hdHRyaWI7Ig0KLT4NCi0NCi1dXT4NCi08IUVOVElUWSAlIEkxOG4uYXR0cmliDQotICAgICAiJWxhbmcuYXR0cmliOyINCi0+DQotDQotPCFFTlRJVFkgJSBDb21tb24uZXh0cmEuYXR0cmliICIiID4NCi0NCi08IS0tIGludHJpbnNpYyBldmVudCBhdHRyaWJ1dGVzIGRlY2xhcmVkIHByZXZpb3VzbHkNCi0tLT4NCi08IUVOVElUWSAlIEV2ZW50cy5hdHRyaWIgIiIgPg0KLQ0KLTwhRU5USVRZICUgQ29tbW9uLmF0dHJpYg0KLSAgICAgIiVDb3JlLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotICAgICAgJUV2ZW50cy5hdHRyaWI7DQotICAgICAgJUNvbW1vbi5leHRyYS5hdHRyaWI7Ig0KLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1hdHRyaWJzLTEubW9kIC0tPg0KLQ0KLTwhLS0gDQotCVhIVE1MIGNoYXJhY3RlciBlbnRpdGllcw0KLS0tPg0KLTwhRU5USVRZICUgeGh0bWwtY2hhcmVudC5tb2QgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENoYXJhY3RlciBFbnRpdGllcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtY2hhcmVudC0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQ2hhcmFjdGVyIEVudGl0aWVzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1jaGFyZW50LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBDaGFyYWN0ZXIgRW50aXRpZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtY2hhcmVudC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBDaGFyYWN0ZXIgRW50aXRpZXMgZm9yIFhIVE1MDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgc2V0IG9mIGNoYXJhY3RlciBlbnRpdGllcyBmb3IgWEhUTUwsDQotICAgICBpbmNsdWRpbmcgdGhlIExhdGluIDEsIFN5bWJvbCBhbmQgU3BlY2lhbCBjaGFyYWN0ZXIgY29sbGVjdGlvbnMuDQotLS0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1sYXQxDQotICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBMYXRpbiAxIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAieGh0bWwtbGF0MS5lbnQiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYTUwtY29tcGF0aWJsZSBJU08gTGF0aW4gMSBDaGFyYWN0ZXIgRW50aXR5IFNldCBmb3IgWEhUTUwgLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbGF0MS5lbnQNCi0NCi0gICAgIFR5cGljYWwgaW52b2NhdGlvbjoNCi0NCi0gICAgICAgPCFFTlRJVFkgJSB4aHRtbC1sYXQxDQotICAgICAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgTGF0aW4gMSBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgICAgICAgICJ4aHRtbC1sYXQxLmVudCIgPg0KLSAgICAgICAleGh0bWwtbGF0MTsNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIExhdGluIDEgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGF0MS5lbnQiDQotDQotICAgICBSZXZpc2lvbjogICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBQb3J0aW9ucyAoQykgSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiAxOTg2Og0KLSAgICAgUGVybWlzc2lvbiB0byBjb3B5IGluIGFueSBmb3JtIGlzIGdyYW50ZWQgZm9yIHVzZSB3aXRoIGNvbmZvcm1pbmcNCi0gICAgIFNHTUwgc3lzdGVtcyBhbmQgYXBwbGljYXRpb25zIGFzIGRlZmluZWQgaW4gSVNPIDg4NzksIHByb3ZpZGVkDQotICAgICB0aGlzIG5vdGljZSBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzLg0KLS0tPg0KLQ0KLTwhRU5USVRZIG5ic3AgICAiJiMxNjA7IiA+PCEtLSBuby1icmVhayBzcGFjZSA9IG5vbi1icmVha2luZyBzcGFjZSwgVSswMEEwIElTT251bSAtLT4NCi08IUVOVElUWSBpZXhjbCAgIiYjMTYxOyIgPjwhLS0gaW52ZXJ0ZWQgZXhjbGFtYXRpb24gbWFyaywgVSswMEExIElTT251bSAtLT4NCi08IUVOVElUWSBjZW50ICAgIiYjMTYyOyIgPjwhLS0gY2VudCBzaWduLCBVKzAwQTIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHBvdW5kICAiJiMxNjM7IiA+PCEtLSBwb3VuZCBzaWduLCBVKzAwQTMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGN1cnJlbiAiJiMxNjQ7IiA+PCEtLSBjdXJyZW5jeSBzaWduLCBVKzAwQTQgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHllbiAgICAiJiMxNjU7IiA+PCEtLSB5ZW4gc2lnbiA9IHl1YW4gc2lnbiwgVSswMEE1IElTT251bSAtLT4NCi08IUVOVElUWSBicnZiYXIgIiYjMTY2OyIgPjwhLS0gYnJva2VuIGJhciA9IGJyb2tlbiB2ZXJ0aWNhbCBiYXIsIFUrMDBBNiBJU09udW0gLS0+DQotPCFFTlRJVFkgc2VjdCAgICImIzE2NzsiID48IS0tIHNlY3Rpb24gc2lnbiwgVSswMEE3IElTT251bSAtLT4NCi08IUVOVElUWSB1bWwgICAgIiYjMTY4OyIgPjwhLS0gZGlhZXJlc2lzID0gc3BhY2luZyBkaWFlcmVzaXMsIFUrMDBBOCBJU09kaWEgLS0+DQotPCFFTlRJVFkgY29weSAgICImIzE2OTsiID48IS0tIGNvcHlyaWdodCBzaWduLCBVKzAwQTkgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG9yZGYgICAiJiMxNzA7IiA+PCEtLSBmZW1pbmluZSBvcmRpbmFsIGluZGljYXRvciwgVSswMEFBIElTT251bSAtLT4NCi08IUVOVElUWSBsYXF1byAgIiYjMTcxOyIgPjwhLS0gbGVmdC1wb2ludGluZyBkb3VibGUgYW5nbGUgcXVvdGF0aW9uIG1hcmsgPSBsZWZ0IHBvaW50aW5nIGd1aWxsZW1ldCwgVSswMEFCIElTT251bSAtLT4NCi08IUVOVElUWSBub3QgICAgIiYjMTcyOyIgPjwhLS0gbm90IHNpZ24sIFUrMDBBQyBJU09udW0gLS0+DQotPCFFTlRJVFkgc2h5ICAgICImIzE3MzsiID48IS0tIHNvZnQgaHlwaGVuID0gZGlzY3JldGlvbmFyeSBoeXBoZW4sIFUrMDBBRCBJU09udW0gLS0+DQotPCFFTlRJVFkgcmVnICAgICImIzE3NDsiID48IS0tIHJlZ2lzdGVyZWQgc2lnbiA9IHJlZ2lzdGVyZWQgdHJhZGUgbWFyayBzaWduLCBVKzAwQUUgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG1hY3IgICAiJiMxNzU7IiA+PCEtLSBtYWNyb24gPSBzcGFjaW5nIG1hY3JvbiA9IG92ZXJsaW5lID0gQVBMIG92ZXJiYXIsIFUrMDBBRiBJU09kaWEgLS0+DQotPCFFTlRJVFkgZGVnICAgICImIzE3NjsiID48IS0tIGRlZ3JlZSBzaWduLCBVKzAwQjAgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHBsdXNtbiAiJiMxNzc7IiA+PCEtLSBwbHVzLW1pbnVzIHNpZ24gPSBwbHVzLW9yLW1pbnVzIHNpZ24sIFUrMDBCMSBJU09udW0gLS0+DQotPCFFTlRJVFkgc3VwMiAgICImIzE3ODsiID48IS0tIHN1cGVyc2NyaXB0IHR3byA9IHN1cGVyc2NyaXB0IGRpZ2l0IHR3byA9IHNxdWFyZWQsIFUrMDBCMiBJU09udW0gLS0+DQotPCFFTlRJVFkgc3VwMyAgICImIzE3OTsiID48IS0tIHN1cGVyc2NyaXB0IHRocmVlID0gc3VwZXJzY3JpcHQgZGlnaXQgdGhyZWUgPSBjdWJlZCwgVSswMEIzIElTT251bSAtLT4NCi08IUVOVElUWSBhY3V0ZSAgIiYjMTgwOyIgPjwhLS0gYWN1dGUgYWNjZW50ID0gc3BhY2luZyBhY3V0ZSwgVSswMEI0IElTT2RpYSAtLT4NCi08IUVOVElUWSBtaWNybyAgIiYjMTgxOyIgPjwhLS0gbWljcm8gc2lnbiwgVSswMEI1IElTT251bSAtLT4NCi08IUVOVElUWSBwYXJhICAgIiYjMTgyOyIgPjwhLS0gcGlsY3JvdyBzaWduID0gcGFyYWdyYXBoIHNpZ24sIFUrMDBCNiBJU09udW0gLS0+DQotPCFFTlRJVFkgbWlkZG90ICImIzE4MzsiID48IS0tIG1pZGRsZSBkb3QgPSBHZW9yZ2lhbiBjb21tYSA9IEdyZWVrIG1pZGRsZSBkb3QsIFUrMDBCNyBJU09udW0gLS0+DQotPCFFTlRJVFkgY2VkaWwgICImIzE4NDsiID48IS0tIGNlZGlsbGEgPSBzcGFjaW5nIGNlZGlsbGEsIFUrMDBCOCBJU09kaWEgLS0+DQotPCFFTlRJVFkgc3VwMSAgICImIzE4NTsiID48IS0tIHN1cGVyc2NyaXB0IG9uZSA9IHN1cGVyc2NyaXB0IGRpZ2l0IG9uZSwgVSswMEI5IElTT251bSAtLT4NCi08IUVOVElUWSBvcmRtICAgIiYjMTg2OyIgPjwhLS0gbWFzY3VsaW5lIG9yZGluYWwgaW5kaWNhdG9yLCBVKzAwQkEgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHJhcXVvICAiJiMxODc7IiA+PCEtLSByaWdodC1wb2ludGluZyBkb3VibGUgYW5nbGUgcXVvdGF0aW9uIG1hcmsgPSByaWdodCBwb2ludGluZyBndWlsbGVtZXQsIFUrMDBCQiBJU09udW0gLS0+DQotPCFFTlRJVFkgZnJhYzE0ICImIzE4ODsiID48IS0tIHZ1bGdhciBmcmFjdGlvbiBvbmUgcXVhcnRlciA9IGZyYWN0aW9uIG9uZSBxdWFydGVyLCBVKzAwQkMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGZyYWMxMiAiJiMxODk7IiA+PCEtLSB2dWxnYXIgZnJhY3Rpb24gb25lIGhhbGYgPSBmcmFjdGlvbiBvbmUgaGFsZiwgVSswMEJEIElTT251bSAtLT4NCi08IUVOVElUWSBmcmFjMzQgIiYjMTkwOyIgPjwhLS0gdnVsZ2FyIGZyYWN0aW9uIHRocmVlIHF1YXJ0ZXJzID0gZnJhY3Rpb24gdGhyZWUgcXVhcnRlcnMsIFUrMDBCRSBJU09udW0gLS0+DQotPCFFTlRJVFkgaXF1ZXN0ICImIzE5MTsiID48IS0tIGludmVydGVkIHF1ZXN0aW9uIG1hcmsgPSB0dXJuZWQgcXVlc3Rpb24gbWFyaywgVSswMEJGIElTT251bSAtLT4NCi08IUVOVElUWSBBZ3JhdmUgIiYjMTkyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggZ3JhdmUgPSBsYXRpbiBjYXBpdGFsIEEgZ3JhdmUsIFUrMDBDMCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEFhY3V0ZSAiJiMxOTM7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCBhY3V0ZSwgVSswMEMxIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQWNpcmMgICImIzE5NDsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBDMiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEF0aWxkZSAiJiMxOTU7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCB0aWxkZSwgVSswMEMzIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQXVtbCAgICImIzE5NjsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIGRpYWVyZXNpcywgVSswMEM0IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQXJpbmcgICImIzE5NzsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIHJpbmcgYWJvdmUgPSBsYXRpbiBjYXBpdGFsIEEgcmluZywgVSswMEM1IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQUVsaWcgICImIzE5ODsiID48IS0tIGxhdGluIGNhcGl0YWwgQUUgPSBsYXRpbiBjYXBpdGFsIGxpZ2F0dXJlIEFFLCBVKzAwQzYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBDY2VkaWwgIiYjMTk5OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBDIHdpdGggY2VkaWxsYSwgVSswMEM3IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRWdyYXZlICImIzIwMDsiID48IS0tIGxhdGluIGNhcGl0YWwgRSB3aXRoIGdyYXZlLCBVKzAwQzggSVNPbGF0MSAtLT4NCi08IUVOVElUWSBFYWN1dGUgIiYjMjAxOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBFIHdpdGggYWN1dGUsIFUrMDBDOSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEVjaXJjICAiJiMyMDI7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEUgd2l0aCBjaXJjdW1mbGV4LCBVKzAwQ0EgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBFdW1sICAgIiYjMjAzOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBFIHdpdGggZGlhZXJlc2lzLCBVKzAwQ0IgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBJZ3JhdmUgIiYjMjA0OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBJIHdpdGggZ3JhdmUsIFUrMDBDQyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIElhY3V0ZSAiJiMyMDU7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEkgd2l0aCBhY3V0ZSwgVSswMENEIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgSWNpcmMgICImIzIwNjsiID48IS0tIGxhdGluIGNhcGl0YWwgSSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBDRSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEl1bWwgICAiJiMyMDc7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEkgd2l0aCBkaWFlcmVzaXMsIFUrMDBDRiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEVUSCAgICAiJiMyMDg7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEVUSCwgVSswMEQwIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgTnRpbGRlICImIzIwOTsiID48IS0tIGxhdGluIGNhcGl0YWwgTiB3aXRoIHRpbGRlLCBVKzAwRDEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPZ3JhdmUgIiYjMjEwOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggZ3JhdmUsIFUrMDBEMiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE9hY3V0ZSAiJiMyMTE7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCBhY3V0ZSwgVSswMEQzIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT2NpcmMgICImIzIxMjsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIGNpcmN1bWZsZXgsIFUrMDBENCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE90aWxkZSAiJiMyMTM7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCB0aWxkZSwgVSswMEQ1IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT3VtbCAgICImIzIxNDsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIGRpYWVyZXNpcywgVSswMEQ2IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdGltZXMgICImIzIxNTsiID48IS0tIG11bHRpcGxpY2F0aW9uIHNpZ24sIFUrMDBENyBJU09udW0gLS0+DQotPCFFTlRJVFkgT3NsYXNoICImIzIxNjsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIHN0cm9rZSA9IGxhdGluIGNhcGl0YWwgTyBzbGFzaCwgVSswMEQ4IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVWdyYXZlICImIzIxNzsiID48IS0tIGxhdGluIGNhcGl0YWwgVSB3aXRoIGdyYXZlLCBVKzAwRDkgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBVYWN1dGUgIiYjMjE4OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBVIHdpdGggYWN1dGUsIFUrMDBEQSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFVjaXJjICAiJiMyMTk7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFUgd2l0aCBjaXJjdW1mbGV4LCBVKzAwREIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBVdW1sICAgIiYjMjIwOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBVIHdpdGggZGlhZXJlc2lzLCBVKzAwREMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBZYWN1dGUgIiYjMjIxOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBZIHdpdGggYWN1dGUsIFUrMDBERCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFRIT1JOICAiJiMyMjI7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFRIT1JOLCBVKzAwREUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBzemxpZyAgIiYjMjIzOyIgPjwhLS0gbGF0aW4gc21hbGwgc2hhcnAgcyA9IGVzcy16ZWQsIFUrMDBERiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFncmF2ZSAiJiMyMjQ7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggZ3JhdmUgPSBsYXRpbiBzbWFsbCBhIGdyYXZlLCBVKzAwRTAgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhYWN1dGUgIiYjMjI1OyIgPjwhLS0gbGF0aW4gc21hbGwgYSB3aXRoIGFjdXRlLCBVKzAwRTEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhY2lyYyAgIiYjMjI2OyIgPjwhLS0gbGF0aW4gc21hbGwgYSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBFMiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGF0aWxkZSAiJiMyMjc7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggdGlsZGUsIFUrMDBFMyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGF1bWwgICAiJiMyMjg7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggZGlhZXJlc2lzLCBVKzAwRTQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhcmluZyAgIiYjMjI5OyIgPjwhLS0gbGF0aW4gc21hbGwgYSB3aXRoIHJpbmcgYWJvdmUgPSBsYXRpbiBzbWFsbCBhIHJpbmcsIFUrMDBFNSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFlbGlnICAiJiMyMzA7IiA+PCEtLSBsYXRpbiBzbWFsbCBhZSA9IGxhdGluIHNtYWxsIGxpZ2F0dXJlIGFlLCBVKzAwRTYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBjY2VkaWwgIiYjMjMxOyIgPjwhLS0gbGF0aW4gc21hbGwgYyB3aXRoIGNlZGlsbGEsIFUrMDBFNyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGVncmF2ZSAiJiMyMzI7IiA+PCEtLSBsYXRpbiBzbWFsbCBlIHdpdGggZ3JhdmUsIFUrMDBFOCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGVhY3V0ZSAiJiMyMzM7IiA+PCEtLSBsYXRpbiBzbWFsbCBlIHdpdGggYWN1dGUsIFUrMDBFOSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGVjaXJjICAiJiMyMzQ7IiA+PCEtLSBsYXRpbiBzbWFsbCBlIHdpdGggY2lyY3VtZmxleCwgVSswMEVBIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZXVtbCAgICImIzIzNTsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBkaWFlcmVzaXMsIFUrMDBFQiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGlncmF2ZSAiJiMyMzY7IiA+PCEtLSBsYXRpbiBzbWFsbCBpIHdpdGggZ3JhdmUsIFUrMDBFQyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGlhY3V0ZSAiJiMyMzc7IiA+PCEtLSBsYXRpbiBzbWFsbCBpIHdpdGggYWN1dGUsIFUrMDBFRCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGljaXJjICAiJiMyMzg7IiA+PCEtLSBsYXRpbiBzbWFsbCBpIHdpdGggY2lyY3VtZmxleCwgVSswMEVFIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaXVtbCAgICImIzIzOTsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBkaWFlcmVzaXMsIFUrMDBFRiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGV0aCAgICAiJiMyNDA7IiA+PCEtLSBsYXRpbiBzbWFsbCBldGgsIFUrMDBGMCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIG50aWxkZSAiJiMyNDE7IiA+PCEtLSBsYXRpbiBzbWFsbCBuIHdpdGggdGlsZGUsIFUrMDBGMSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIG9ncmF2ZSAiJiMyNDI7IiA+PCEtLSBsYXRpbiBzbWFsbCBvIHdpdGggZ3JhdmUsIFUrMDBGMiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIG9hY3V0ZSAiJiMyNDM7IiA+PCEtLSBsYXRpbiBzbWFsbCBvIHdpdGggYWN1dGUsIFUrMDBGMyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIG9jaXJjICAiJiMyNDQ7IiA+PCEtLSBsYXRpbiBzbWFsbCBvIHdpdGggY2lyY3VtZmxleCwgVSswMEY0IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb3RpbGRlICImIzI0NTsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCB0aWxkZSwgVSswMEY1IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb3VtbCAgICImIzI0NjsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBkaWFlcmVzaXMsIFUrMDBGNiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGRpdmlkZSAiJiMyNDc7IiA+PCEtLSBkaXZpc2lvbiBzaWduLCBVKzAwRjcgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG9zbGFzaCAiJiMyNDg7IiA+PCEtLSBsYXRpbiBzbWFsbCBvIHdpdGggc3Ryb2tlLCA9IGxhdGluIHNtYWxsIG8gc2xhc2gsIFUrMDBGOCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHVncmF2ZSAiJiMyNDk7IiA+PCEtLSBsYXRpbiBzbWFsbCB1IHdpdGggZ3JhdmUsIFUrMDBGOSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHVhY3V0ZSAiJiMyNTA7IiA+PCEtLSBsYXRpbiBzbWFsbCB1IHdpdGggYWN1dGUsIFUrMDBGQSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHVjaXJjICAiJiMyNTE7IiA+PCEtLSBsYXRpbiBzbWFsbCB1IHdpdGggY2lyY3VtZmxleCwgVSswMEZCIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdXVtbCAgICImIzI1MjsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBkaWFlcmVzaXMsIFUrMDBGQyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHlhY3V0ZSAiJiMyNTM7IiA+PCEtLSBsYXRpbiBzbWFsbCB5IHdpdGggYWN1dGUsIFUrMDBGRCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHRob3JuICAiJiMyNTQ7IiA+PCEtLSBsYXRpbiBzbWFsbCB0aG9ybiB3aXRoLCBVKzAwRkUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB5dW1sICAgIiYjMjU1OyIgPjwhLS0gbGF0aW4gc21hbGwgeSB3aXRoIGRpYWVyZXNpcywgVSswMEZGIElTT2xhdDEgLS0+DQotPCEtLSBlbmQgb2YgeGh0bWwtbGF0MS5lbnQgLS0+DQotDQotDQotPCFFTlRJVFkgJSB4aHRtbC1zeW1ib2wNCi0gICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFN5bWJvbHMgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICJ4aHRtbC1zeW1ib2wuZW50IiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gSVNPIE1hdGgsIEdyZWVrIGFuZCBTeW1ib2xpYyBDaGFyYWN0ZXIgRW50aXR5IFNldCBmb3IgWEhUTUwgLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXN5bWJvbC5lbnQNCi0NCi0gICAgIFR5cGljYWwgaW52b2NhdGlvbjoNCi0NCi0gICAgICAgPCFFTlRJVFkgJSB4aHRtbC1zeW1ib2wNCi0gICAgICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTeW1ib2xzIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAgICAgICAgInhodG1sLXN5bWJvbC5lbnQiID4NCi0gICAgICAgJXhodG1sLXN5bWJvbDsNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFN5bWJvbHMgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3ltYm9sLmVudCINCi0NCi0gICAgIFJldmlzaW9uOiAgJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFBvcnRpb25zIChDKSBJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIDE5ODY6DQotICAgICBQZXJtaXNzaW9uIHRvIGNvcHkgaW4gYW55IGZvcm0gaXMgZ3JhbnRlZCBmb3IgdXNlIHdpdGggY29uZm9ybWluZw0KLSAgICAgU0dNTCBzeXN0ZW1zIGFuZCBhcHBsaWNhdGlvbnMgYXMgZGVmaW5lZCBpbiBJU08gODg3OSwgcHJvdmlkZWQNCi0gICAgIHRoaXMgbm90aWNlIGlzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMuDQotLS0+DQotDQotPCEtLSBSZWxldmFudCBJU08gZW50aXR5IHNldCBpcyBnaXZlbiB1bmxlc3MgbmFtZXMgYXJlIG5ld2x5IGludHJvZHVjZWQuDQotICAgICBOZXcgbmFtZXMgKGkuZS4sIG5vdCBpbiBJU08gODg3OSBbU0dNTF0gbGlzdCkgZG8gbm90IGNsYXNoIHdpdGgNCi0gICAgIGFueSBleGlzdGluZyBJU08gODg3OSBlbnRpdHkgbmFtZXMuIElTTyAxMDY0NiBbSVNPMTA2NDZdIGNoYXJhY3Rlcg0KLSAgICAgbnVtYmVycyBhcmUgZ2l2ZW4gZm9yIGVhY2ggY2hhcmFjdGVyLCBpbiBoZXguIEVudGl0eSB2YWx1ZXMgYXJlDQotICAgICBkZWNpbWFsIGNvbnZlcnNpb25zIG9mIHRoZSBJU08gMTA2NDYgdmFsdWVzIGFuZCByZWZlciB0byB0aGUNCi0gICAgIGRvY3VtZW50IGNoYXJhY3RlciBzZXQuIE5hbWVzIGFyZSBVbmljb2RlIFtVTklDT0RFXSBuYW1lcy4NCi0tLT4NCi0NCi08IS0tIExhdGluIEV4dGVuZGVkLUIgLS0+DQotPCFFTlRJVFkgZm5vZiAgICAgIiYjNDAyOyIgPjwhLS0gbGF0aW4gc21hbGwgZiB3aXRoIGhvb2sgPSBmdW5jdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZmxvcmluLCBVKzAxOTIgSVNPdGVjaCAtLT4NCi0NCi08IS0tIEdyZWVrIC0tPg0KLTwhRU5USVRZIEFscGhhICAgICImIzkxMzsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGFscGhhLCBVKzAzOTEgLS0+DQotPCFFTlRJVFkgQmV0YSAgICAgIiYjOTE0OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgYmV0YSwgVSswMzkyIC0tPg0KLTwhRU5USVRZIEdhbW1hICAgICImIzkxNTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGdhbW1hLCBVKzAzOTMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBEZWx0YSAgICAiJiM5MTY7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBkZWx0YSwgVSswMzk0IElTT2dyazMgLS0+DQotPCFFTlRJVFkgRXBzaWxvbiAgIiYjOTE3OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgZXBzaWxvbiwgVSswMzk1IC0tPg0KLTwhRU5USVRZIFpldGEgICAgICImIzkxODsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHpldGEsIFUrMDM5NiAtLT4NCi08IUVOVElUWSBFdGEgICAgICAiJiM5MTk7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBldGEsIFUrMDM5NyAtLT4NCi08IUVOVElUWSBUaGV0YSAgICAiJiM5MjA7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB0aGV0YSwgVSswMzk4IElTT2dyazMgLS0+DQotPCFFTlRJVFkgSW90YSAgICAgIiYjOTIxOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgaW90YSwgVSswMzk5IC0tPg0KLTwhRU5USVRZIEthcHBhICAgICImIzkyMjsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGthcHBhLCBVKzAzOUEgLS0+DQotPCFFTlRJVFkgTGFtYmRhICAgIiYjOTIzOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgbGFtYmRhLCBVKzAzOUIgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBNdSAgICAgICAiJiM5MjQ7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBtdSwgVSswMzlDIC0tPg0KLTwhRU5USVRZIE51ICAgICAgICImIzkyNTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIG51LCBVKzAzOUQgLS0+DQotPCFFTlRJVFkgWGkgICAgICAgIiYjOTI2OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgeGksIFUrMDM5RSBJU09ncmszIC0tPg0KLTwhRU5USVRZIE9taWNyb24gICImIzkyNzsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIG9taWNyb24sIFUrMDM5RiAtLT4NCi08IUVOVElUWSBQaSAgICAgICAiJiM5Mjg7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBwaSwgVSswM0EwIElTT2dyazMgLS0+DQotPCFFTlRJVFkgUmhvICAgICAgIiYjOTI5OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgcmhvLCBVKzAzQTEgLS0+DQotPCEtLSB0aGVyZSBpcyBubyBTaWdtYWYsIGFuZCBubyBVKzAzQTIgY2hhcmFjdGVyIGVpdGhlciAtLT4NCi08IUVOVElUWSBTaWdtYSAgICAiJiM5MzE7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBzaWdtYSwgVSswM0EzIElTT2dyazMgLS0+DQotPCFFTlRJVFkgVGF1ICAgICAgIiYjOTMyOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgdGF1LCBVKzAzQTQgLS0+DQotPCFFTlRJVFkgVXBzaWxvbiAgIiYjOTMzOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgdXBzaWxvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVKzAzQTUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBQaGkgICAgICAiJiM5MzQ7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBwaGksIFUrMDNBNiBJU09ncmszIC0tPg0KLTwhRU5USVRZIENoaSAgICAgICImIzkzNTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGNoaSwgVSswM0E3IC0tPg0KLTwhRU5USVRZIFBzaSAgICAgICImIzkzNjsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHBzaSwgVSswM0E4IElTT2dyazMgLS0+DQotPCFFTlRJVFkgT21lZ2EgICAgIiYjOTM3OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgb21lZ2EsIFUrMDNBOSBJU09ncmszIC0tPg0KLTwhRU5USVRZIGFscGhhICAgICImIzk0NTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBhbHBoYSwgVSswM0IxIElTT2dyazMgLS0+DQotPCFFTlRJVFkgYmV0YSAgICAgIiYjOTQ2OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGJldGEsIFUrMDNCMiBJU09ncmszIC0tPg0KLTwhRU5USVRZIGdhbW1hICAgICImIzk0NzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBnYW1tYSwgVSswM0IzIElTT2dyazMgLS0+DQotPCFFTlRJVFkgZGVsdGEgICAgIiYjOTQ4OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGRlbHRhLCBVKzAzQjQgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBlcHNpbG9uICAiJiM5NDk7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgZXBzaWxvbiwgVSswM0I1IElTT2dyazMgLS0+DQotPCFFTlRJVFkgemV0YSAgICAgIiYjOTUwOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHpldGEsIFUrMDNCNiBJU09ncmszIC0tPg0KLTwhRU5USVRZIGV0YSAgICAgICImIzk1MTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBldGEsIFUrMDNCNyBJU09ncmszIC0tPg0KLTwhRU5USVRZIHRoZXRhICAgICImIzk1MjsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciB0aGV0YSwgVSswM0I4IElTT2dyazMgLS0+DQotPCFFTlRJVFkgaW90YSAgICAgIiYjOTUzOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGlvdGEsIFUrMDNCOSBJU09ncmszIC0tPg0KLTwhRU5USVRZIGthcHBhICAgICImIzk1NDsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBrYXBwYSwgVSswM0JBIElTT2dyazMgLS0+DQotPCFFTlRJVFkgbGFtYmRhICAgIiYjOTU1OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGxhbWJkYSwgVSswM0JCIElTT2dyazMgLS0+DQotPCFFTlRJVFkgbXUgICAgICAgIiYjOTU2OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIG11LCBVKzAzQkMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBudSAgICAgICAiJiM5NTc7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgbnUsIFUrMDNCRCBJU09ncmszIC0tPg0KLTwhRU5USVRZIHhpICAgICAgICImIzk1ODsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciB4aSwgVSswM0JFIElTT2dyazMgLS0+DQotPCFFTlRJVFkgb21pY3JvbiAgIiYjOTU5OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIG9taWNyb24sIFUrMDNCRiBORVcgLS0+DQotPCFFTlRJVFkgcGkgICAgICAgIiYjOTYwOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHBpLCBVKzAzQzAgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSByaG8gICAgICAiJiM5NjE7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgcmhvLCBVKzAzQzEgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBzaWdtYWYgICAiJiM5NjI7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgZmluYWwgc2lnbWEsIFUrMDNDMiBJU09ncmszIC0tPg0KLTwhRU5USVRZIHNpZ21hICAgICImIzk2MzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBzaWdtYSwgVSswM0MzIElTT2dyazMgLS0+DQotPCFFTlRJVFkgdGF1ICAgICAgIiYjOTY0OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHRhdSwgVSswM0M0IElTT2dyazMgLS0+DQotPCFFTlRJVFkgdXBzaWxvbiAgIiYjOTY1OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHVwc2lsb24sIFUrMDNDNSBJU09ncmszIC0tPg0KLTwhRU5USVRZIHBoaSAgICAgICImIzk2NjsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBwaGksIFUrMDNDNiBJU09ncmszIC0tPg0KLTwhRU5USVRZIGNoaSAgICAgICImIzk2NzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBjaGksIFUrMDNDNyBJU09ncmszIC0tPg0KLTwhRU5USVRZIHBzaSAgICAgICImIzk2ODsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBwc2ksIFUrMDNDOCBJU09ncmszIC0tPg0KLTwhRU5USVRZIG9tZWdhICAgICImIzk2OTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBvbWVnYSwgVSswM0M5IElTT2dyazMgLS0+DQotPCFFTlRJVFkgdGhldGFzeW0gIiYjOTc3OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHRoZXRhIHN5bWJvbCwgVSswM0QxIE5FVyAtLT4NCi08IUVOVElUWSB1cHNpaCAgICAiJiM5Nzg7IiA+PCEtLSBncmVlayB1cHNpbG9uIHdpdGggaG9vayBzeW1ib2wsIFUrMDNEMiBORVcgLS0+DQotPCFFTlRJVFkgcGl2ICAgICAgIiYjOTgyOyIgPjwhLS0gZ3JlZWsgcGkgc3ltYm9sLCBVKzAzRDYgSVNPZ3JrMyAtLT4NCi0NCi08IS0tIEdlbmVyYWwgUHVuY3R1YXRpb24gLS0+DQotPCFFTlRJVFkgYnVsbCAgICAgIiYjODIyNjsiID48IS0tIGJ1bGxldCA9IGJsYWNrIHNtYWxsIGNpcmNsZSwgVSsyMDIyIElTT3B1YiAgLS0+DQotPCEtLSBidWxsZXQgaXMgTk9UIHRoZSBzYW1lIGFzIGJ1bGxldCBvcGVyYXRvciwgVSsyMjE5IC0tPg0KLTwhRU5USVRZIGhlbGxpcCAgICImIzgyMzA7IiA+PCEtLSBob3Jpem9udGFsIGVsbGlwc2lzID0gdGhyZWUgZG90IGxlYWRlciwgVSsyMDI2IElTT3B1YiAgLS0+DQotPCFFTlRJVFkgcHJpbWUgICAgIiYjODI0MjsiID48IS0tIHByaW1lID0gbWludXRlcyA9IGZlZXQsIFUrMjAzMiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIFByaW1lICAgICImIzgyNDM7IiA+PCEtLSBkb3VibGUgcHJpbWUgPSBzZWNvbmRzID0gaW5jaGVzLCBVKzIwMzMgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBvbGluZSAgICAiJiM4MjU0OyIgPjwhLS0gb3ZlcmxpbmUgPSBzcGFjaW5nIG92ZXJzY29yZSwgVSsyMDNFIE5FVyAtLT4NCi08IUVOVElUWSBmcmFzbCAgICAiJiM4MjYwOyIgPjwhLS0gZnJhY3Rpb24gc2xhc2gsIFUrMjA0NCBORVcgLS0+DQotDQotPCEtLSBMZXR0ZXJsaWtlIFN5bWJvbHMgLS0+DQotPCFFTlRJVFkgd2VpZXJwICAgIiYjODQ3MjsiID48IS0tIHNjcmlwdCBjYXBpdGFsIFAgPSBwb3dlciBzZXQgPSBXZWllcnN0cmFzcyBwLCBVKzIxMTggSVNPYW1zbyAtLT4NCi08IUVOVElUWSBpbWFnZSAgICAiJiM4NDY1OyIgPjwhLS0gYmxhY2tsZXR0ZXIgY2FwaXRhbCBJID0gaW1hZ2luYXJ5IHBhcnQsIFUrMjExMSBJU09hbXNvIC0tPg0KLTwhRU5USVRZIHJlYWwgICAgICImIzg0NzY7IiA+PCEtLSBibGFja2xldHRlciBjYXBpdGFsIFIgPSByZWFsIHBhcnQgc3ltYm9sLCBVKzIxMUMgSVNPYW1zbyAtLT4NCi08IUVOVElUWSB0cmFkZSAgICAiJiM4NDgyOyIgPjwhLS0gdHJhZGUgbWFyayBzaWduLCBVKzIxMjIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGFsZWZzeW0gICImIzg1MDE7IiA+PCEtLSBhbGVmIHN5bWJvbCA9IGZpcnN0IHRyYW5zZmluaXRlIGNhcmRpbmFsLCBVKzIxMzUgTkVXIC0tPg0KLTwhLS0gYWxlZiBzeW1ib2wgaXMgTk9UIHRoZSBzYW1lIGFzIGhlYnJldyBsZXR0ZXIgYWxlZiwgVSswNUQwIGFsdGhvdWdoDQotICAgICB0aGUgc2FtZSBnbHlwaCBjb3VsZCBiZSB1c2VkIHRvIGRlcGljdCBib3RoIGNoYXJhY3RlcnMgLS0+DQotDQotPCEtLSBBcnJvd3MgLS0+DQotPCFFTlRJVFkgbGFyciAgICAgIiYjODU5MjsiID48IS0tIGxlZnR3YXJkcyBhcnJvdywgVSsyMTkwIElTT251bSAtLT4NCi08IUVOVElUWSB1YXJyICAgICAiJiM4NTkzOyIgPjwhLS0gdXB3YXJkcyBhcnJvdywgVSsyMTkxIElTT251bS0tPg0KLTwhRU5USVRZIHJhcnIgICAgICImIzg1OTQ7IiA+PCEtLSByaWdodHdhcmRzIGFycm93LCBVKzIxOTIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGRhcnIgICAgICImIzg1OTU7IiA+PCEtLSBkb3dud2FyZHMgYXJyb3csIFUrMjE5MyBJU09udW0gLS0+DQotPCFFTlRJVFkgaGFyciAgICAgIiYjODU5NjsiID48IS0tIGxlZnQgcmlnaHQgYXJyb3csIFUrMjE5NCBJU09hbXNhIC0tPg0KLTwhRU5USVRZIGNyYXJyICAgICImIzg2Mjk7IiA+PCEtLSBkb3dud2FyZHMgYXJyb3cgd2l0aCBjb3JuZXIgbGVmdHdhcmRzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gY2FycmlhZ2UgcmV0dXJuLCBVKzIxQjUgTkVXIC0tPg0KLTwhRU5USVRZIGxBcnIgICAgICImIzg2NTY7IiA+PCEtLSBsZWZ0d2FyZHMgZG91YmxlIGFycm93LCBVKzIxRDAgSVNPdGVjaCAtLT4NCi08IS0tIFVuaWNvZGUgZG9lcyBub3Qgc2F5IHRoYXQgbEFyciBpcyB0aGUgc2FtZSBhcyB0aGUgJ2lzIGltcGxpZWQgYnknIGFycm93DQotICAgIGJ1dCBhbHNvIGRvZXMgbm90IGhhdmUgYW55IG90aGVyIGNoYXJhY3RlciBmb3IgdGhhdCBmdW5jdGlvbi4gU28gPyBsQXJyIGNhbg0KLSAgICBiZSB1c2VkIGZvciAnaXMgaW1wbGllZCBieScgYXMgSVNPdGVjaCBzdWdnZXN0cyAtLT4NCi08IUVOVElUWSB1QXJyICAgICAiJiM4NjU3OyIgPjwhLS0gdXB3YXJkcyBkb3VibGUgYXJyb3csIFUrMjFEMSBJU09hbXNhIC0tPg0KLTwhRU5USVRZIHJBcnIgICAgICImIzg2NTg7IiA+PCEtLSByaWdodHdhcmRzIGRvdWJsZSBhcnJvdywgVSsyMUQyIElTT3RlY2ggLS0+DQotPCEtLSBVbmljb2RlIGRvZXMgbm90IHNheSB0aGlzIGlzIHRoZSAnaW1wbGllcycgY2hhcmFjdGVyIGJ1dCBkb2VzIG5vdCBoYXZlDQotICAgICBhbm90aGVyIGNoYXJhY3RlciB3aXRoIHRoaXMgZnVuY3Rpb24gc28gPw0KLSAgICAgckFyciBjYW4gYmUgdXNlZCBmb3IgJ2ltcGxpZXMnIGFzIElTT3RlY2ggc3VnZ2VzdHMgLS0+DQotPCFFTlRJVFkgZEFyciAgICAgIiYjODY1OTsiID48IS0tIGRvd253YXJkcyBkb3VibGUgYXJyb3csIFUrMjFEMyBJU09hbXNhIC0tPg0KLTwhRU5USVRZIGhBcnIgICAgICImIzg2NjA7IiA+PCEtLSBsZWZ0IHJpZ2h0IGRvdWJsZSBhcnJvdywgVSsyMUQ0IElTT2Ftc2EgLS0+DQotDQotPCEtLSBNYXRoZW1hdGljYWwgT3BlcmF0b3JzIC0tPg0KLTwhRU5USVRZIGZvcmFsbCAgICImIzg3MDQ7IiA+PCEtLSBmb3IgYWxsLCBVKzIyMDAgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBwYXJ0ICAgICAiJiM4NzA2OyIgPjwhLS0gcGFydGlhbCBkaWZmZXJlbnRpYWwsIFUrMjIwMiBJU090ZWNoICAtLT4NCi08IUVOVElUWSBleGlzdCAgICAiJiM4NzA3OyIgPjwhLS0gdGhlcmUgZXhpc3RzLCBVKzIyMDMgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBlbXB0eSAgICAiJiM4NzA5OyIgPjwhLS0gZW1wdHkgc2V0ID0gbnVsbCBzZXQgPSBkaWFtZXRlciwgVSsyMjA1IElTT2Ftc28gLS0+DQotPCFFTlRJVFkgbmFibGEgICAgIiYjODcxMTsiID48IS0tIG5hYmxhID0gYmFja3dhcmQgZGlmZmVyZW5jZSwgVSsyMjA3IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgaXNpbiAgICAgIiYjODcxMjsiID48IS0tIGVsZW1lbnQgb2YsIFUrMjIwOCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG5vdGluICAgICImIzg3MTM7IiA+PCEtLSBub3QgYW4gZWxlbWVudCBvZiwgVSsyMjA5IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgbmkgICAgICAgIiYjODcxNTsiID48IS0tIGNvbnRhaW5zIGFzIG1lbWJlciwgVSsyMjBCIElTT3RlY2ggLS0+DQotPCEtLSBzaG91bGQgdGhlcmUgYmUgYSBtb3JlIG1lbW9yYWJsZSBuYW1lIHRoYW4gJ25pJz8gLS0+DQotPCFFTlRJVFkgcHJvZCAgICAgIiYjODcxOTsiID48IS0tIG4tYXJ5IHByb2R1Y3QgPSBwcm9kdWN0IHNpZ24sIFUrMjIwRiBJU09hbXNiIC0tPg0KLTwhLS0gcHJvZCBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIFUrMDNBMCAnZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgcGknIHRob3VnaA0KLSAgICAgdGhlIHNhbWUgZ2x5cGggbWlnaHQgYmUgdXNlZCBmb3IgYm90aCAtLT4NCi08IUVOVElUWSBzdW0gICAgICAiJiM4NzIxOyIgPjwhLS0gbi1hcnkgc3VtYXRpb24sIFUrMjIxMSBJU09hbXNiIC0tPg0KLTwhLS0gc3VtIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgVSswM0EzICdncmVlayBjYXBpdGFsIGxldHRlciBzaWdtYScNCi0gICAgIHRob3VnaCB0aGUgc2FtZSBnbHlwaCBtaWdodCBiZSB1c2VkIGZvciBib3RoIC0tPg0KLTwhRU5USVRZIG1pbnVzICAgICImIzg3MjI7IiA+PCEtLSBtaW51cyBzaWduLCBVKzIyMTIgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBsb3dhc3QgICAiJiM4NzI3OyIgPjwhLS0gYXN0ZXJpc2sgb3BlcmF0b3IsIFUrMjIxNyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHJhZGljICAgICImIzg3MzA7IiA+PCEtLSBzcXVhcmUgcm9vdCA9IHJhZGljYWwgc2lnbiwgVSsyMjFBIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgcHJvcCAgICAgIiYjODczMzsiID48IS0tIHByb3BvcnRpb25hbCB0bywgVSsyMjFEIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgaW5maW4gICAgIiYjODczNDsiID48IS0tIGluZmluaXR5LCBVKzIyMUUgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBhbmcgICAgICAiJiM4NzM2OyIgPjwhLS0gYW5nbGUsIFUrMjIyMCBJU09hbXNvIC0tPg0KLTwhRU5USVRZIGFuZCAgICAgICImIzg3NDM7IiA+PCEtLSBsb2dpY2FsIGFuZCA9IHdlZGdlLCBVKzIyMjcgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBvciAgICAgICAiJiM4NzQ0OyIgPjwhLS0gbG9naWNhbCBvciA9IHZlZSwgVSsyMjI4IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgY2FwICAgICAgIiYjODc0NTsiID48IS0tIGludGVyc2VjdGlvbiA9IGNhcCwgVSsyMjI5IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgY3VwICAgICAgIiYjODc0NjsiID48IS0tIHVuaW9uID0gY3VwLCBVKzIyMkEgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBpbnQgICAgICAiJiM4NzQ3OyIgPjwhLS0gaW50ZWdyYWwsIFUrMjIyQiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHRoZXJlNCAgICImIzg3NTY7IiA+PCEtLSB0aGVyZWZvcmUsIFUrMjIzNCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHNpbSAgICAgICImIzg3NjQ7IiA+PCEtLSB0aWxkZSBvcGVyYXRvciA9IHZhcmllcyB3aXRoID0gc2ltaWxhciB0bywgVSsyMjNDIElTT3RlY2ggLS0+DQotPCEtLSB0aWxkZSBvcGVyYXRvciBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIHRoZSB0aWxkZSwgVSswMDdFLA0KLSAgICAgYWx0aG91Z2ggdGhlIHNhbWUgZ2x5cGggbWlnaHQgYmUgdXNlZCB0byByZXByZXNlbnQgYm90aCAgLS0+DQotPCFFTlRJVFkgY29uZyAgICAgIiYjODc3MzsiID48IS0tIGFwcHJveGltYXRlbHkgZXF1YWwgdG8sIFUrMjI0NSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGFzeW1wICAgICImIzg3NzY7IiA+PCEtLSBhbG1vc3QgZXF1YWwgdG8gPSBhc3ltcHRvdGljIHRvLCBVKzIyNDggSVNPYW1zciAtLT4NCi08IUVOVElUWSBuZSAgICAgICAiJiM4ODAwOyIgPjwhLS0gbm90IGVxdWFsIHRvLCBVKzIyNjAgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBlcXVpdiAgICAiJiM4ODAxOyIgPjwhLS0gaWRlbnRpY2FsIHRvLCBVKzIyNjEgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBsZSAgICAgICAiJiM4ODA0OyIgPjwhLS0gbGVzcy10aGFuIG9yIGVxdWFsIHRvLCBVKzIyNjQgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBnZSAgICAgICAiJiM4ODA1OyIgPjwhLS0gZ3JlYXRlci10aGFuIG9yIGVxdWFsIHRvLCBVKzIyNjUgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzdWIgICAgICAiJiM4ODM0OyIgPjwhLS0gc3Vic2V0IG9mLCBVKzIyODIgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzdXAgICAgICAiJiM4ODM1OyIgPjwhLS0gc3VwZXJzZXQgb2YsIFUrMjI4MyBJU090ZWNoIC0tPg0KLTwhLS0gbm90ZSB0aGF0IG5zdXAsICdub3QgYSBzdXBlcnNldCBvZiwgVSsyMjgzJyBpcyBub3QgY292ZXJlZCBieSB0aGUgU3ltYm9sDQotICAgICBmb250IGVuY29kaW5nIGFuZCBpcyBub3QgaW5jbHVkZWQuIFNob3VsZCBpdCBiZSwgZm9yIHN5bW1ldHJ5Pw0KLSAgICAgSXQgaXMgaW4gSVNPYW1zbiAgLS0+DQotPCFFTlRJVFkgbnN1YiAgICAgIiYjODgzNjsiID48IS0tIG5vdCBhIHN1YnNldCBvZiwgVSsyMjg0IElTT2Ftc24gLS0+DQotPCFFTlRJVFkgc3ViZSAgICAgIiYjODgzODsiID48IS0tIHN1YnNldCBvZiBvciBlcXVhbCB0bywgVSsyMjg2IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgc3VwZSAgICAgIiYjODgzOTsiID48IS0tIHN1cGVyc2V0IG9mIG9yIGVxdWFsIHRvLCBVKzIyODcgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBvcGx1cyAgICAiJiM4ODUzOyIgPjwhLS0gY2lyY2xlZCBwbHVzID0gZGlyZWN0IHN1bSwgVSsyMjk1IElTT2Ftc2IgLS0+DQotPCFFTlRJVFkgb3RpbWVzICAgIiYjODg1NTsiID48IS0tIGNpcmNsZWQgdGltZXMgPSB2ZWN0b3IgcHJvZHVjdCwgVSsyMjk3IElTT2Ftc2IgLS0+DQotPCFFTlRJVFkgcGVycCAgICAgIiYjODg2OTsiID48IS0tIHVwIHRhY2sgPSBvcnRob2dvbmFsIHRvID0gcGVycGVuZGljdWxhciwgVSsyMkE1IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgc2RvdCAgICAgIiYjODkwMTsiID48IS0tIGRvdCBvcGVyYXRvciwgVSsyMkM1IElTT2Ftc2IgLS0+DQotPCEtLSBkb3Qgb3BlcmF0b3IgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAwQjcgbWlkZGxlIGRvdCAtLT4NCi0NCi08IS0tIE1pc2NlbGxhbmVvdXMgVGVjaG5pY2FsIC0tPg0KLTwhRU5USVRZIGxjZWlsICAgICImIzg5Njg7IiA+PCEtLSBsZWZ0IGNlaWxpbmcgPSBhcGwgdXBzdGlsZSwgVSsyMzA4IElTT2Ftc2MgIC0tPg0KLTwhRU5USVRZIHJjZWlsICAgICImIzg5Njk7IiA+PCEtLSByaWdodCBjZWlsaW5nLCBVKzIzMDkgSVNPYW1zYyAgLS0+DQotPCFFTlRJVFkgbGZsb29yICAgIiYjODk3MDsiID48IS0tIGxlZnQgZmxvb3IgPSBhcGwgZG93bnN0aWxlLCBVKzIzMEEgSVNPYW1zYyAgLS0+DQotPCFFTlRJVFkgcmZsb29yICAgIiYjODk3MTsiID48IS0tIHJpZ2h0IGZsb29yLCBVKzIzMEIgSVNPYW1zYyAgLS0+DQotPCFFTlRJVFkgbGFuZyAgICAgIiYjOTAwMTsiID48IS0tIGxlZnQtcG9pbnRpbmcgYW5nbGUgYnJhY2tldCA9IGJyYSwgVSsyMzI5IElTT3RlY2ggLS0+DQotPCEtLSBsYW5nIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgVSswMDNDICdsZXNzIHRoYW4nDQotICAgICBvciBVKzIwMzkgJ3NpbmdsZSBsZWZ0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrJyAtLT4NCi08IUVOVElUWSByYW5nICAgICAiJiM5MDAyOyIgPjwhLS0gcmlnaHQtcG9pbnRpbmcgYW5nbGUgYnJhY2tldCA9IGtldCwgVSsyMzJBIElTT3RlY2ggLS0+DQotPCEtLSByYW5nIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgVSswMDNFICdncmVhdGVyIHRoYW4nDQotICAgICBvciBVKzIwM0EgJ3NpbmdsZSByaWdodC1wb2ludGluZyBhbmdsZSBxdW90YXRpb24gbWFyaycgLS0+DQotDQotPCEtLSBHZW9tZXRyaWMgU2hhcGVzIC0tPg0KLTwhRU5USVRZIGxveiAgICAgICImIzk2NzQ7IiA+PCEtLSBsb3plbmdlLCBVKzI1Q0EgSVNPcHViIC0tPg0KLQ0KLTwhLS0gTWlzY2VsbGFuZW91cyBTeW1ib2xzIC0tPg0KLTwhRU5USVRZIHNwYWRlcyAgICImIzk4MjQ7IiA+PCEtLSBibGFjayBzcGFkZSBzdWl0LCBVKzI2NjAgSVNPcHViIC0tPg0KLTwhLS0gYmxhY2sgaGVyZSBzZWVtcyB0byBtZWFuIGZpbGxlZCBhcyBvcHBvc2VkIHRvIGhvbGxvdyAtLT4NCi08IUVOVElUWSBjbHVicyAgICAiJiM5ODI3OyIgPjwhLS0gYmxhY2sgY2x1YiBzdWl0ID0gc2hhbXJvY2ssIFUrMjY2MyBJU09wdWIgLS0+DQotPCFFTlRJVFkgaGVhcnRzICAgIiYjOTgyOTsiID48IS0tIGJsYWNrIGhlYXJ0IHN1aXQgPSB2YWxlbnRpbmUsIFUrMjY2NSBJU09wdWIgLS0+DQotPCFFTlRJVFkgZGlhbXMgICAgIiYjOTgzMDsiID48IS0tIGJsYWNrIGRpYW1vbmQgc3VpdCwgVSsyNjY2IElTT3B1YiAtLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1zeW1ib2wuZW50IC0tPg0KLQ0KLQ0KLTwhRU5USVRZICUgeGh0bWwtc3BlY2lhbA0KLSAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3BlY2lhbCBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgInhodG1sLXNwZWNpYWwuZW50IiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWE1MLWNvbXBhdGlibGUgSVNPIFNwZWNpYWwgQ2hhcmFjdGVyIEVudGl0eSBTZXQgZm9yIFhIVE1MIC4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXNwZWNpYWwuZW50DQotDQotICAgICBUeXBpY2FsIGludm9jYXRpb246DQotDQotICAgICAgIDwhRU5USVRZICUgeGh0bWwtc3BlY2lhbA0KLSAgICAgICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFNwZWNpYWwgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICAgICAgICAieGh0bWwtc3BlY2lhbC5lbnQiID4NCi0gICAgICAgJXhodG1sLXNwZWNpYWw7DQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTcGVjaWFsIGZvciBYSFRNTC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXNwZWNpYWwuZW50Ig0KLQ0KLSAgICAgUmV2aXNpb246ICAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgUG9ydGlvbnMgKEMpIEludGVybmF0aW9uYWwgT3JnYW5pemF0aW9uIGZvciBTdGFuZGFyZGl6YXRpb24gMTk4NjoNCi0gICAgIFBlcm1pc3Npb24gdG8gY29weSBpbiBhbnkgZm9ybSBpcyBncmFudGVkIGZvciB1c2Ugd2l0aCBjb25mb3JtaW5nDQotICAgICBTR01MIHN5c3RlbXMgYW5kIGFwcGxpY2F0aW9ucyBhcyBkZWZpbmVkIGluIElTTyA4ODc5LCBwcm92aWRlZA0KLSAgICAgdGhpcyBub3RpY2UgaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcy4NCi0NCi0gICAgIFJldmlzaW9uczoNCi0yMDAwLTEwLTI4OiBhZGRlZCAmYXBvczsgYW5kIGFsdGVyZWQgWE1MIFByZWRlZmluZWQgRW50aXRpZXMgZm9yIGNvbXBhdGliaWxpdHkNCi0tLT4NCi0NCi08IS0tIFJlbGV2YW50IElTTyBlbnRpdHkgc2V0IGlzIGdpdmVuIHVubGVzcyBuYW1lcyBhcmUgbmV3bHkgaW50cm9kdWNlZC4NCi0gICAgIE5ldyBuYW1lcyAoaS5lLiwgbm90IGluIElTTyA4ODc5IFtTR01MXSBsaXN0KSBkbyBub3QgY2xhc2ggd2l0aA0KLSAgICAgYW55IGV4aXN0aW5nIElTTyA4ODc5IGVudGl0eSBuYW1lcy4gSVNPIDEwNjQ2IFtJU08xMDY0Nl0gY2hhcmFjdGVyDQotICAgICBudW1iZXJzIGFyZSBnaXZlbiBmb3IgZWFjaCBjaGFyYWN0ZXIsIGluIGhleC4gRW50aXR5IHZhbHVlcyBhcmUNCi0gICAgIGRlY2ltYWwgY29udmVyc2lvbnMgb2YgdGhlIElTTyAxMDY0NiB2YWx1ZXMgYW5kIHJlZmVyIHRvIHRoZQ0KLSAgICAgZG9jdW1lbnQgY2hhcmFjdGVyIHNldC4gTmFtZXMgYXJlIFVuaWNvZGUgW1VOSUNPREVdIG5hbWVzLg0KLS0tPg0KLQ0KLTwhLS0gQzAgQ29udHJvbHMgYW5kIEJhc2ljIExhdGluIC0tPg0KLTwhRU5USVRZIGx0ICAgICAgIiYjMzg7JiM2MDsiID48IS0tIGxlc3MtdGhhbiBzaWduLCBVKzAwM0MgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGd0ICAgICAgIiYjNjI7IiA+PCEtLSBncmVhdGVyLXRoYW4gc2lnbiwgVSswMDNFIElTT251bSAtLT4NCi08IUVOVElUWSBhbXAgICAgICImIzM4OyYjMzg7IiA+PCEtLSBhbXBlcnNhbmQsIFUrMDAyNiBJU09udW0gLS0+DQotPCFFTlRJVFkgYXBvcyAgICAiJiMzOTsiID48IS0tIGFwb3N0cm9waGUsIFUrMDAyNyBJU09udW0gLS0+DQotPCFFTlRJVFkgcXVvdCAgICAiJiMzNDsiID48IS0tIHF1b3RhdGlvbiBtYXJrID0gQVBMIHF1b3RlLCBVKzAwMjIgSVNPbnVtIC0tPg0KLQ0KLTwhLS0gTGF0aW4gRXh0ZW5kZWQtQSAtLT4NCi08IUVOVElUWSBPRWxpZyAgICImIzMzODsiID48IS0tIGxhdGluIGNhcGl0YWwgbGlnYXR1cmUgT0UsIFUrMDE1MiBJU09sYXQyIC0tPg0KLTwhRU5USVRZIG9lbGlnICAgIiYjMzM5OyIgPjwhLS0gbGF0aW4gc21hbGwgbGlnYXR1cmUgb2UsIFUrMDE1MyBJU09sYXQyIC0tPg0KLQ0KLTwhLS0gbGlnYXR1cmUgaXMgYSBtaXNub21lciwgdGhpcyBpcyBhIHNlcGFyYXRlIGNoYXJhY3RlciBpbiBzb21lIGxhbmd1YWdlcyAtLT4NCi08IUVOVElUWSBTY2Fyb24gICImIzM1MjsiID48IS0tIGxhdGluIGNhcGl0YWwgbGV0dGVyIFMgd2l0aCBjYXJvbiwgVSswMTYwIElTT2xhdDIgLS0+DQotPCFFTlRJVFkgc2Nhcm9uICAiJiMzNTM7IiA+PCEtLSBsYXRpbiBzbWFsbCBsZXR0ZXIgcyB3aXRoIGNhcm9uLCBVKzAxNjEgSVNPbGF0MiAtLT4NCi08IUVOVElUWSBZdW1sICAgICImIzM3NjsiID48IS0tIGxhdGluIGNhcGl0YWwgbGV0dGVyIFkgd2l0aCBkaWFlcmVzaXMsIFUrMDE3OCBJU09sYXQyIC0tPg0KLQ0KLTwhLS0gU3BhY2luZyBNb2RpZmllciBMZXR0ZXJzIC0tPg0KLTwhRU5USVRZIGNpcmMgICAgIiYjNzEwOyIgPjwhLS0gbW9kaWZpZXIgbGV0dGVyIGNpcmN1bWZsZXggYWNjZW50LCBVKzAyQzYgSVNPcHViIC0tPg0KLTwhRU5USVRZIHRpbGRlICAgIiYjNzMyOyIgPjwhLS0gc21hbGwgdGlsZGUsIFUrMDJEQyBJU09kaWEgLS0+DQotDQotPCEtLSBHZW5lcmFsIFB1bmN0dWF0aW9uIC0tPg0KLTwhRU5USVRZIGVuc3AgICAgIiYjODE5NDsiID48IS0tIGVuIHNwYWNlLCBVKzIwMDIgSVNPcHViIC0tPg0KLTwhRU5USVRZIGVtc3AgICAgIiYjODE5NTsiID48IS0tIGVtIHNwYWNlLCBVKzIwMDMgSVNPcHViIC0tPg0KLTwhRU5USVRZIHRoaW5zcCAgIiYjODIwMTsiID48IS0tIHRoaW4gc3BhY2UsIFUrMjAwOSBJU09wdWIgLS0+DQotPCFFTlRJVFkgenduaiAgICAiJiM4MjA0OyIgPjwhLS0gemVybyB3aWR0aCBub24tam9pbmVyLCBVKzIwMEMgTkVXIFJGQyAyMDcwIC0tPg0KLTwhRU5USVRZIHp3aiAgICAgIiYjODIwNTsiID48IS0tIHplcm8gd2lkdGggam9pbmVyLCBVKzIwMEQgTkVXIFJGQyAyMDcwIC0tPg0KLTwhRU5USVRZIGxybSAgICAgIiYjODIwNjsiID48IS0tIGxlZnQtdG8tcmlnaHQgbWFyaywgVSsyMDBFIE5FVyBSRkMgMjA3MCAtLT4NCi08IUVOVElUWSBybG0gICAgICImIzgyMDc7IiA+PCEtLSByaWdodC10by1sZWZ0IG1hcmssIFUrMjAwRiBORVcgUkZDIDIwNzAgLS0+DQotPCFFTlRJVFkgbmRhc2ggICAiJiM4MjExOyIgPjwhLS0gZW4gZGFzaCwgVSsyMDEzIElTT3B1YiAtLT4NCi08IUVOVElUWSBtZGFzaCAgICImIzgyMTI7IiA+PCEtLSBlbSBkYXNoLCBVKzIwMTQgSVNPcHViIC0tPg0KLTwhRU5USVRZIGxzcXVvICAgIiYjODIxNjsiID48IS0tIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMTggSVNPbnVtIC0tPg0KLTwhRU5USVRZIHJzcXVvICAgIiYjODIxNzsiID48IS0tIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyaywgVSsyMDE5IElTT251bSAtLT4NCi08IUVOVElUWSBzYnF1byAgICImIzgyMTg7IiA+PCEtLSBzaW5nbGUgbG93LTkgcXVvdGF0aW9uIG1hcmssIFUrMjAxQSBORVcgLS0+DQotPCFFTlRJVFkgbGRxdW8gICAiJiM4MjIwOyIgPjwhLS0gbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmssIFUrMjAxQyBJU09udW0gLS0+DQotPCFFTlRJVFkgcmRxdW8gICAiJiM4MjIxOyIgPjwhLS0gcmlnaHQgZG91YmxlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMUQgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGJkcXVvICAgIiYjODIyMjsiID48IS0tIGRvdWJsZSBsb3ctOSBxdW90YXRpb24gbWFyaywgVSsyMDFFIE5FVyAtLT4NCi08IUVOVElUWSBkYWdnZXIgICImIzgyMjQ7IiA+PCEtLSBkYWdnZXIsIFUrMjAyMCBJU09wdWIgLS0+DQotPCFFTlRJVFkgRGFnZ2VyICAiJiM4MjI1OyIgPjwhLS0gZG91YmxlIGRhZ2dlciwgVSsyMDIxIElTT3B1YiAtLT4NCi08IUVOVElUWSBwZXJtaWwgICImIzgyNDA7IiA+PCEtLSBwZXIgbWlsbGUgc2lnbiwgVSsyMDMwIElTT3RlY2ggLS0+DQotDQotPCEtLSBsc2FxdW8gaXMgcHJvcG9zZWQgYnV0IG5vdCB5ZXQgSVNPIHN0YW5kYXJkaXplZCAtLT4NCi08IUVOVElUWSBsc2FxdW8gICImIzgyNDk7IiA+PCEtLSBzaW5nbGUgbGVmdC1wb2ludGluZyBhbmdsZSBxdW90YXRpb24gbWFyaywgVSsyMDM5IElTTyBwcm9wb3NlZCAtLT4NCi08IS0tIHJzYXF1byBpcyBwcm9wb3NlZCBidXQgbm90IHlldCBJU08gc3RhbmRhcmRpemVkIC0tPg0KLTwhRU5USVRZIHJzYXF1byAgIiYjODI1MDsiID48IS0tIHNpbmdsZSByaWdodC1wb2ludGluZyBhbmdsZSBxdW90YXRpb24gbWFyaywgVSsyMDNBIElTTyBwcm9wb3NlZCAtLT4NCi08IUVOVElUWSBldXJvICAgICImIzgzNjQ7IiA+PCEtLSBldXJvIHNpZ24sIFUrMjBBQyBORVcgLS0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtc3BlY2lhbC5lbnQgLS0+DQotDQotDQotPCEtLSBlbmQgb2YgeGh0bWwtY2hhcmVudC0xLm1vZCAtLT4NCi0NCi08IS0tIA0KLQlXTUwgZG9jdW1lbnQgbW9kZWwNCi0tLT4NCi08IUVOVElUWSAlIHdtbC1tb2RlbC5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRU5USVRJRVMgV01MIDIuMCBEb2N1bWVudCBNb2RlbCAxLjAvL0VOIg0KLSAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbDIwLW1vZGVsLTEubW9kIj4NCi08IS0tIFdNTCAyLjAgRG9jdW1lbnQgTW9kZWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwyMC1tb2RlbC0xLm1vZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgMi4wIERvY3VtZW50IE1vZGVsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvZHRkL3dtbDIwLW1vZGVsLTEubW9kIg0KLSAgICAgIA0KLSAgICAgVGhpcyBtb2R1bGUgZGVzY3JpYmVzIHRoZSBncm91cGluZ3Mgb2YgZWxlbWVudHMgdGhhdCBtYWtlIHVwDQotICAgICBjb21tb24gY29udGVudCBtb2RlbHMgZm9yIFdNTCBhbmQgWEhUTUwgZWxlbWVudHMuDQotDQotICAgICBUaHJlZSBiYXNpYyBjb250ZW50IG1vZGVscyBhcmUgZGVjbGFyZWQ6DQotDQotICAgICAgICAgJUlubGluZS5taXg7ICBjaGFyYWN0ZXItbGV2ZWwgZWxlbWVudHMNCi0gICAgICAgICAlQmxvY2subWl4OyAgIGJsb2NrLWxpa2UgZWxlbWVudHMsIGVnLiwgcGFyYWdyYXBocyBhbmQgbGlzdHMNCi0gICAgICAgICAlRmxvdy5taXg7ICAgIGFueSBibG9jayBvciBpbmxpbmUgZWxlbWVudHMNCi0NCi0gICAgIEFueSBwYXJhbWV0ZXIgZW50aXRpZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUgbWF5IGJlIHVzZWQNCi0gICAgIHRvIGNyZWF0ZSBlbGVtZW50IGNvbnRlbnQgbW9kZWxzLCBidXQgdGhlIGFib3ZlIHRocmVlIGFyZQ0KLSAgICAgY29uc2lkZXJlZCAnZ2xvYmFsJyAoaW5zb2ZhciBhcyB0aGF0IHRlcm0gYXBwbGllcyBoZXJlKS4NCi0gICAgIA0KLSAgICAgICAgCSAgICAgDQotLS0+DQotPCEtLSANCi0JT3B0aW9uYWwgRWxlbWVudHMgaW4gaGVhZCAgDQotLS0+DQotPCFFTlRJVFkgJSBIZWFkT3B0cy5taXggIiggJW1ldGEucW5hbWU7IA0KLQkJfCAlbGluay5xbmFtZTsgDQotCQl8ICVzdHlsZS5xbmFtZTsgDQotCQl8ICVvYmplY3QucW5hbWU7IA0KLQkJfCAlYWNjZXNzLnFuYW1lOykqIj4NCi08IS0tIA0KLQlUYXNrIGVsZW1lbnRzDQotDQotCVVzZWQgZm9yIHRoZSBXTUwgZG8gYW5kIG9uZXZlbnQgZWxlbWVudHMNCi0tLT4NCi08IUVOVElUWSAlIFRhc2tzLmNsYXNzICIoJWdvLnFuYW1lOyANCi0JCXwgJXByZXYucW5hbWU7IA0KLQkJfCAlbm9vcC5xbmFtZTsgDQotCQl8ICVyZWZyZXNoLnFuYW1lOykiPg0KLTwhLS0gDQotCVRhc2tzIHdpdGhvdXQgbm9vcCBlbGVtZW50DQotDQotCVVzZWQgZm9yIHRoZSBXTUwgYW5jaG9yDQotLS0+DQotPCFFTlRJVFkgJSBUYXNrcy1ub25vb3AuY2xhc3MgIiVnby5xbmFtZTsgDQotCQl8ICVwcmV2LnFuYW1lOyANCi0JCXwgJXJlZnJlc2gucW5hbWU7Ij4NCi08IS0tDQotCURvIGVsZW1lbnQNCi0tLT4NCi08IUVOVElUWSAlIERvLmNsYXNzICIlZG8ucW5hbWU7Ij4NCi08IS0tIA0KLQlNaXNjZWxsYW5lb3VzIEVsZW1lbnRzICANCi0JDQotCVRoaXMgaXMgbm90IHVzZWQgZm9yIGFueXRoaW5nIHJpZ2h0IG5vdy4gDQotLS0+DQotPCFFTlRJVFkgJSBNaXNjLmNsYXNzICIiPg0KLTwhLS0gDQotCUlubGluZSBFbGVtZW50cyAgDQotLS0+DQotPCFFTlRJVFkgJSBJbmxTdHJ1Y3QuY2xhc3MgIiVici5xbmFtZTsgDQotCXwgJXNwYW4ucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubFBocmFzLmNsYXNzICJ8ICVlbS5xbmFtZTsgDQotCXwgJXN0cm9uZy5xbmFtZTsgDQotCXwgJWRmbi5xbmFtZTsgDQotCXwgJWNvZGUucW5hbWU7IA0KLQl8ICVzYW1wLnFuYW1lOyANCi0JfCAla2JkLnFuYW1lOyANCi0JfCAldmFyLnFuYW1lOyANCi0JfCAlY2l0ZS5xbmFtZTsgDQotICAgICAJfCAlYWJici5xbmFtZTsgDQotCXwgJWFjcm9ueW0ucW5hbWU7IA0KLQl8ICVxLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJbmxQcmVzLmNsYXNzICJ8ICVpLnFuYW1lOyANCi0JfCAlYi5xbmFtZTsgDQotCXwgJWJpZy5xbmFtZTsgDQotCXwgJXNtYWxsLnFuYW1lOw0KLQl8ICV1LnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJMThuLmNsYXNzICIiPg0KLTwhRU5USVRZICUgQW5jaG9yLmNsYXNzICJ8ICVhLnFuYW1lOyANCi0JfCAlYW5jaG9yLnFuYW1lOyB8ICVkby5xbmFtZTsiPg0KLTwhRU5USVRZICUgSW5sU3BlY2lhbC5jbGFzcyAifCAlaW1nLnFuYW1lOyANCi0JIHwgJW9iamVjdC5xbmFtZTsgDQotCXwgJWdldHZhci5xbmFtZTsiPg0KLTwhRU5USVRZICUgSW5sRm9ybS5jbGFzcyAifCAlaW5wdXQucW5hbWU7IA0KLQkgfCAlc2VsZWN0LnFuYW1lOyANCi0JIHwgJXRleHRhcmVhLnFuYW1lOw0KLSAgICAgICAgIHwgJWxhYmVsLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJbmxpbmUuZXh0cmEgIiI+DQotPCFFTlRJVFkgJSBJbmxpbmUuY2xhc3MgIiVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVJbmxQcmVzLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJUlubEZvcm0uY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsiPg0KLTwhRU5USVRZICUgSW5sTm9BbmNob3IuY2xhc3MgIiVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVJbmxQcmVzLmNsYXNzOw0KLSAgICAgICVJbmxTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVJbmxGb3JtLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7Ij4NCi08IUVOVElUWSAlIElubE5vQW5jaG9yLm1peCAiJUlubE5vQW5jaG9yLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCFFTlRJVFkgJSBJbmxpbmUubWl4ICIlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCEtLSANCi0JQmxvY2sgRWxlbWVudHMgIA0KLS0tPg0KLTwhRU5USVRZICUgSGVhZGluZy5jbGFzcyAiJWgxLnFuYW1lOyANCi0JfCAlaDIucW5hbWU7IA0KLQl8ICVoMy5xbmFtZTsgDQotCXwgJWg0LnFuYW1lOyANCi0JfCAlaDUucW5hbWU7IA0KLQl8ICVoNi5xbmFtZTsiPg0KLTwhRU5USVRZICUgTGlzdC5jbGFzcyAiJXVsLnFuYW1lOyANCi0JfCAlb2wucW5hbWU7IA0KLQl8ICVkbC5xbmFtZTsiPg0KLTwhRU5USVRZICUgVGFibGUuY2xhc3MgInwgJXRhYmxlLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBGb3JtLmNsYXNzICJ8ICVmb3JtLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBGaWVsZHNldC5jbGFzcyAifCAlZmllbGRzZXQucW5hbWU7Ij4NCi08IUVOVElUWSAlIEJsa1N0cnVjdC5jbGFzcyAiJXAucW5hbWU7IA0KLQl8ICVkaXYucW5hbWU7Ij4NCi08IUVOVElUWSAlIEJsa1BocmFzLmNsYXNzICJ8ICVwcmUucW5hbWU7IA0KLQkgfCAlYmxvY2txdW90ZS5xbmFtZTsgDQotCSB8ICVhZGRyZXNzLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBCbGtQcmVzLmNsYXNzICJ8ICVoci5xbmFtZTsiPg0KLTwhRU5USVRZICUgQmxrU3BlY2lhbC5jbGFzcyAiJVRhYmxlLmNsYXNzOw0KLSAgICAgICVGb3JtLmNsYXNzOw0KLSAgICAgICVGaWVsZHNldC5jbGFzczsiPg0KLTwhRU5USVRZICUgQmxvY2suZXh0cmEgIiI+DQotPCFFTlRJVFkgJSBCbG9jay5jbGFzcyAiJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotCSAlQmxrUHJlcy5jbGFzczsNCi0gICAgICAlQmxrU3BlY2lhbC5jbGFzczsNCi0gICAgICAlQmxvY2suZXh0cmE7Ij4NCi08IUVOVElUWSAlIEJsb2NrLm1peCAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbG9jay5jbGFzczsgICAgIA0KLSAgICAgIHwgJURvLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCFFTlRJVFkgJSBCbGtOb0Zvcm0ubWl4ICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgfCAldGFibGUucW5hbWU7DQotICAgICAgJUJsb2NrLmV4dHJhOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCEtLSANCi0JQWxsIENvbnRlbnQgRWxlbWVudHMgIA0KLS0tPg0KLTwhLS0gDQotCWRlY2xhcmVzIGFsbCBjb250ZW50IGV4Y2VwdCB0YWJsZXMNCi0tLT4NCi08IUVOVElUWSAlIEZsb3dOb1RhYmxlLm1peCAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVGb3JtLmNsYXNzOw0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICB8ICVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IUVOVElUWSAlIEZsb3cubWl4ICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsb2NrLmNsYXNzOw0KLSAgICAgIHwgJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhLS0gCQ0KLQlUZW1wbGF0ZSBsZXZlbCBlbGVtZW50cyANCi0tLT4NCi08IUVOVElUWSAlIFRlbXBsYXRlLm1peCAiKCAlb25ldmVudC5xbmFtZTspKiI+DQotPCEtLSANCi0JQ29udGVudCBtb2RlbCBvZiB0aGUgV01MIGNhcmQgYW5kIFhIVE1MIGJvZHkgZWxlbWVudHMNCi0tLT4NCi08IUVOVElUWSAlIENhcmRCb2R5Lm1peCAiKCVvbmV2ZW50LnFuYW1lOyosICV0aW1lci5xbmFtZTs/LCAgKCAlQmxvY2subWl4OyApKykiPg0KLTwhLS0gZW5kIG9mIHdtbDIwLW1vZGVsLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJWEhUTUwgbW9kdWxlcyANCi0tLT4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gVGV4dCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgcHJlLmNvbnRlbnQgIiggI1BDREFUQQ0KLSAgICAgIHwgJUlubFN0cnVjdC5jbGFzczsgfCAlaS5xbmFtZTsgfCAlYi5xbmFtZTsgDQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsgDQotCXwgJWdldHZhci5xbmFtZTsNCi0JfCAlaW5wdXQucW5hbWU7fCAlc2VsZWN0LnFuYW1lOykqIj4NCi08IUVOVElUWSAlIHAuY29udGVudCAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7IHwgJXRhYmxlLnFuYW1lOyB8ICVmaWVsZHNldC5xbmFtZTspKiI+DQotPCFFTlRJVFkgJSB4aHRtbC10ZXh0Lm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgVGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtdGV4dC0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgVGV4dCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXRleHQtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFRleHQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtdGV4dC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBUZXh0dWFsIENvbnRlbnQNCi0NCi0gICAgIFRoZSBUZXh0IG1vZHVsZSBpbmNsdWRlcyBkZWNsYXJhdGlvbnMgZm9yIGFsbCBjb3JlDQotICAgICB0ZXh0IGNvbnRhaW5lciBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWlubHN0cnVjdC5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtaW5sc3RydWN0Lm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1pbmxzdHJ1Y3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFN0cnVjdHVyYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtaW5sc3RydWN0LTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSW5saW5lIFN0cnVjdHVyYWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWlubHN0cnVjdC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFN0cnVjdHVyYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW5sc3RydWN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIElubGluZSBTdHJ1Y3R1cmFsDQotDQotICAgICAgICBiciwgc3Bhbg0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzDQotICAgICB1c2VkIHRvIHN1cHBvcnQgaW5saW5lLWxldmVsIHN0cnVjdHVyYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhLS0gYnI6IGZvcmNlZCBsaW5lIGJyZWFrIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYnIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYnIuZWxlbWVudDtbDQotDQotPCFFTlRJVFkgJSBici5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIGJyLnFuYW1lICAiYnIiID4NCi08IUVMRU1FTlQgJWJyLnFuYW1lOyAgJWJyLmNvbnRlbnQ7ID4NCi0NCi08IS0tIGVuZCBvZiBici5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYnIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYnIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVici5xbmFtZTsNCi0gICAgICAlQ29yZS5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGJyLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBzcGFuOiBnZW5lcmljIGlubGluZSBjb250YWluZXIgLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBzcGFuLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXNwYW4uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzcGFuLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc3Bhbi5xbmFtZSAgInNwYW4iID4NCi08IUVMRU1FTlQgJXNwYW4ucW5hbWU7ICAlc3Bhbi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3Bhbi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3Bhbi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzcGFuLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3Bhbi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc3Bhbi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWlubHN0cnVjdC0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWlubHBocmFzLm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1pbmxwaHJhcy5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtaW5scGhyYXMubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFBocmFzYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtaW5scGhyYXMtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbmxpbmUgUGhyYXNhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW5scGhyYXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQaHJhc2FsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHBocmFzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIElubGluZSBQaHJhc2FsDQotDQotICAgICAgICBhYmJyLCBhY3JvbnltLCBjaXRlLCBjb2RlLCBkZm4sIGVtLCBrYmQsIHEsIHNhbXAsIHN0cm9uZywgdmFyDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBpbmxpbmUtbGV2ZWwgcGhyYXNhbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBhYmJyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWFiYnIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBhYmJyLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYWJici5xbmFtZSAgImFiYnIiID4NCi08IUVMRU1FTlQgJWFiYnIucW5hbWU7ICAlYWJici5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYWJici5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYWJici5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVhYmJyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYWJici5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYWJici5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYWNyb255bS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVhY3JvbnltLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYWNyb255bS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGFjcm9ueW0ucW5hbWUgICJhY3JvbnltIiA+DQotPCFFTEVNRU5UICVhY3JvbnltLnFuYW1lOyAgJWFjcm9ueW0uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGFjcm9ueW0uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGFjcm9ueW0uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYWNyb255bS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWFjcm9ueW0ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGFjcm9ueW0uYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNpdGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslY2l0ZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGNpdGUuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBjaXRlLnFuYW1lICAiY2l0ZSIgPg0KLTwhRUxFTUVOVCAlY2l0ZS5xbmFtZTsgICVjaXRlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBjaXRlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBjaXRlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWNpdGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVjaXRlLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBjaXRlLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBjb2RlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWNvZGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBjb2RlLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgY29kZS5xbmFtZSAgImNvZGUiID4NCi08IUVMRU1FTlQgJWNvZGUucW5hbWU7ICAlY29kZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgY29kZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgY29kZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVjb2RlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlY29kZS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgY29kZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGZuLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWRmbi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGRmbi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGRmbi5xbmFtZSAgImRmbiIgPg0KLTwhRUxFTUVOVCAlZGZuLnFuYW1lOyAgJWRmbi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZGZuLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkZm4uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZGZuLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZGZuLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBkZm4uYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGVtLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWVtLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZW0uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBlbS5xbmFtZSAgImVtIiA+DQotPCFFTEVNRU5UICVlbS5xbmFtZTsgICVlbS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZW0uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGVtLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWVtLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZW0ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGVtLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBrYmQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsla2JkLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUga2JkLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUga2JkLnFuYW1lICAia2JkIiA+DQotPCFFTEVNRU5UICVrYmQucW5hbWU7ICAla2JkLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBrYmQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGtiZC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVrYmQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVrYmQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGtiZC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVxLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgcS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHEucW5hbWUgICJxIiA+DQotPCFFTEVNRU5UICVxLnFuYW1lOyAgJXEuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHEuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHEuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslcS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXEucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgY2l0ZSAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBxLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzYW1wLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXNhbXAuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzYW1wLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc2FtcC5xbmFtZSAgInNhbXAiID4NCi08IUVMRU1FTlQgJXNhbXAucW5hbWU7ICAlc2FtcC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc2FtcC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc2FtcC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzYW1wLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc2FtcC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc2FtcC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3Ryb25nLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXN0cm9uZy5lbGVtZW50O1sNCi08IUVOVElUWSAlIHN0cm9uZy5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHN0cm9uZy5xbmFtZSAgInN0cm9uZyIgPg0KLTwhRUxFTUVOVCAlc3Ryb25nLnFuYW1lOyAgJXN0cm9uZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3Ryb25nLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdHJvbmcuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3Ryb25nLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3Ryb25nLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzdHJvbmcuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHZhci5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV2YXIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB2YXIuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSB2YXIucW5hbWUgICJ2YXIiID4NCi08IUVMRU1FTlQgJXZhci5xbmFtZTsgICV2YXIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHZhci5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdmFyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXZhci5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXZhci5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdmFyLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW5scGhyYXMtMS5tb2QgLS0+DQotXV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1ibGtzdHJ1Y3QubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWJsa3N0cnVjdC5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtYmxrc3RydWN0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFN0cnVjdHVyYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtYmxrc3RydWN0LTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQmxvY2sgU3RydWN0dXJhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJsa3N0cnVjdC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgU3RydWN0dXJhbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtzdHJ1Y3QtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmxvY2sgU3RydWN0dXJhbA0KLQ0KLSAgICAgICAgZGl2LCBwDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgdXNlZCB0bw0KLSAgICAgc3VwcG9ydCBibG9jay1sZXZlbCBzdHJ1Y3R1cmFsIG1hcmt1cC4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGRpdi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkaXYuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBkaXYuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVGbG93Lm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgZGl2LnFuYW1lICAiZGl2IiA+DQotPCFFTEVNRU5UICVkaXYucW5hbWU7ICAlZGl2LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkaXYuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRpdi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVkaXYuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkaXYucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGRpdi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVwLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgcC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIiA+DQotPCFFTlRJVFkgJSBwLnFuYW1lICAicCIgPg0KLTwhRUxFTUVOVCAlcC5xbmFtZTsgICVwLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBwLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXAuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVwLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBwLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmxrc3RydWN0LTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtYmxrcGhyYXMubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWJsa3BocmFzLm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1ibGtwaHJhcy5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBQaHJhc2FsIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWJsa3BocmFzLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQmxvY2sgUGhyYXNhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJsa3BocmFzLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBQaHJhc2FsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJsa3BocmFzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJsb2NrIFBocmFzYWwNCi0NCi0gICAgICAgIGFkZHJlc3MsIGJsb2NrcXVvdGUsIHByZSwgaDEsIGgyLCBoMywgaDQsIGg1LCBoNg0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIHVzZWQgdG8NCi0gICAgIHN1cHBvcnQgYmxvY2stbGV2ZWwgcGhyYXNhbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBhZGRyZXNzLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWFkZHJlc3MuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBhZGRyZXNzLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiID4NCi08IUVOVElUWSAlIGFkZHJlc3MucW5hbWUgICJhZGRyZXNzIiA+DQotPCFFTEVNRU5UICVhZGRyZXNzLnFuYW1lOyAgJWFkZHJlc3MuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGFkZHJlc3MuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGFkZHJlc3MuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYWRkcmVzcy5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWFkZHJlc3MucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGFkZHJlc3MuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJsb2NrcXVvdGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYmxvY2txdW90ZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGJsb2NrcXVvdGUuY29udGVudA0KLSAgICAgIiggJUJsb2NrLm1peDsgKSsiDQotPg0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5xbmFtZSAgImJsb2NrcXVvdGUiID4NCi08IUVMRU1FTlQgJWJsb2NrcXVvdGUucW5hbWU7ICAlYmxvY2txdW90ZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYmxvY2txdW90ZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYmxvY2txdW90ZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVibG9ja3F1b3RlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYmxvY2txdW90ZS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBjaXRlICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGJsb2NrcXVvdGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHByZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVwcmUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBwcmUuY29udGVudA0KLSAgICAgIiggI1BDREFUQQ0KLSAgICAgIHwgJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgfCAldHQucW5hbWU7IHwgJWkucW5hbWU7IHwgJWIucW5hbWU7DQotICAgICAgJUkxOG4uY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICB8ICVzY3JpcHQucW5hbWU7IHwgJW1hcC5xbmFtZTsNCi0gICAgICAlSW5saW5lLmV4dHJhOyApKiINCi0+DQotPCFFTlRJVFkgJSBwcmUucW5hbWUgICJwcmUiID4NCi08IUVMRU1FTlQgJXByZS5xbmFtZTsgICVwcmUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHByZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcHJlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXByZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXByZS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICB4bWw6c3BhY2UgICAgKCBwcmVzZXJ2ZSApICAgICAgICAgICAgICNGSVhFRCAncHJlc2VydmUnDQotPg0KLTwhLS0gZW5kIG9mIHByZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLiAgSGVhZGluZyBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIEhlYWRpbmcuY29udGVudCAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiIgPg0KLQ0KLTwhRU5USVRZICUgaDEuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDEuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoMS5xbmFtZSAgImgxIiA+DQotPCFFTEVNRU5UICVoMS5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoMS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDEuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDEuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoMS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWgyLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDIucW5hbWUgICJoMiIgPg0KLTwhRUxFTUVOVCAlaDIucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWgyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGgyLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoMy5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoMy5lbGVtZW50O1sNCi08IUVOVElUWSAlIGgzLnFuYW1lICAiaDMiID4NCi08IUVMRU1FTlQgJWgzLnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGgzLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoMy5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoMy5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWgzLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoMy5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoNC5xbmFtZSAgImg0IiA+DQotPCFFTEVNRU5UICVoNC5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoNC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoNC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg1LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWg1LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDUucW5hbWUgICJoNSIgPg0KLTwhRUxFTUVOVCAlaDUucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg1LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWg1LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGg1LmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoNi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGg2LnFuYW1lICAiaDYiID4NCi08IUVMRU1FTlQgJWg2LnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGg2LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoNi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWg2LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoNi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJsa3BocmFzLTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXRleHQtMS5tb2QgLS0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1oeXBlcnRleHQubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBIeXBlcnRleHQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWh5cGVydGV4dC0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSHlwZXJ0ZXh0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWh5cGVydGV4dC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSHlwZXJ0ZXh0IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWh5cGVydGV4dC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBIeXBlcnRleHQNCi0NCi0gICAgICAgIGENCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBhbmNob3IgKCdhJykgZWxlbWVudCB0eXBlLCB3aGljaA0KLSAgICAgZGVmaW5lcyB0aGUgc291cmNlIG9mIGEgaHlwZXJ0ZXh0IGxpbmsuIFRoZSBkZXN0aW5hdGlvbg0KLSAgICAgKG9yIGxpbmsgJ3RhcmdldCcpIGlzIGlkZW50aWZpZWQgdmlhIGl0cyAnaWQnIGF0dHJpYnV0ZQ0KLSAgICAgcmF0aGVyIHRoYW4gdGhlICduYW1lJyBhdHRyaWJ1dGUgYXMgd2FzIHVzZWQgaW4gSFRNTC4NCi0tLT4NCi0NCi08IS0tIC4uLi4uLi4uLi4uLiAgQW5jaG9yIEVsZW1lbnQgIC4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGEuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGEuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxOb0FuY2hvci5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGEucW5hbWUgICJhIiA+DQotPCFFTEVNRU5UICVhLnFuYW1lOyAgJWEuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGEuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGEuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWEucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgaHJlZiAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGNoYXJzZXQgICAgICAlQ2hhcnNldC5kYXRhdHlwZTsgICAgICAgI0lNUExJRUQNCi0gICAgICB0eXBlICAgICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotICAgICAgaHJlZmxhbmcgICAgICVMYW5ndWFnZUNvZGUuZGF0YXR5cGU7ICAjSU1QTElFRA0KLSAgICAgIHJlbCAgICAgICAgICAlTGlua1R5cGVzLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICByZXYgICAgICAgICAgJUxpbmtUeXBlcy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgYWNjZXNza2V5ICAgICVDaGFyYWN0ZXIuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIHRhYmluZGV4ICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgYS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWh5cGVydGV4dC0xLm1vZCAtLT4NCi0NCi08IS0tIExpc3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWxpc3QubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaXN0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGlzdC0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTGlzdHMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWxpc3QtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpc3RzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpc3QtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTGlzdHMNCi0NCi0gICAgICAgIGRsLCBkdCwgZGQsIG9sLCB1bCwgbGkNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBsaXN0LW9yaWVudGVkIGVsZW1lbnQgdHlwZXMNCi0gICAgIGFuZCB0aGVpciBhdHRyaWJ1dGVzLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgZGwucW5hbWUgICJkbCIgPg0KLTwhRU5USVRZICUgZHQucW5hbWUgICJkdCIgPg0KLTwhRU5USVRZICUgZGQucW5hbWUgICJkZCIgPg0KLTwhRU5USVRZICUgb2wucW5hbWUgICJvbCIgPg0KLTwhRU5USVRZICUgdWwucW5hbWUgICJ1bCIgPg0KLTwhRU5USVRZICUgbGkucW5hbWUgICJsaSIgPg0KLQ0KLTwhLS0gZGw6IERlZmluaXRpb24gTGlzdCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgZGwuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZGwuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBkbC5jb250ZW50ICAiKCAlZHQucW5hbWU7IHwgJWRkLnFuYW1lOyApKyIgPg0KLTwhRUxFTUVOVCAlZGwucW5hbWU7ICAlZGwuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGRsLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkbC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVkbC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWRsLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBkbC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZHQ6IERlZmluaXRpb24gVGVybSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgZHQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZHQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBkdC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJWR0LnFuYW1lOyAgJWR0LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBkdC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZHQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZHQuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVkdC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZHQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGRkOiBEZWZpbml0aW9uIERlc2NyaXB0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGRkLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWRkLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZGQuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVGbG93Lm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAlZGQucW5hbWU7ICAlZGQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGRkLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkZC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVkZC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWRkLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBkZC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gb2w6IE9yZGVyZWQgTGlzdCAobnVtYmVyZWQgc3R5bGVzKSAuLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgb2wuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslb2wuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBvbC5jb250ZW50ICAiKCAlbGkucW5hbWU7ICkrIiA+DQotPCFFTEVNRU5UICVvbC5xbmFtZTsgICVvbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygb2wuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIG9sLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJW9sLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlb2wucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIG9sLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSB1bDogVW5vcmRlcmVkIExpc3QgKGJ1bGxldCBzdHlsZXMpIC4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB1bC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV1bC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHVsLmNvbnRlbnQgICIoICVsaS5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJXVsLnFuYW1lOyAgJXVsLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB1bC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdWwuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldWwuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV1bC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdWwuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGxpOiBMaXN0IEl0ZW0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGxpLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWxpLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgbGkuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVGbG93Lm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAlbGkucW5hbWU7ICAlbGkuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGxpLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBsaS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVsaS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWxpLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBsaS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWxpc3QtMS5tb2QgLS0+DQotDQotPCEtLSBFeHRlbmQgbGlzdHMgd2l0aCB2YWx1ZSBhbmQgc3RhcnQgYXR0cmlidXRlcyAtLT4gDQotPCFBVFRMSVNUICVsaS5xbmFtZTsNCi0gICAgICB2YWx1ZSAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICAjSU1QTElFRA0KLT4NCi08IUFUVExJU1QgJW9sLnFuYW1lOw0KLSAgICAgIHN0YXJ0ICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBJbWFnZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtaW1hZ2UubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbWFnZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWltYWdlLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbWFnZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW1hZ2UtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSb3Zpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEltYWdlcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbWFnZS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBJbWFnZXMNCi0NCi0gICAgICAgIGltZw0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgbWFya3VwIHRvIHN1cHBvcnQgYmFzaWMgaW1hZ2UgZW1iZWRkaW5nLg0KLS0tPg0KLQ0KLTwhLS0gVG8gYXZvaWQgcHJvYmxlbXMgd2l0aCB0ZXh0LW9ubHkgVUFzIGFzIHdlbGwgYXMgdG8gbWFrZQ0KLSAgICAgaW1hZ2UgY29udGVudCB1bmRlcnN0YW5kYWJsZSBhbmQgbmF2aWdhYmxlIHRvIHVzZXJzIG9mDQotICAgICBub24tdmlzdWFsIFVBcywgeW91IG5lZWQgdG8gcHJvdmlkZSBhIGRlc2NyaXB0aW9uIHdpdGgNCi0gICAgIHRoZSAnYWx0JyBhdHRyaWJ1dGUsIGFuZCBhdm9pZCBzZXJ2ZXItc2lkZSBpbWFnZSBtYXBzLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgaW1nLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWltZy5lbGVtZW50O1sNCi08IUVOVElUWSAlIGltZy5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIGltZy5xbmFtZSAgImltZyIgPg0KLTwhRUxFTUVOVCAlaW1nLnFuYW1lOyAgJWltZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaW1nLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBpbWcuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaW1nLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaW1nLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHNyYyAgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgYWx0ICAgICAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBsb25nZGVzYyAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgaGVpZ2h0ICAgICAgICVMZW5ndGguZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIHdpZHRoICAgICAgICAlTGVuZ3RoLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgaW1nLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW1hZ2UtMS5tb2QgLS0+DQotDQotPCEtLSBQYXJhbSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtcGFyYW0ubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBQYXJhbSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1wYXJhbS0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgUGFyYW0gRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1wYXJhbS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgUGFyYW0gRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1wYXJhbS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBQYXJhbWV0ZXJzIGZvciBKYXZhIEFwcGxldHMgYW5kIEVtYmVkZGVkIE9iamVjdHMNCi0NCi0gICAgICAgIHBhcmFtDQotDQotICAgICBUaGlzIG1vZHVsZSBwcm92aWRlcyBkZWNsYXJhdGlvbnMgZm9yIHRoZSBwYXJhbSBlbGVtZW50LA0KLSAgICAgdXNlZCB0byBwcm92aWRlIG5hbWVkIHByb3BlcnR5IHZhbHVlcyBmb3IgdGhlIGFwcGxldA0KLSAgICAgYW5kIG9iamVjdCBlbGVtZW50cy4NCi0tLT4NCi0NCi08IS0tIHBhcmFtOiBOYW1lZCBQcm9wZXJ0eSBWYWx1ZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHBhcmFtLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXBhcmFtLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgcGFyYW0uY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBwYXJhbS5xbmFtZSAgInBhcmFtIiA+DQotPCFFTEVNRU5UICVwYXJhbS5xbmFtZTsgICVwYXJhbS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgcGFyYW0uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHBhcmFtLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXBhcmFtLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlcGFyYW0ucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlaWQuYXR0cmliOw0KLSAgICAgIG5hbWUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgdmFsdWUgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHZhbHVldHlwZSAgICAoIGRhdGEgfCByZWYgfCBvYmplY3QgKSAgJ2RhdGEnDQotICAgICAgdHlwZSAgICAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBwYXJhbS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXBhcmFtLTEubW9kIC0tPg0KLQ0KLTwhLS0gRW1iZWRkZWQgT2JqZWN0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW9iamVjdC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEVtYmVkZGVkIE9iamVjdCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtb2JqZWN0LTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBFbWJlZGRlZCBPYmplY3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtb2JqZWN0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBFbWJlZGRlZCBPYmplY3QgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtb2JqZWN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEVtYmVkZGVkIE9iamVjdHMNCi0NCi0gICAgICAgIG9iamVjdA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIG9iamVjdCBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLCB1c2VkDQotICAgICB0byBlbWJlZCBleHRlcm5hbCBvYmplY3RzIGFzIHBhcnQgb2YgWEhUTUwgcGFnZXMuIEluIHRoZSBkb2N1bWVudCwNCi0gICAgIHBsYWNlIHBhcmFtIGVsZW1lbnRzIHByaW9yIHRvIG90aGVyIGNvbnRlbnQgd2l0aGluIHRoZSBvYmplY3QgZWxlbWVudC4NCi0NCi0gICAgIE5vdGUgdGhhdCB1c2Ugb2YgdGhpcyBtb2R1bGUgcmVxdWlyZXMgaW5zdGFudGlhdGlvbiBvZiB0aGUgUGFyYW0NCi0gICAgIEVsZW1lbnQgTW9kdWxlLg0KLS0tPg0KLQ0KLTwhLS0gb2JqZWN0OiBHZW5lcmljIEVtYmVkZGVkIE9iamVjdCAuLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgb2JqZWN0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJW9iamVjdC5lbGVtZW50O1sNCi08IUVOVElUWSAlIG9iamVjdC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3cubWl4OyB8ICVwYXJhbS5xbmFtZTsgKSoiDQotPg0KLTwhRU5USVRZICUgb2JqZWN0LnFuYW1lICAib2JqZWN0IiA+DQotPCFFTEVNRU5UICVvYmplY3QucW5hbWU7ICAlb2JqZWN0LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBvYmplY3QuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIG9iamVjdC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVvYmplY3QuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVvYmplY3QucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgZGVjbGFyZSAgICAgICggZGVjbGFyZSApICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGNsYXNzaWQgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBjb2RlYmFzZSAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgZGF0YSAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI0lNUExJRUQNCi0gICAgICBjb2RldHlwZSAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotICAgICAgYXJjaGl2ZSAgICAgICVVUklzLmRhdGF0eXBlOyAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHN0YW5kYnkgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBoZWlnaHQgICAgICAgJUxlbmd0aC5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgd2lkdGggICAgICAgICVMZW5ndGguZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIG5hbWUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB0YWJpbmRleCAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIG9iamVjdC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLW9iamVjdC0xLm1vZCAtLT4NCi0NCi08IS0tIFRhYmxlcyBNb2R1bGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC10YWJsZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIFRhYmxlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtdGFibGUtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCYXNpYyBUYWJsZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJhc2ljLXRhYmxlLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MIEJhc2ljLCBhIHByb3BlciBzdWJzZXQgb2YgWEhUTUwuDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIFRhYmxlcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy10YWJsZS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCYXNpYyBUYWJsZXMNCi0NCi0gICAgICAgIHRhYmxlLCBjYXB0aW9uLCB0ciwgdGgsIHRkDQotDQotICAgICBUaGlzIHRhYmxlIG1vZHVsZSBkZWNsYXJlcyBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyBkZWZpbmluZw0KLSAgICAgYSB0YWJsZSBtb2RlbCBiYXNlZCBmdW5kYW1lbnRhbGx5IG9uIGZlYXR1cmVzIGZvdW5kIGluIHRoZQ0KLSAgICAgd2lkZWx5LWRlcGxveWVkIEhUTUwgMy4yIHRhYmxlIG1vZGVsLiAgV2hpbGUgdGhpcyBtb2R1bGUNCi0gICAgIG1pbWljcyB0aGUgY29udGVudCBtb2RlbCBhbmQgdGFibGUgYXR0cmlidXRlcyBvZiBIVE1MIDMuMg0KLSAgICAgdGFibGVzLCB0aGUgZWxlbWVudCB0eXBlcyBkZWNsYXJlZCBoZXJlaW4gYWxzbyBpbmNsdWRlcyBhbGwNCi0gICAgIEhUTUwgNCBjb21tb24gYW5kIG1vc3Qgb2YgdGhlIEhUTUwgNCB0YWJsZSBhdHRyaWJ1dGVzLg0KLS0tPg0KLQ0KLTwhLS0gZGVjbGFyZSBxdWFsaWZpZWQgZWxlbWVudCB0eXBlIG5hbWVzOg0KLS0tPg0KLTwhRU5USVRZICUgdGFibGUucW5hbWUgICJ0YWJsZSIgPg0KLTwhRU5USVRZICUgY2FwdGlvbi5xbmFtZSAgImNhcHRpb24iID4NCi08IUVOVElUWSAlIHRyLnFuYW1lICAidHIiID4NCi08IUVOVElUWSAlIHRoLnFuYW1lICAidGgiID4NCi08IUVOVElUWSAlIHRkLnFuYW1lICAidGQiID4NCi0NCi08IS0tIGhvcml6b250YWwgYWxpZ25tZW50IGF0dHJpYnV0ZXMgZm9yIGNlbGwgY29udGVudHMNCi0tLT4NCi08IUVOVElUWSAlIENlbGxIQWxpZ24uYXR0cmliDQotICAgICAiYWxpZ24gICAgICAgICggbGVmdA0KLSAgICAgICAgICAgICAgICAgICB8IGNlbnRlcg0KLSAgICAgICAgICAgICAgICAgICB8IHJpZ2h0ICkgICAgICAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhLS0gdmVydGljYWwgYWxpZ25tZW50IGF0dHJpYnV0ZXMgZm9yIGNlbGwgY29udGVudHMNCi0tLT4NCi08IUVOVElUWSAlIENlbGxWQWxpZ24uYXR0cmliDQotICAgICAidmFsaWduICAgICAgICggdG9wDQotICAgICAgICAgICAgICAgICAgIHwgbWlkZGxlDQotICAgICAgICAgICAgICAgICAgIHwgYm90dG9tICkgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCEtLSBzY29wZSBpcyBzaW1wbGVyIHRoYW4gYXhlcyBhdHRyaWJ1dGUgZm9yIGNvbW1vbiB0YWJsZXMNCi0tLT4NCi08IUVOVElUWSAlIHNjb3BlLmF0dHJpYg0KLSAgICAgInNjb3BlICAgICAgICAoIHJvdyB8IGNvbCAgKSAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhLS0gdGFibGU6IFRhYmxlIEVsZW1lbnQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgdGFibGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldGFibGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0YWJsZS5jb250ZW50DQotICAgICAiKCAlY2FwdGlvbi5xbmFtZTs/LCAldHIucW5hbWU7KyApIg0KLT4NCi08IUVMRU1FTlQgJXRhYmxlLnFuYW1lOyAgJXRhYmxlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0YWJsZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdGFibGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldGFibGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0YWJsZS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBzdW1tYXJ5ICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIHRhYmxlLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBjYXB0aW9uOiBUYWJsZSBDYXB0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBjYXB0aW9uLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWNhcHRpb24uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBjYXB0aW9uLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAlY2FwdGlvbi5xbmFtZTsgICVjYXB0aW9uLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBjYXB0aW9uLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBjYXB0aW9uLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWNhcHRpb24uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVjYXB0aW9uLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBjYXB0aW9uLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSB0cjogVGFibGUgUm93IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB0ci5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0ci5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRyLmNvbnRlbnQgICIoICV0aC5xbmFtZTsgfCAldGQucW5hbWU7ICkrIiA+DQotPCFFTEVNRU5UICV0ci5xbmFtZTsgICV0ci5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdHIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldHIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgJUNlbGxIQWxpZ24uYXR0cmliOw0KLSAgICAgICVDZWxsVkFsaWduLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdHIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHRoOiBUYWJsZSBIZWFkZXIgQ2VsbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIHRoIGlzIGZvciBoZWFkZXIgY2VsbHMsIHRkIGZvciBkYXRhLA0KLSAgICAgYnV0IGZvciBjZWxscyBhY3RpbmcgYXMgYm90aCB1c2UgdGQNCi0tLT4NCi0NCi08IUVOVElUWSAlIHRoLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRoLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdGguY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVGbG93Tm9UYWJsZS5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJXRoLnFuYW1lOyAgJXRoLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0aC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdGguYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldGguYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0aC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBhYmJyICAgICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNJTVBMSUVEDQotICAgICAgYXhpcyAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGhlYWRlcnMgICAgICBJRFJFRlMgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAlc2NvcGUuYXR0cmliOw0KLSAgICAgIHJvd3NwYW4gICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgJzEnDQotICAgICAgY29sc3BhbiAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAnMScNCi0gICAgICAlQ2VsbEhBbGlnbi5hdHRyaWI7DQotICAgICAgJUNlbGxWQWxpZ24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0aC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gdGQ6IFRhYmxlIERhdGEgQ2VsbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgdGQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldGQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0ZC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3dOb1RhYmxlLm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAldGQucW5hbWU7ICAldGQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRkLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0ZC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0ZC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRkLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGFiYnIgICAgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBheGlzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgaGVhZGVycyAgICAgIElEUkVGUyAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICVzY29wZS5hdHRyaWI7DQotICAgICAgcm93c3BhbiAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAnMScNCi0gICAgICBjb2xzcGFuICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICcxJw0KLSAgICAgICVDZWxsSEFsaWduLmF0dHJpYjsNCi0gICAgICAlQ2VsbFZBbGlnbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHRkLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmFzaWMtdGFibGUtMS5tb2QgLS0+DQotDQotPCEtLSBGb3JtcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRUxFTUVOVCAlb3B0Z3JvdXAucW5hbWU7ICglb3B0aW9uLnFuYW1lOykrPg0KLTwhQVRUTElTVCAlb3B0Z3JvdXAucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyAJDQotCWxhYmVsICVUZXh0LmRhdGF0eXBlOyAjUkVRVUlSRUQNCi0+DQotPCFFTlRJVFkgJSBvcHRpb24uY29udGVudCAiKCAjUENEQVRBIHwgJW9uZXZlbnQucW5hbWU7fCAlZ2V0dmFyLnFuYW1lOykqIj4NCi08IUVOVElUWSAlIHNlbGVjdC5jb250ZW50ICIoICVvcHRncm91cC5xbmFtZTsgfCAlb3B0aW9uLnFuYW1lOyApKyI+DQotPCFFTEVNRU5UICVmaWVsZHNldC5xbmFtZTsgKCNQQ0RBVEEgfCAlRmxvdy5taXg7KSo+DQotPCFBVFRMSVNUICVmaWVsZHNldC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLT4NCi08IUVOVElUWSAlIHRleHRhcmVhLmNvbnRlbnQgIiggI1BDREFUQSB8ICVnZXR2YXIucW5hbWU7ICkqIj4NCi08IUVOVElUWSAlIGZvcm0uY29udGVudCAiKCAlQmxrTm9Gb3JtLm1peDsNCi0gICAgICB8ICVmaWVsZHNldC5xbmFtZTsgKSsiPg0KLTwhRU5USVRZICUgeGh0bWwtYmFzaWMtZm9ybS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIEZvcm1zIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy1mb3JtLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBTaW1wbGlmaWVkIEZvcm1zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmFzaWMtZm9ybS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCBCYXNpYywgYSBwcm9wZXIgc3Vic2V0IG9mIFhIVE1MLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBGb3JtcyAxLjAvL0VOIiAgDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLWZvcm0tMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmFzaWMgRm9ybXMNCi0NCi0gICAgIFRoaXMgZm9ybXMgbW9kdWxlIGlzIGJhc2VkIG9uIHRoZSBIVE1MIDMuMiBmb3JtcyBtb2RlbCwgd2l0aA0KLSAgICAgdGhlIFdBSS1yZXF1ZXN0ZWQgYWRkaXRpb24gb2YgdGhlIGxhYmVsIGVsZW1lbnQuIFdoaWxlIHRoaXMgDQotICAgICBtb2R1bGUgZXNzZW50aWFsbHkgbWltaWNzIHRoZSBjb250ZW50IG1vZGVsIGFuZCBhdHRyaWJ1dGVzIG9mIA0KLSAgICAgSFRNTCAzLjIgZm9ybXMsIHRoZSBlbGVtZW50IHR5cGVzIGRlY2xhcmVkIGhlcmVpbiBhbHNvIGluY2x1ZGUNCi0gICAgIGFsbCBIVE1MIDQgY29tbW9uIGF0dHJpYnV0ZXMuDQotDQotICAgICAgICBmb3JtLCBsYWJlbCwgaW5wdXQsIHNlbGVjdCwgb3B0aW9uLCB0ZXh0YXJlYQ0KLS0tPg0KLQ0KLTwhLS0gZGVjbGFyZSBxdWFsaWZpZWQgZWxlbWVudCB0eXBlIG5hbWVzOg0KLS0tPg0KLTwhRU5USVRZICUgZm9ybS5xbmFtZSAgImZvcm0iID4NCi08IUVOVElUWSAlIGxhYmVsLnFuYW1lICAibGFiZWwiID4NCi08IUVOVElUWSAlIGlucHV0LnFuYW1lICAiaW5wdXQiID4NCi08IUVOVElUWSAlIHNlbGVjdC5xbmFtZSAgInNlbGVjdCIgPg0KLTwhRU5USVRZICUgb3B0aW9uLnFuYW1lICAib3B0aW9uIiA+DQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5xbmFtZSAgInRleHRhcmVhIiA+DQotDQotPCEtLSAlQmxrTm9Gb3JtLm1peDsgaW5jbHVkZXMgYWxsIG5vbi1mb3JtIGJsb2NrIGVsZW1lbnRzLA0KLSAgICAgcGx1cyAlTWlzYy5jbGFzczsNCi0tLT4NCi08IUVOVElUWSAlIEJsa05vRm9ybS5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgfCAldGFibGUucW5hbWU7IA0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhLS0gZm9ybTogRm9ybSBFbGVtZW50IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgZm9ybS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVmb3JtLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZm9ybS5jb250ZW50DQotICAgICAiKCAlQmxrTm9Gb3JtLm1peDsgKSsiDQotPg0KLTwhRUxFTUVOVCAlZm9ybS5xbmFtZTsgICVmb3JtLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBmb3JtLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBmb3JtLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWZvcm0uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVmb3JtLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGFjdGlvbiAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgbWV0aG9kICAgICAgICggZ2V0IHwgcG9zdCApICAgICAgICAgICAnZ2V0Jw0KLSAgICAgIGVuY3R5cGUgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcNCi0+DQotPCEtLSBlbmQgb2YgZm9ybS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gbGFiZWw6IEZvcm0gRmllbGQgTGFiZWwgVGV4dCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgbGFiZWwuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslbGFiZWwuZWxlbWVudDtbDQotPCEtLSBFYWNoIGxhYmVsIG11c3Qgbm90IGNvbnRhaW4gbW9yZSB0aGFuIE9ORSBmaWVsZA0KLS0tPg0KLTwhRU5USVRZICUgbGFiZWwuY29udGVudA0KLSAgICAgIiggI1BDREFUQSANCi0gICAgICB8ICVpbnB1dC5xbmFtZTsgfCAlc2VsZWN0LnFuYW1lOyB8ICV0ZXh0YXJlYS5xbmFtZTsNCi0gICAgICB8ICVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVJMThuLmNsYXNzOw0KLSAgICAgICVJbmxQcmVzLmNsYXNzOw0KLSAgICAgICVJbmxTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyApKiINCi0+DQotPCFFTEVNRU5UICVsYWJlbC5xbmFtZTsgICVsYWJlbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgbGFiZWwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGxhYmVsLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWxhYmVsLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlbGFiZWwucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgZm9yICAgICAgICAgIElEUkVGICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGFjY2Vzc2tleSAgICAlQ2hhcmFjdGVyLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgbGFiZWwuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGlucHV0OiBGb3JtIENvbnRyb2wgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGlucHV0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWlucHV0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaW5wdXQuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTEVNRU5UICVpbnB1dC5xbmFtZTsgICVpbnB1dC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaW5wdXQuZWxlbWVudCAtLT5dXT4NCi0NCi08IS0tIEJhc2ljIEZvcm1zIHJlbW92ZXMgJ2ltYWdlJyBhbmQgJ2ZpbGUnIGlucHV0IHR5cGVzLg0KLS0tPg0KLTwhRU5USVRZICUgaW5wdXQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaW5wdXQuYXR0bGlzdDtbDQotPCFFTlRJVFkgJSBJbnB1dFR5cGUuY2xhc3MNCi0gICAgICIoIHRleHQgfCBwYXNzd29yZCB8IGNoZWNrYm94IHwgcmFkaW8gDQotICAgICAgfCBzdWJtaXQgfCByZXNldCB8IGhpZGRlbiApIg0KLT4NCi08IS0tIGF0dHJpYnV0ZSBuYW1lIHJlcXVpcmVkIGZvciBhbGwgYnV0IHN1Ym1pdCAmIHJlc2V0DQotLS0+DQotPCFBVFRMSVNUICVpbnB1dC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICB0eXBlICAgICAgICAgJUlucHV0VHlwZS5jbGFzczsgICAgICAgICd0ZXh0Jw0KLSAgICAgIG5hbWUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB2YWx1ZSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY2hlY2tlZCAgICAgICggY2hlY2tlZCApICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHNpemUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBtYXhsZW5ndGggICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgc3JjICAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHRhYmluZGV4ICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICBhY2Nlc3NrZXkgICAgJUNoYXJhY3Rlci5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGlucHV0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBzZWxlY3Q6IE9wdGlvbiBTZWxlY3RvciAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBzZWxlY3QuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc2VsZWN0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc2VsZWN0LmNvbnRlbnQgICIoICVvcHRpb24ucW5hbWU7ICkrIiA+DQotPCFFTEVNRU5UICVzZWxlY3QucW5hbWU7ICAlc2VsZWN0LmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzZWxlY3QuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNlbGVjdC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzZWxlY3QuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzZWxlY3QucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHNpemUgICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICBtdWx0aXBsZSAgICAgKCBtdWx0aXBsZSApICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBzZWxlY3QuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIG9wdGlvbjogU2VsZWN0YWJsZSBDaG9pY2UgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIG9wdGlvbi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVvcHRpb24uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBvcHRpb24uY29udGVudCAgIiggI1BDREFUQSApIiA+DQotPCFFTEVNRU5UICVvcHRpb24ucW5hbWU7ICAlb3B0aW9uLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBvcHRpb24uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIG9wdGlvbi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVvcHRpb24uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVvcHRpb24ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgc2VsZWN0ZWQgICAgICggc2VsZWN0ZWQgKSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHZhbHVlICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2Ygb3B0aW9uLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSB0ZXh0YXJlYTogTXVsdGktTGluZSBUZXh0IEZpZWxkIC4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0ZXh0YXJlYS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRleHRhcmVhLmNvbnRlbnQgICIoICNQQ0RBVEEgKSIgPg0KLTwhRUxFTUVOVCAldGV4dGFyZWEucW5hbWU7ICAldGV4dGFyZWEuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRleHRhcmVhLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0ZXh0YXJlYS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRleHRhcmVhLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIG5hbWUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICByb3dzICAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIGNvbHMgICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI1JFUVVJUkVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIGFjY2Vzc2tleSAgICAlQ2hhcmFjdGVyLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgdGV4dGFyZWEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1iYXNpYy1mb3JtLTEubW9kIC0tPg0KLQ0KLTwhLS0gTGluayBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWxpbmsubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaW5rIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpbmstMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIExpbmsgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1saW5rLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaW5rIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGluay0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBMaW5rIGVsZW1lbnQNCi0NCi0gICAgICAgIGxpbmsNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBsaW5rIGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsDQotICAgICB3aGljaCBjb3VsZCAoaW4gcHJpbmNpcGxlKSBiZSB1c2VkIHRvIGRlZmluZSBkb2N1bWVudC1sZXZlbCBsaW5rcw0KLSAgICAgdG8gZXh0ZXJuYWwgcmVzb3VyY2VzIHN1Y2ggYXM6DQotDQotICAgICBhKSBmb3IgZG9jdW1lbnQgc3BlY2lmaWMgdG9vbGJhcnMvbWVudXMsIGUuZy4gc3RhcnQsIGNvbnRlbnRzLA0KLSAgICAgICAgcHJldmlvdXMsIG5leHQsIGluZGV4LCBlbmQsIGhlbHANCi0gICAgIGIpIHRvIGxpbmsgdG8gYSBzZXBhcmF0ZSBzdHlsZSBzaGVldCAocmVsPSJzdHlsZXNoZWV0IikNCi0gICAgIGMpIHRvIG1ha2UgYSBsaW5rIHRvIGEgc2NyaXB0IChyZWw9InNjcmlwdCIpDQotICAgICBkKSBieSBzdHlsZSBzaGVldHMgdG8gY29udHJvbCBob3cgY29sbGVjdGlvbnMgb2YgaHRtbCBub2RlcyBhcmUNCi0gICAgICAgIHJlbmRlcmVkIGludG8gcHJpbnRlZCBkb2N1bWVudHMNCi0gICAgIGUpIHRvIG1ha2UgYSBsaW5rIHRvIGEgcHJpbnRhYmxlIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudA0KLSAgICAgICAgZS5nLiBhIHBvc3RzY3JpcHQgb3IgcGRmIHZlcnNpb24gKHJlbD0iYWx0ZXJuYXRlIiBtZWRpYT0icHJpbnQiKQ0KLS0tPg0KLQ0KLTwhLS0gbGluazogTWVkaWEtSW5kZXBlbmRlbnQgTGluayAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgbGluay5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVsaW5rLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgbGluay5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIGxpbmsucW5hbWUgICJsaW5rIiA+DQotPCFFTEVNRU5UICVsaW5rLnFuYW1lOyAgJWxpbmsuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGxpbmsuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGxpbmsuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslbGluay5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWxpbmsucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgY2hhcnNldCAgICAgICVDaGFyc2V0LmRhdGF0eXBlOyAgICAgICAjSU1QTElFRA0KLSAgICAgIGhyZWYgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBocmVmbGFuZyAgICAgJUxhbmd1YWdlQ29kZS5kYXRhdHlwZTsgICNJTVBMSUVEDQotICAgICAgdHlwZSAgICAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjSU1QTElFRA0KLSAgICAgIHJlbCAgICAgICAgICAlTGlua1R5cGVzLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICByZXYgICAgICAgICAgJUxpbmtUeXBlcy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgbWVkaWEgICAgICAgICVNZWRpYURlc2MuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBsaW5rLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtbGluay0xLm1vZCAtLT4NCi0NCi08IS0tIERvY3VtZW50IE1ldGFpbmZvcm1hdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1tZXRhLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTWV0YWluZm9ybWF0aW9uIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1tZXRhLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBEb2N1bWVudCBNZXRhaW5mb3JtYXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbWV0YS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTWV0YWluZm9ybWF0aW9uIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW1ldGEtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTWV0YSBJbmZvcm1hdGlvbg0KLQ0KLSAgICAgICAgbWV0YQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIG1ldGEgZWxlbWVudCB0eXBlIGFuZCBpdHMgYXR0cmlidXRlcywNCi0gICAgIHVzZWQgdG8gcHJvdmlkZSBkZWNsYXJhdGl2ZSBkb2N1bWVudCBtZXRhaW5mb3JtYXRpb24uDQotLS0+DQotDQotPCEtLSBtZXRhOiBHZW5lcmljIE1ldGFpbmZvcm1hdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBtZXRhLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJW1ldGEuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBtZXRhLmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRU5USVRZICUgbWV0YS5xbmFtZSAgIm1ldGEiID4NCi08IUVMRU1FTlQgJW1ldGEucW5hbWU7ICAlbWV0YS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgbWV0YS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgbWV0YS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVtZXRhLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlbWV0YS5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0gICAgICBodHRwLWVxdWl2ICAgTk1UT0tFTiAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgbmFtZSAgICAgICAgIE5NVE9LRU4gICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGNvbnRlbnQgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgc2NoZW1lICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBtZXRhLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtbWV0YS0xLm1vZCAtLT4NCi0NCi08IS0tIEJhc2UgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1iYXNlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzZSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNlLTEubW9kIj4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCYXNlIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtYmFzZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzZSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2UtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gQmFzZSBlbGVtZW50DQotDQotICAgICAgICBiYXNlDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgYmFzZSBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLA0KLSAgICAgdXNlZCB0byBkZWZpbmUgYSBiYXNlIFVSSSBhZ2FpbnN0IHdoaWNoIHJlbGF0aXZlIFVSSXMgaW4gdGhlDQotICAgICBkb2N1bWVudCB3aWxsIGJlIHJlc29sdmVkLg0KLQ0KLSAgICAgTm90ZSB0aGF0IHRoaXMgbW9kdWxlIGFsc28gcmVkZWNsYXJlcyB0aGUgY29udGVudCBtb2RlbCBmb3INCi0gICAgIHRoZSBoZWFkIGVsZW1lbnQgdG8gaW5jbHVkZSB0aGUgYmFzZSBlbGVtZW50Lg0KLS0tPg0KLQ0KLTwhLS0gYmFzZTogRG9jdW1lbnQgQmFzZSBVUkkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgYmFzZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyViYXNlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYmFzZS5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIGJhc2UucW5hbWUgICJiYXNlIiA+DQotPCFFTEVNRU5UICViYXNlLnFuYW1lOyAgJWJhc2UuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGJhc2UuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJhc2UuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYmFzZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWJhc2UucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICBocmVmICAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNSRVFVSVJFRA0KLT4NCi08IS0tIGVuZCBvZiBiYXNlLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoZWFkLmNvbnRlbnQNCi0gICAgIiggJUhlYWRPcHRzLm1peDssDQotICAgICAoICggJXRpdGxlLnFuYW1lOywgJUhlYWRPcHRzLm1peDssICggJWJhc2UucW5hbWU7LCAlSGVhZE9wdHMubWl4OyApPyApDQotICAgICB8ICggJWJhc2UucW5hbWU7LCAlSGVhZE9wdHMubWl4OywgKCAldGl0bGUucW5hbWU7LCAlSGVhZE9wdHMubWl4OyApKSkpIg0KLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1iYXNlLTEubW9kIC0tPg0KLQ0KLTwhLS0gU3R5bGVzaGVldHMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXN0eWxlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgU3R5bGUgU2hlZXRzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHlsZS0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgRG9jdW1lbnQgU3R5bGUgU2hlZXQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXN0eWxlLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgU3R5bGUgU2hlZXRzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0eWxlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFN0eWxlIFNoZWV0cw0KLQ0KLSAgICAgICAgc3R5bGUNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBzdHlsZSBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLA0KLSAgICAgdXNlZCB0byBlbWJlZCBzdHlsZSBzaGVldCBpbmZvcm1hdGlvbiBpbiB0aGUgZG9jdW1lbnQgaGVhZCBlbGVtZW50Lg0KLS0tPg0KLQ0KLTwhLS0gc3R5bGU6IFN0eWxlIFNoZWV0IEluZm9ybWF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgc3R5bGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslc3R5bGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzdHlsZS5jb250ZW50ICAiKCAjUENEQVRBICkiID4NCi08IUVOVElUWSAlIHN0eWxlLnFuYW1lICAic3R5bGUiID4NCi08IUVMRU1FTlQgJXN0eWxlLnFuYW1lOyAgJXN0eWxlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBzdHlsZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3R5bGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3R5bGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVzdHlsZS5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICV0aXRsZS5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLSAgICAgIHR5cGUgICAgICAgICAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICAgI1JFUVVJUkVEDQotICAgICAgbWVkaWEgICAgICAgICVNZWRpYURlc2MuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIHhtbDpzcGFjZSAgICAoIHByZXNlcnZlICkgICAgICAgICAgICAgI0ZJWEVEICdwcmVzZXJ2ZScNCi0+DQotPCEtLSBlbmQgb2Ygc3R5bGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1zdHlsZS0xLm1vZCAtLT4NCi0NCi08IS0tIERvY3VtZW50IFN0cnVjdHVyZSBNb2R1bGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSBodG1sLmNvbnRlbnQgIiggJWhlYWQucW5hbWU7LCAlVGVtcGxhdGUubWl4OywgKCVib2R5LnFuYW1lOyB8ICglY2FyZC5xbmFtZTsrKSkpIj4NCi08IUVOVElUWSAlIGJvZHkuY29udGVudCAiKCVDYXJkQm9keS5taXg7KSI+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHJ1Y3QubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBEb2N1bWVudCBTdHJ1Y3R1cmUgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0cnVjdC0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgU3RydWN0dXJlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXN0cnVjdC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHdtbDIwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTggcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRG9jdW1lbnQgU3RydWN0dXJlIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0cnVjdC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBEb2N1bWVudCBTdHJ1Y3R1cmUNCi0NCi0gICAgICAgIHRpdGxlLCBoZWFkLCBib2R5LCBodG1sDQotDQotICAgICBUaGUgU3RydWN0dXJlIE1vZHVsZSBkZWZpbmVzIHRoZSBtYWpvciBzdHJ1Y3R1cmFsIGVsZW1lbnRzIGFuZA0KLSAgICAgdGhlaXIgYXR0cmlidXRlcy4NCi0NCi0gICAgIE5vdGUgdGhhdCB0aGUgY29udGVudCBtb2RlbCBvZiB0aGUgaGVhZCBlbGVtZW50IHR5cGUgaXMgcmVkZWNsYXJlZA0KLSAgICAgd2hlbiB0aGUgQmFzZSBNb2R1bGUgaXMgaW5jbHVkZWQgaW4gdGhlIERURC4NCi0NCi0gICAgIFRoZSBwYXJhbWV0ZXIgZW50aXR5IGNvbnRhaW5pbmcgdGhlIFhNTCBuYW1lc3BhY2UgVVJJIHZhbHVlIHVzZWQNCi0gICAgIGZvciBYSFRNTCBpcyAnJVhIVE1MLnhtbG5zOycsIGRlZmluZWQgaW4gdGhlIFF1YWxpZmllZCBOYW1lcyBtb2R1bGUuDQotLS0+DQotDQotPCEtLSB0aXRsZTogRG9jdW1lbnQgVGl0bGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBUaGUgdGl0bGUgZWxlbWVudCBpcyBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBmbG93IG9mIHRleHQuDQotICAgICBJdCBzaG91bGQgYmUgZGlzcGxheWVkLCBmb3IgZXhhbXBsZSBhcyB0aGUgcGFnZSBoZWFkZXIgb3INCi0gICAgIHdpbmRvdyB0aXRsZS4gRXhhY3RseSBvbmUgdGl0bGUgaXMgcmVxdWlyZWQgcGVyIGRvY3VtZW50Lg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgdGl0bGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldGl0bGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0aXRsZS5jb250ZW50ICAiKCAjUENEQVRBICkiID4NCi08IUVOVElUWSAlIHRpdGxlLnFuYW1lICAidGl0bGUiID4NCi08IUVMRU1FTlQgJXRpdGxlLnFuYW1lOyAgJXRpdGxlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0aXRsZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdGl0bGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldGl0bGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0aXRsZS5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdGl0bGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGhlYWQ6IERvY3VtZW50IEhlYWQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGhlYWQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaGVhZC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGhlYWQuY29udGVudA0KLSAgICAiKCAlSGVhZE9wdHMubWl4OywgJXRpdGxlLnFuYW1lOywgJUhlYWRPcHRzLm1peDsgKSINCi0+DQotPCFFTlRJVFkgJSBoZWFkLnFuYW1lICAiaGVhZCIgPg0KLTwhRUxFTUVOVCAlaGVhZC5xbmFtZTsgICVoZWFkLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoZWFkLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoZWFkLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWhlYWQuYXR0bGlzdDtbDQotPCEtLSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSB3aXRoIGRvY3VtZW50IHByb2ZpbGVzDQotLS0+DQotPCFFTlRJVFkgJSBwcm9maWxlLmF0dHJpYg0KLSAgICAgInByb2ZpbGUgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgJyVYSFRNTC5wcm9maWxlOyciDQotPg0KLQ0KLTwhQVRUTElTVCAlaGVhZC5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0gICAgICAlcHJvZmlsZS5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGhlYWQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGJvZHk6IERvY3VtZW50IEJvZHkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGJvZHkuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYm9keS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGJvZHkuY29udGVudA0KLSAgICAgIiggJUJsb2NrLm1peDsgKSsiDQotPg0KLTwhRU5USVRZICUgYm9keS5xbmFtZSAgImJvZHkiID4NCi08IUVMRU1FTlQgJWJvZHkucW5hbWU7ICAlYm9keS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYm9keS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYm9keS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVib2R5LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYm9keS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYm9keS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gaHRtbDogWEhUTUwgRG9jdW1lbnQgRWxlbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgaHRtbC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVodG1sLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaHRtbC5jb250ZW50ICAiKCAlaGVhZC5xbmFtZTssICVib2R5LnFuYW1lOyApIiA+DQotPCFFTlRJVFkgJSBodG1sLnFuYW1lICAiaHRtbCIgPg0KLTwhRUxFTUVOVCAlaHRtbC5xbmFtZTsgICVodG1sLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBodG1sLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBodG1sLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWh0bWwuYXR0bGlzdDtbDQotPCEtLSB2ZXJzaW9uIGF0dHJpYnV0ZSB2YWx1ZSBkZWZpbmVkIGluIGRyaXZlcg0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwudmVyc2lvbi5hdHRyaWINCi0gICAgICJ2ZXJzaW9uICAgICAgJUZQSS5kYXRhdHlwZTsgICAgICAgICAgICNGSVhFRCAnJVhIVE1MLnZlcnNpb247JyINCi0+DQotDQotPCEtLSBzZWUgdGhlIFF1YWxpZmllZCBOYW1lcyBtb2R1bGUgZm9yIGluZm9ybWF0aW9uDQotICAgICBvbiBob3cgdG8gZXh0ZW5kIFhIVE1MIHVzaW5nIFhNTCBuYW1lc3BhY2VzDQotLS0+DQotPCFBVFRMSVNUICVodG1sLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJVhIVE1MLnZlcnNpb24uYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaHRtbC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXN0cnVjdC0xLm1vZCAtLT4NCi0NCi08IS0tIEJsb2NrIFByZXNlbnRhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtYmxrcHJlcy5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFByZXNlbnRhdGlvbiAxLjAvL0VOIg0KLSAJCSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmxrcHJlcy0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJsa3ByZXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB3bWwyMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU4IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFByZXNlbnRhdGlvbiAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwcmVzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJsb2NrIFByZXNlbnRhdGlvbmFsIEVsZW1lbnRzDQotDQotICAgICAgICBocg0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIHVzZWQgdG8NCi0gICAgIHN1cHBvcnQgYmxvY2stbGV2ZWwgcHJlc2VudGF0aW9uYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgaHIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaHIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoci5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIGhyLnFuYW1lICAiaHIiID4NCi08IUVMRU1FTlQgJWhyLnFuYW1lOyAgJWhyLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoci5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaHIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaHIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoci5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaHIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1ibGtwcmVzLTEubW9kIC0tPg0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJV01MIERlY2xhcmF0aW9ucw0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBTcGVjaWFsIFdNTCBlbGVtZW50cy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB3bWwtc3BlY2lhbC5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIFNwZWNpYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbC1zcGVjaWFsLTEubW9kIj4NCi08IS0tIFdNTCAyLjAgU3BlY2lhbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbC1zcGVjaWFsLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VMRU1FTlRTIFdNTCBTcGVjaWFsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAid21sLXNwZWNpYWwtMS5tb2QiDQotDQotCVRoaXMgbW9kdWxlIGNvbnRhaW5zIGRlY2xhcmF0aW9ucyBvZiB0aGUgZm9sbG93aW5nIFdNTCBlbGVtZW50cy4gDQotCQ0KLQkJY2FyZCwgZG8sIG9uZXZlbnQsIGFjY2VzcywgZ28sIHByZXYsDQotCQlyZWZyZXNoLCBub29wLCAgcG9zdGZpZWxkLCBzZXR2YXIsIGdldHZhcg0KLQkJdGltZXIsIGFuY2hvcg0KLQkJDQotCUl0IGFsc28gY29udGFpbnMgV01MIGV4dGVuc2lvbnMgb2YgWEhUTUwgZWxlbWVudHMuIA0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JV01MIEdsb2JhbCBhdHRyaWJ1dGVzDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlXTUwgRXZlbnQgYXR0cmlidXRlcw0KLQkNCi0JVGhlc2UgYXJlIHVzZWQgb24gdGhlIFhIVE1MIGJvZHkgYW5kIGh0bWwgZWxlbWVudHMuDQotCVRoZSBzYW1lIGF0dHJpYnV0ZXMgYXJlIGFsc28gYXZhaWxhYmxlIG9uIHRoZSBXTUwgY2FyZCBlbGVtZW50LCBidXQNCi0Jd2l0aG91dCBuYW1lc3BhY2UgcHJlZml4Lg0KLS0tPg0KLTwhRU5USVRZICUgV01MLmV2ZW50LmF0dHJpYiAiJWF0dC5vbmVudGVyZm9yd2FyZC5xbmFtZTsgQ0RBVEEJI0lNUExJRUQNCi0gJWF0dC5vbmVudGVyYmFja3dhcmQucW5hbWU7IENEQVRBCSNJTVBMSUVEDQotICVhdHQub250aW1lci5xbmFtZTsgQ0RBVEEJI0lNUExJRUQiPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0JV01MIEVsZW1lbnRzDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlDYXJkcyANCi0JDQotCVVzZSBzYW1lIGNvbnRlbnQgbW9kZWwgYXMgdGhlIEhUTUwgYm9keSBlbGVtZW50DQotLS0+DQotPCFFTEVNRU5UICVjYXJkLnFuYW1lOyAlQ2FyZEJvZHkubWl4Oz4NCi08IUFUVExJU1QgJWNhcmQucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0JbmV3Y29udGV4dCAlQm9vbGVhbi5kYXRhdHlwZTsgImZhbHNlIg0KLQlvbmVudGVyZm9yd2FyZCBDREFUQSAjSU1QTElFRA0KLQlvbmVudGVyYmFja3dhcmQgQ0RBVEEgI0lNUExJRUQNCi0Jb250aW1lciBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlEbyANCi0tLT4NCi08IUVMRU1FTlQgJWRvLnFuYW1lOyAoJVRhc2tzLmNsYXNzOyk+DQotPCFBVFRMSVNUICVkby5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLSAgCXR5cGUgICAgICAgICAgICAgQ0RBVEEgICAgICAgI1JFUVVJUkVEDQotICAJbGFiZWwgICAgICAgICAgICAgQ0RBVEEgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JT25ldmVudCANCi0tLT4NCi08IUVMRU1FTlQgJW9uZXZlbnQucW5hbWU7ICVUYXNrcy5jbGFzczs+DQotPCFBVFRMSVNUICVvbmV2ZW50LnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQl0eXBlIENEQVRBICNSRVFVSVJFRA0KLT4NCi08IS0tIA0KLQlBY2Nlc3MgDQotLS0+DQotPCFFTEVNRU5UICVhY2Nlc3MucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlYWNjZXNzLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQlkb21haW4gQ0RBVEEgI0lNUExJRUQNCi0JcGF0aCBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlHbyANCi0tLT4NCi08IUVOVElUWSAlIGNhY2hlLWNvbnRyb2wgJyhuby1jYWNoZSknPg0KLTwhRUxFTUVOVCAlZ28ucW5hbWU7ICglcG9zdGZpZWxkLnFuYW1lOyB8ICVzZXR2YXIucW5hbWU7KSo+DQotPCFBVFRMSVNUICVnby5xbmFtZTsNCi0JJUNvcmUuYXR0cmliOyANCi0JaHJlZiAlVVJJLmRhdGF0eXBlOyAjUkVRVUlSRUQNCi0Jc2VuZHJlZmVyZXIgJUJvb2xlYW4uZGF0YXR5cGU7ICJmYWxzZSINCi0JdHlwZSAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICNJTVBMSUVEDQotCW1ldGhvZCAocG9zdCB8IGdldCkgImdldCINCi0JZW5jdHlwZSAlQ29udGVudFR5cGUuZGF0YXR5cGU7ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiDQotCWFjY2VwdC1jaGFyc2V0IENEQVRBICNJTVBMSUVEDQotCWNhY2hlLWNvbnRyb2wgJWNhY2hlLWNvbnRyb2w7ICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCVByZXYgDQotLS0+DQotPCFFTEVNRU5UICVwcmV2LnFuYW1lOyAoJXNldHZhci5xbmFtZTspKj4NCi08IUFUVExJU1QgJXByZXYucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCVJlZnJlc2ggDQotLS0+DQotPCFFTEVNRU5UICVyZWZyZXNoLnFuYW1lOyAoJXNldHZhci5xbmFtZTspKj4NCi08IUFUVExJU1QgJXJlZnJlc2gucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCU5vb3AgDQotLS0+DQotPCFFTEVNRU5UICVub29wLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJW5vb3AucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotPg0KLTwhLS0gDQotCVBvc3RmaWVsZCANCi0tLT4NCi08IUVMRU1FTlQgJXBvc3RmaWVsZC5xbmFtZTsgRU1QVFk+DQotPCFBVFRMSVNUICVwb3N0ZmllbGQucW5hbWU7DQotCSVDb3JlLmF0dHJpYjsgDQotCW5hbWUgQ0RBVEEgI1JFUVVJUkVEDQotCXZhbHVlIENEQVRBICNSRVFVSVJFRA0KLT4NCi08IS0tIA0KLQlTZXR2YXIgDQotLS0+DQotPCFFTEVNRU5UICVzZXR2YXIucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlc2V0dmFyLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQluYW1lIENEQVRBICNSRVFVSVJFRA0KLQl2YWx1ZSBDREFUQSAjUkVRVUlSRUQNCi0+DQotPCEtLSANCi0JR2V0dmFyDQotLS0+DQotPCFFTEVNRU5UICVnZXR2YXIucW5hbWU7IEVNUFRZPg0KLTwhQVRUTElTVCAlZ2V0dmFyLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQluYW1lIENEQVRBICNSRVFVSVJFRA0KLQljb252ZXJzaW9uIChlc2NhcGUgfCBub2VzYyB8IHVuZXNjKSAibm9lc2MiDQotPg0KLTwhLS0gDQotCVRpbWVyICANCi0tLT4NCi08IUVMRU1FTlQgJXRpbWVyLnFuYW1lOyBFTVBUWT4NCi08IUFUVExJU1QgJXRpbWVyLnFuYW1lOw0KLQklQ29yZS5hdHRyaWI7IA0KLQluYW1lIE5NVE9LRU4gI0lNUExJRUQNCi0JdmFsdWUgQ0RBVEEgI1JFUVVJUkVEDQotPg0KLTwhLS0gDQotCUFuY2hvciANCi0JDQotCVNhbWUgY29udGVudCBtb2RlbCBhcyBIVE1MIGEgZWxlbWVudCwgYnV0IGV4dGVuZGVkIHdpdGggV01MIHRhc2tzLg0KLS0tPg0KLTwhRUxFTUVOVCAlYW5jaG9yLnFuYW1lOyAoI1BDREFUQSB8ICVJbmxOb0FuY2hvci5taXg7IHwgJVRhc2tzLW5vbm9vcC5jbGFzczspKj4NCi08IUFUVExJU1QgJWFuY2hvci5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLQlhY2Nlc3NrZXkgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIA0KLQlXTUwgZXh0ZW5zaW9ucyBvZiBYSFRNTCBlbGVtZW50cw0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSANCi0Jc2VsZWN0IA0KLQkNCi0JKldNTCBpbmFtZSwgaXZhbHVlLCB2YWx1ZSwgYW5kIG5hbWUgYXR0cmlidXRlcw0KLQkqWEhUTUwgdGFiaW5kZXggKG5vdCBpbiBCYXNpYyBGb3JtcyBtb2R1bGUpDQotLS0+DQotPCFBVFRMSVNUICVzZWxlY3QucW5hbWU7DQotCSVhdHQuaW5hbWUucW5hbWU7IE5NVE9LRU4gI0lNUExJRUQNCi0JJWF0dC52YWx1ZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0JJWF0dC5pdmFsdWUucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQubmFtZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JaW5wdXQgDQotCQ0KLQkqV01MIGZvcm1hdCwgZW1wdHlvaywgYW5kIG5hbWUgYXR0cmlidXRlcw0KLQkqWEhUTUwgdGFiaW5kZXggKG5vdCBpbiBCYXNpYyBGb3JtcyBtb2R1bGUpDQotLS0+DQotPCFBVFRMSVNUICVpbnB1dC5xbmFtZTsNCi0JJWF0dC5mb3JtYXQucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQuZW1wdHlvay5xbmFtZTsgJUJvb2xlYW4uZGF0YXR5cGU7ICNJTVBMSUVEDQotCSVhdHQubmFtZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0JdGV4dGFyZWENCi0JDQotCSpXTUwgZm9ybWF0LCBlbXB0eW9rLCBhbmQgbmFtZSBhdHRyaWJ1dGVzDQotCSpYSFRNTCB0YWJpbmRleCBhdHRyaWJ1dGUgKG5vdCBpbiBCYXNpYyBGb3JtcyBtb2R1bGUpDQotLS0+DQotPCFBVFRMSVNUICV0ZXh0YXJlYS5xbmFtZTsNCi0JJWF0dC5mb3JtYXQucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQuZW1wdHlvay5xbmFtZTsgJUJvb2xlYW4uZGF0YXR5cGU7ICNJTVBMSUVEDQotCSVhdHQubmFtZS5xbmFtZTsgQ0RBVEEgI0lNUExJRUQNCi0+DQotPCEtLSANCi0Jb3B0aW9uDQotCQ0KLQkqV01MIG9ucGljayBhdHRyaWJ1dGUNCi0tLT4NCi08IUFUVExJU1QgJW9wdGlvbi5xbmFtZTsNCi0JJWF0dC5vbnBpY2sucW5hbWU7IENEQVRBICNJTVBMSUVEDQotPg0KLTwhLS0gDQotCWltZyANCi0NCi0JKldNTCBsb2NhbHNyYyBhdHRyaWJ1dGUNCi0tLT4NCi08IUFUVExJU1QgaW1nDQotCSVhdHQubG9jYWxzcmMucW5hbWU7IENEQVRBICNJTVBMSUVEDQotCSVhdHQudHlwZS5xbmFtZTsgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQl0YWJsZSANCi0JDQotCSpXTUwgY29sdW1ucyBhdHRyaWJ1dGUNCi0JDQotLS0+DQotPCFBVFRMSVNUICV0YWJsZS5xbmFtZTsNCi0JJWF0dC5jb2x1bW5zLnFuYW1lOyAlTnVtYmVyLmRhdGF0eXBlOyAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlib2R5IA0KLQkNCi0JKldNTCBuZXdjb250ZXh0IA0KLQkqV01MIGV2ZW50IGF0dHJpYnV0ZXMNCi0tLT4NCi08IUFUVExJU1QgJWJvZHkucW5hbWU7DQotCSVhdHQubmV3Y29udGV4dC5xbmFtZTsgJUJvb2xlYW4uZGF0YXR5cGU7ICJmYWxzZSINCi0JJVdNTC5ldmVudC5hdHRyaWI7IA0KLT4NCi08IS0tIA0KLQlodG1sIA0KLQkNCi0JKkRlY2xhcmF0aW9uIG9mIFdNTCBuYW1lc3BhY2Ugd2l0aCBwcmVmaXgJDQotCSpXTUwgZXZlbnQgYXR0cmlidXRlcw0KLS0tPg0KLTwhQVRUTElTVCAlaHRtbC5xbmFtZTsNCi0JJVdNTC54bWxucy5leHRyYS5hdHRyaWI7IA0KLQklV01MLmV2ZW50LmF0dHJpYjsgDQotPg0KLQ0KLTwhLS0gRGVwcmVjYXRlZCBXTUwgZWxlbWVudHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgd21sLWRlcHJlY2F0ZWQubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VMRU1FTlRTIFdNTCBEZXByZWNhdGVkIDEuMC8vRU4iDQotICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLWRlcHJlY2F0ZWQtMS5tb2QiPg0KLTwhLS0gV01MIERlcHJlY2F0ZWQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwtZGVwcmVjYXRlZC0xLm1vZCAtLT4NCi08IS0tIA0KLSAgICBAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotLS0+DQotPCEtLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTEVNRU5UUyBXTUwgRGVwcmVjYXRlZCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gIndtbC1kZXByZWNhdGVkLTEubW9kIg0KLQ0KLQlUaGlzIG1vZHVsZSBjb250YWlucyBkZXByZWNhdGVkIGVsZW1lbnRzIGFuZCBhdHRyaWJ1dGVzLg0KLQkNCi0JCUF0dHJpYnV0ZXM6IFdNTCBtb2RlLCBYSFRNTCBhbGlnbiwgWEhUTUwgdnNwYWNlLCBYSFRNTCBoc3BhY2UNCi0JCQ0KLQkJRWxlbWVudHM6IHUsIGIsIGJpZywgaSwgc21hbGwgDQotCQkNCi0tLT4NCi08IS0tIA0KLQlwIA0KLQkNCi0JKldNTCBtb2RlDQotCSpYSFRNTCBhbGlnbg0KLQkNCi0JUmVwbGFjZW1lbnQ6IFVzZSBDU1Mgc3R5bGUgc2hlZXRzIA0KLS0tPg0KLTwhQVRUTElTVCAlcC5xbmFtZTsNCi0JJWF0dC5tb2RlLnFuYW1lOyAod3JhcCB8IG5vd3JhcCkgI0lNUExJRUQNCi0JYWxpZ24gKGxlZnQgfCByaWdodCB8IGNlbnRlcikgImxlZnQiDQotPg0KLTwhLS0gDQotCXRhYmxlIA0KLQkNCi0JKldNTCBhbGlnbiANCi0JDQotCU5vdGU6IFRoZSBXTUwgYWxpZ24gYXR0cmlidXRlIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgWEhUTUwgYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbmFtZS4NCi0tLT4NCi08IUFUVExJU1QgJXRhYmxlLnFuYW1lOw0KLQklYXR0LmFsaWduLnFuYW1lOyBDREFUQSAjSU1QTElFRA0KLT4NCi08IS0tIA0KLQlpbWcgDQotCQ0KLQkqWEhUTUwgdnNwYWNlLCBoc3BhY2UsIGFsaWduDQotCQ0KLQlSZXBsYWNlbWVudDogVXNlIENTUyBzdHlsZSBzaGVldHMgDQotLS0+DQotPCFBVFRMSVNUIGltZw0KLQl2c3BhY2UgQ0RBVEEgIjAiDQotCWhzcGFjZSBDREFUQSAiMCINCi0JYWxpZ24gKHRvcCB8IG1pZGRsZSB8IGJvdHRvbSkgImJvdHRvbSINCi0+DQotPCEtLSANCi0JSW5saW5lIFByZXNlbnRhdGlvbiANCi0JDQotCSpYSFRNTCAgYiwgYmlnLCBpLCBzbWFsbAkNCi0JDQotCVJlcGxhY2VtZW50OiBVc2UgQ1NTIHN0eWxlIHNoZWV0cyANCi0tLT4NCi08IUVOVElUWSAlIHN1Yi5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3ViLmF0dGxpc3QgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdXAuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1cC5hdHRsaXN0ICJJR05PUkUiPg0KLTwhRU5USVRZICUgdHQuZWxlbWVudCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHR0LmF0dGxpc3QgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB4aHRtbC1pbmxwcmVzLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFByZXNlbnRhdGlvbiAxLjAvL0VOIg0KLQkJInhodG1sLWlubHByZXMtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIElubGluZSBQcmVzZW50YXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1pbmxwcmVzLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogd21sMjAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1OCBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHByZXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSW5saW5lIFByZXNlbnRhdGlvbmFsIEVsZW1lbnRzDQotDQotICAgICAgICBiLCBiaWcsIGksIHNtYWxsLCBzdWIsIHN1cCwgdHQNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyB1c2VkIHRvDQotICAgICBzdXBwb3J0IGlubGluZS1sZXZlbCBwcmVzZW50YXRpb25hbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBiLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBiLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYi5xbmFtZSAgImIiID4NCi08IUVMRU1FTlQgJWIucW5hbWU7ICAlYi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyViLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYmlnLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWJpZy5lbGVtZW50O1sNCi08IUVOVElUWSAlIGJpZy5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGJpZy5xbmFtZSAgImJpZyIgPg0KLTwhRUxFTUVOVCAlYmlnLnFuYW1lOyAgJWJpZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYmlnLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBiaWcuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYmlnLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYmlnLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBiaWcuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGkuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGkuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBpLnFuYW1lICAiaSIgPg0KLTwhRUxFTUVOVCAlaS5xbmFtZTsgICVpLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBpLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBpLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWkuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVpLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBpLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzbWFsbC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzbWFsbC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHNtYWxsLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc21hbGwucW5hbWUgICJzbWFsbCIgPg0KLTwhRUxFTUVOVCAlc21hbGwucW5hbWU7ICAlc21hbGwuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHNtYWxsLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzbWFsbC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzbWFsbC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXNtYWxsLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzbWFsbC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3ViLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXN1Yi5lbGVtZW50O1sNCi08IUVOVElUWSAlIHN1Yi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHN1Yi5xbmFtZSAgInN1YiIgPg0KLTwhRUxFTUVOVCAlc3ViLnFuYW1lOyAgJXN1Yi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3ViLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdWIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3ViLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3ViLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzdWIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN1cC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzdXAuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzdXAuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzdXAucW5hbWUgICJzdXAiID4NCi08IUVMRU1FTlQgJXN1cC5xbmFtZTsgICVzdXAuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHN1cC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3VwLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXN1cC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXN1cC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc3VwLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0dC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0dC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHR0LmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgdHQucW5hbWUgICJ0dCIgPg0KLTwhRUxFTUVOVCAldHQucW5hbWU7ICAldHQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHR0LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0dC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0dC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXR0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0dC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWlubHByZXMtMS5tb2QgLS0+DQotDQotPCEtLSANCi0JdQ0KLQ0KLQlUaGlzIGVsZW1lbnQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgWEhUTUwgaW5saW5lIHByZXNlbnRhdGlvbiBtb2R1bGUuDQotCUl0IHdhcyBkZXByZWNhdGVkIGFscmVhZHkgaW4gSFRNTCA0LjAuDQotCQ0KLQlSZXBsYWNlbWVudDogVXNlIENTUyBzdHlsZSBzaGVldHMgDQotLS0+DQotPCFFTlRJVFkgJSB1LmNvbnRlbnQgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiI+DQotPCFFTlRJVFkgJSB1LnFuYW1lICJ1Ij4NCi08IUVMRU1FTlQgJXUucW5hbWU7ICV1LmNvbnRlbnQ7Pg0KLTwhQVRUTElTVCAldS5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLT4NCi08IS0tIA0KLQltZXRhIA0KLQkNCi0JKldNTCBmb3J1YSBhdHRyaWJ1dGUNCi0tLT4NCi08IUFUVExJU1QgJW1ldGEucW5hbWU7DQotCSVhdHQuZm9ydWEucW5hbWU7ICVCb29sZWFuLmRhdGF0eXBlOyAidHJ1ZSINCi0+DQotPCEtLQ0KLQlodG1sDQotCQ0KLQkqV01MIHVzZS14bWwtZnJhZ21lbnQgYXR0cmlidXRlDQotLS0+DQotPCFBVFRMSVNUICVodG1sLnFuYW1lOw0KLQklYXR0LnVzZXhtbGZyYWdtZW50LnFuYW1lOyAJJUJvb2xlYW4uZGF0YXR5cGU7ICJ0cnVlIg0KLT4NCi0NCi0NCi0NCi08IS0tIGVuZCBvZiBXTUwgMi4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC93bWwyMC1tb2RlbC0xLm1vZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbDIwLW1vZGVsLTEubW9kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmQ3NjIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbDIwLW1vZGVsLTEubW9kCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLTwhLS0gV01MIDIuMCBEb2N1bWVudCBNb2RlbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHdtbDIwLW1vZGVsLTEubW9kIC0tPg0KLTwhLS0gDQotICAgIEBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0tLT4NCi08IS0tDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFdNTCAyLjAgRG9jdW1lbnQgTW9kZWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9kdGQvd21sMjAtbW9kZWwtMS5tb2QiDQotICAgICAgDQotICAgICBUaGlzIG1vZHVsZSBkZXNjcmliZXMgdGhlIGdyb3VwaW5ncyBvZiBlbGVtZW50cyB0aGF0IG1ha2UgdXANCi0gICAgIGNvbW1vbiBjb250ZW50IG1vZGVscyBmb3IgV01MIGFuZCBYSFRNTCBlbGVtZW50cy4NCi0NCi0gICAgIFRocmVlIGJhc2ljIGNvbnRlbnQgbW9kZWxzIGFyZSBkZWNsYXJlZDoNCi0NCi0gICAgICAgICAlSW5saW5lLm1peDsgIGNoYXJhY3Rlci1sZXZlbCBlbGVtZW50cw0KLSAgICAgICAgICVCbG9jay5taXg7ICAgYmxvY2stbGlrZSBlbGVtZW50cywgZWcuLCBwYXJhZ3JhcGhzIGFuZCBsaXN0cw0KLSAgICAgICAgICVGbG93Lm1peDsgICAgYW55IGJsb2NrIG9yIGlubGluZSBlbGVtZW50cw0KLQ0KLSAgICAgQW55IHBhcmFtZXRlciBlbnRpdGllcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZSBtYXkgYmUgdXNlZA0KLSAgICAgdG8gY3JlYXRlIGVsZW1lbnQgY29udGVudCBtb2RlbHMsIGJ1dCB0aGUgYWJvdmUgdGhyZWUgYXJlDQotICAgICBjb25zaWRlcmVkICdnbG9iYWwnIChpbnNvZmFyIGFzIHRoYXQgdGVybSBhcHBsaWVzIGhlcmUpLg0KLSAgICAgDQotICAgICAgICAJICAgICANCi0tLT4NCi08IS0tIA0KLQlPcHRpb25hbCBFbGVtZW50cyBpbiBoZWFkICANCi0tLT4NCi08IUVOVElUWSAlIEhlYWRPcHRzLm1peCAiKCAlbWV0YS5xbmFtZTsgDQotCQl8ICVsaW5rLnFuYW1lOyANCi0JCXwgJXN0eWxlLnFuYW1lOyANCi0JCXwgJW9iamVjdC5xbmFtZTsgDQotCQl8ICVhY2Nlc3MucW5hbWU7KSoiPg0KLTwhLS0gDQotCVRhc2sgZWxlbWVudHMNCi0NCi0JVXNlZCBmb3IgdGhlIFdNTCBkbyBhbmQgb25ldmVudCBlbGVtZW50cw0KLS0tPg0KLTwhRU5USVRZICUgVGFza3MuY2xhc3MgIiglZ28ucW5hbWU7IA0KLQkJfCAlcHJldi5xbmFtZTsgDQotCQl8ICVub29wLnFuYW1lOyANCi0JCXwgJXJlZnJlc2gucW5hbWU7KSI+DQotPCEtLSANCi0JVGFza3Mgd2l0aG91dCBub29wIGVsZW1lbnQNCi0NCi0JVXNlZCBmb3IgdGhlIFdNTCBhbmNob3INCi0tLT4NCi08IUVOVElUWSAlIFRhc2tzLW5vbm9vcC5jbGFzcyAiJWdvLnFuYW1lOyANCi0JCXwgJXByZXYucW5hbWU7IA0KLQkJfCAlcmVmcmVzaC5xbmFtZTsiPg0KLTwhLS0NCi0JRG8gZWxlbWVudA0KLS0tPg0KLTwhRU5USVRZICUgRG8uY2xhc3MgIiVkby5xbmFtZTsiPg0KLTwhLS0gDQotCU1pc2NlbGxhbmVvdXMgRWxlbWVudHMgIA0KLQkNCi0JVGhpcyBpcyBub3QgdXNlZCBmb3IgYW55dGhpbmcgcmlnaHQgbm93LiANCi0tLT4NCi08IUVOVElUWSAlIE1pc2MuY2xhc3MgIiI+DQotPCEtLSANCi0JSW5saW5lIEVsZW1lbnRzICANCi0tLT4NCi08IUVOVElUWSAlIElubFN0cnVjdC5jbGFzcyAiJWJyLnFuYW1lOyANCi0JfCAlc3Bhbi5xbmFtZTsiPg0KLTwhRU5USVRZICUgSW5sUGhyYXMuY2xhc3MgInwgJWVtLnFuYW1lOyANCi0JfCAlc3Ryb25nLnFuYW1lOyANCi0JfCAlZGZuLnFuYW1lOyANCi0JfCAlY29kZS5xbmFtZTsgDQotCXwgJXNhbXAucW5hbWU7IA0KLQl8ICVrYmQucW5hbWU7IA0KLQl8ICV2YXIucW5hbWU7IA0KLQl8ICVjaXRlLnFuYW1lOyANCi0gICAgIAl8ICVhYmJyLnFuYW1lOyANCi0JfCAlYWNyb255bS5xbmFtZTsgDQotCXwgJXEucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubFByZXMuY2xhc3MgInwgJWkucW5hbWU7IA0KLQl8ICViLnFuYW1lOyANCi0JfCAlYmlnLnFuYW1lOyANCi0JfCAlc21hbGwucW5hbWU7DQotCXwgJXUucW5hbWU7Ij4NCi08IUVOVElUWSAlIEkxOG4uY2xhc3MgIiI+DQotPCFFTlRJVFkgJSBBbmNob3IuY2xhc3MgInwgJWEucW5hbWU7IA0KLQl8ICVhbmNob3IucW5hbWU7IHwgJWRvLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJbmxTcGVjaWFsLmNsYXNzICJ8ICVpbWcucW5hbWU7IA0KLQkgfCAlb2JqZWN0LnFuYW1lOyANCi0JfCAlZ2V0dmFyLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBJbmxGb3JtLmNsYXNzICJ8ICVpbnB1dC5xbmFtZTsgDQotCSB8ICVzZWxlY3QucW5hbWU7IA0KLQkgfCAldGV4dGFyZWEucW5hbWU7DQotICAgICAgICAgfCAlbGFiZWwucW5hbWU7Ij4NCi08IUVOVElUWSAlIElubGluZS5leHRyYSAiIj4NCi08IUVOVElUWSAlIElubGluZS5jbGFzcyAiJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUlubFByZXMuY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICAlSW5sU3BlY2lhbC5jbGFzczsNCi0gICAgICAlSW5sRm9ybS5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyI+DQotPCFFTlRJVFkgJSBJbmxOb0FuY2hvci5jbGFzcyAiJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUlubFByZXMuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJUlubEZvcm0uY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsiPg0KLTwhRU5USVRZICUgSW5sTm9BbmNob3IubWl4ICIlSW5sTm9BbmNob3IuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IUVOVElUWSAlIElubGluZS5taXggIiVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IS0tIA0KLQlCbG9jayBFbGVtZW50cyAgDQotLS0+DQotPCFFTlRJVFkgJSBIZWFkaW5nLmNsYXNzICIlaDEucW5hbWU7IA0KLQl8ICVoMi5xbmFtZTsgDQotCXwgJWgzLnFuYW1lOyANCi0JfCAlaDQucW5hbWU7IA0KLQl8ICVoNS5xbmFtZTsgDQotCXwgJWg2LnFuYW1lOyI+DQotPCFFTlRJVFkgJSBMaXN0LmNsYXNzICIldWwucW5hbWU7IA0KLQl8ICVvbC5xbmFtZTsgDQotCXwgJWRsLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBUYWJsZS5jbGFzcyAifCAldGFibGUucW5hbWU7Ij4NCi08IUVOVElUWSAlIEZvcm0uY2xhc3MgInwgJWZvcm0ucW5hbWU7Ij4NCi08IUVOVElUWSAlIEZpZWxkc2V0LmNsYXNzICJ8ICVmaWVsZHNldC5xbmFtZTsiPg0KLTwhRU5USVRZICUgQmxrU3RydWN0LmNsYXNzICIlcC5xbmFtZTsgDQotCXwgJWRpdi5xbmFtZTsiPg0KLTwhRU5USVRZICUgQmxrUGhyYXMuY2xhc3MgInwgJXByZS5xbmFtZTsgDQotCSB8ICVibG9ja3F1b3RlLnFuYW1lOyANCi0JIHwgJWFkZHJlc3MucW5hbWU7Ij4NCi08IUVOVElUWSAlIEJsa1ByZXMuY2xhc3MgInwgJWhyLnFuYW1lOyI+DQotPCFFTlRJVFkgJSBCbGtTcGVjaWFsLmNsYXNzICIlVGFibGUuY2xhc3M7DQotICAgICAgJUZvcm0uY2xhc3M7DQotICAgICAgJUZpZWxkc2V0LmNsYXNzOyI+DQotPCFFTlRJVFkgJSBCbG9jay5leHRyYSAiIj4NCi08IUVOVElUWSAlIEJsb2NrLmNsYXNzICIlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0JICVCbGtQcmVzLmNsYXNzOw0KLSAgICAgICVCbGtTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVCbG9jay5leHRyYTsiPg0KLTwhRU5USVRZICUgQmxvY2subWl4ICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsb2NrLmNsYXNzOyAgICAgDQotICAgICAgfCAlRG8uY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IUVOVElUWSAlIEJsa05vRm9ybS5taXggIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlQmxrUHJlcy5jbGFzczsNCi0gICAgICB8ICV0YWJsZS5xbmFtZTsNCi0gICAgICAlQmxvY2suZXh0cmE7DQotICAgICAgJU1pc2MuY2xhc3M7Ij4NCi08IS0tIA0KLQlBbGwgQ29udGVudCBFbGVtZW50cyAgDQotLS0+DQotPCEtLSANCi0JZGVjbGFyZXMgYWxsIGNvbnRlbnQgZXhjZXB0IHRhYmxlcw0KLS0tPg0KLTwhRU5USVRZICUgRmxvd05vVGFibGUubWl4ICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUZvcm0uY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOw0KLSAgICAgIHwgJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiPg0KLTwhRU5USVRZICUgRmxvdy5taXggIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxvY2suY2xhc3M7DQotICAgICAgfCAlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyI+DQotPCEtLSAJDQotCVRlbXBsYXRlIGxldmVsIGVsZW1lbnRzIA0KLS0tPg0KLTwhRU5USVRZICUgVGVtcGxhdGUubWl4ICIoICVvbmV2ZW50LnFuYW1lOykqIj4NCi08IS0tIA0KLQlDb250ZW50IG1vZGVsIG9mIHRoZSBXTUwgY2FyZCBhbmQgWEhUTUwgYm9keSBlbGVtZW50cw0KLS0tPg0KLTwhRU5USVRZICUgQ2FyZEJvZHkubWl4ICIoJW9uZXZlbnQucW5hbWU7KiwgJXRpbWVyLnFuYW1lOz8sICAoICVCbG9jay5taXg7ICkrKSI+DQotPCEtLSBlbmQgb2Ygd21sMjAtbW9kZWwtMS5tb2QgLS0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd21sMjAuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDZmOGQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3dtbDIwLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi08IS0tIFdNTCAyLjAgRFREICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwyMC5kdGQgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0JVGhpcyBpcyB0aGUgV01MIDIuMCBEVEQgZHJpdmVyIGZpbGUuIFBsZWFzZSB1c2UgdGhpcyBmb3JtYWwgcHVibGljIGlkZW50aWZpZXIgdG8gaWRlbnRpZnkgaXQ6DQotDQotICAgICAgICAgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDIuMC8vRU4iDQotICAgICAgICAgICAgICAgICAgIAkgICAgICAgICAgDQotICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBXTUwgMi4wIGRpcmVjdGx5LCB1c2UNCi0gICAgIHRoZSBGUEkgaW4gdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24sIHdpdGggdGhlIHhtbG5zIGF0dHJpYnV0ZQ0KLSAgICAgb24gdGhlIGRvY3VtZW50IGVsZW1lbnQgdG8gaWRlbnRpZnkgdGhlIGRlZmF1bHQgbmFtZXNwYWNlOg0KLQ0KLSAgICAgICAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgICAgICAgIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2R0ZC93bWwyMC5kdGQiID4NCi0gICAgICAgICA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCINCi0gICAgICAgICAgICAgICAgICAgeG1sbnM6d21sPSJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy8yMDAxL3dtbCI+DQotICAgICAgICAgLi4uDQotICAgICAgICAgPC9odG1sPg0KLQ0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJVmVyc2lvbiwgWE1MIE5hbWVzcGFjZXMsIGFuZCBwcm9maWxlIGluZm9ybWF0aW9uIA0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQlWYWx1ZSBvZiBYSFRNTCB2ZXJzaW9uIGF0dHJpYnV0ZSANCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnZlcnNpb24gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDIuMC8vRU4iPg0KLTwhLS0gDQotCVZhbHVlIG9mIFhIVE1MIHByb2ZpbGUgYXR0cmlidXRlDQotCQ0KLQlSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSB3aXRoIGRvY3VtZW50IHByb2ZpbGVzIA0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwucHJvZmlsZSAiIj4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JCU1vZHVsYXJpc2F0aW9uIGZyYW1ld29yayBzZXR1cA0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCFFTlRJVFkgJSB3bWwtZnJhbWV3b3JrLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgTW9kdWxhciBGcmFtZXdvcmsgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbC1mcmFtZXdvcmstMS5tb2QiPg0KLSV3bWwtZnJhbWV3b3JrLm1vZDsNCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JCVhIVE1MIG1vZHVsZXMgDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIFRleHQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHByZS5jb250ZW50ICIoICNQQ0RBVEENCi0gICAgICB8ICVJbmxTdHJ1Y3QuY2xhc3M7IHwgJWkucW5hbWU7IHwgJWIucW5hbWU7IA0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7IA0KLQl8ICVnZXR2YXIucW5hbWU7DQotCXwgJWlucHV0LnFuYW1lO3wgJXNlbGVjdC5xbmFtZTspKiI+DQotPCFFTlRJVFkgJSBwLmNvbnRlbnQgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyB8ICV0YWJsZS5xbmFtZTsgfCAlZmllbGRzZXQucW5hbWU7KSoiPg0KLTwhRU5USVRZICUgeGh0bWwtdGV4dC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFRleHQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXRleHQtMS5tb2QiPg0KLSV4aHRtbC10ZXh0Lm1vZDsNCi08IUVOVElUWSAlIHhodG1sLWh5cGVydGV4dC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEh5cGVydGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaHlwZXJ0ZXh0LTEubW9kIj4NCi0leGh0bWwtaHlwZXJ0ZXh0Lm1vZDsNCi08IS0tIExpc3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWxpc3QubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaXN0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGlzdC0xLm1vZCI+DQotJXhodG1sLWxpc3QubW9kOw0KLTwhLS0gRXh0ZW5kIGxpc3RzIHdpdGggdmFsdWUgYW5kIHN0YXJ0IGF0dHJpYnV0ZXMgLS0+IA0KLTwhQVRUTElTVCAlbGkucW5hbWU7DQotICAgICAgdmFsdWUgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAgI0lNUExJRUQNCi0+DQotPCFBVFRMSVNUICVvbC5xbmFtZTsNCi0gICAgICBzdGFydCAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gSW1hZ2UgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWltYWdlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW1hZ2VzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbWFnZS0xLm1vZCI+DQotJXhodG1sLWltYWdlLm1vZDsNCi08IS0tIFBhcmFtIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1wYXJhbS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFBhcmFtIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXBhcmFtLTEubW9kIj4NCi0leGh0bWwtcGFyYW0ubW9kOw0KLTwhLS0gRW1iZWRkZWQgT2JqZWN0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW9iamVjdC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEVtYmVkZGVkIE9iamVjdCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtb2JqZWN0LTEubW9kIj4NCi0leGh0bWwtb2JqZWN0Lm1vZDsNCi08IS0tIFRhYmxlcyBNb2R1bGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC10YWJsZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIFRhYmxlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtdGFibGUtMS5tb2QiPg0KLSV4aHRtbC10YWJsZS5tb2Q7DQotPCEtLSBGb3JtcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRUxFTUVOVCAlb3B0Z3JvdXAucW5hbWU7ICglb3B0aW9uLnFuYW1lOykrPg0KLTwhQVRUTElTVCAlb3B0Z3JvdXAucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyAJDQotCWxhYmVsICVUZXh0LmRhdGF0eXBlOyAjUkVRVUlSRUQNCi0+DQotPCFFTlRJVFkgJSBvcHRpb24uY29udGVudCAiKCAjUENEQVRBIHwgJW9uZXZlbnQucW5hbWU7fCAlZ2V0dmFyLnFuYW1lOykqIj4NCi08IUVOVElUWSAlIHNlbGVjdC5jb250ZW50ICIoICVvcHRncm91cC5xbmFtZTsgfCAlb3B0aW9uLnFuYW1lOyApKyI+DQotPCFFTEVNRU5UICVmaWVsZHNldC5xbmFtZTsgKCNQQ0RBVEEgfCAlRmxvdy5taXg7KSo+DQotPCFBVFRMSVNUICVmaWVsZHNldC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLT4NCi08IUVOVElUWSAlIHRleHRhcmVhLmNvbnRlbnQgIiggI1BDREFUQSB8ICVnZXR2YXIucW5hbWU7ICkqIj4NCi08IUVOVElUWSAlIGZvcm0uY29udGVudCAiKCAlQmxrTm9Gb3JtLm1peDsNCi0gICAgICB8ICVmaWVsZHNldC5xbmFtZTsgKSsiPg0KLTwhRU5USVRZICUgeGh0bWwtYmFzaWMtZm9ybS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIEZvcm1zIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy1mb3JtLTEubW9kIj4NCi0leGh0bWwtYmFzaWMtZm9ybS5tb2Q7DQotPCEtLSBMaW5rIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbGluay5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpbmsgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGluay0xLm1vZCI+DQotJXhodG1sLWxpbmsubW9kOw0KLTwhLS0gRG9jdW1lbnQgTWV0YWluZm9ybWF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW1ldGEubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBNZXRhaW5mb3JtYXRpb24gMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW1ldGEtMS5tb2QiPg0KLSV4aHRtbC1tZXRhLm1vZDsNCi08IS0tIEJhc2UgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1iYXNlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzZSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNlLTEubW9kIj4NCi0leGh0bWwtYmFzZS5tb2Q7DQotPCEtLSBTdHlsZXNoZWV0cyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtc3R5bGUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBTdHlsZSBTaGVldHMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0eWxlLTEubW9kIj4NCi0leGh0bWwtc3R5bGUubW9kOw0KLTwhLS0gRG9jdW1lbnQgU3RydWN0dXJlIE1vZHVsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIGh0bWwuY29udGVudCAiKCAlaGVhZC5xbmFtZTssICVUZW1wbGF0ZS5taXg7LCAoJWJvZHkucW5hbWU7IHwgKCVjYXJkLnFuYW1lOyspKSkiPg0KLTwhRU5USVRZICUgYm9keS5jb250ZW50ICIoJUNhcmRCb2R5Lm1peDspIj4NCi08IUVOVElUWSAlIHhodG1sLXN0cnVjdC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIERvY3VtZW50IFN0cnVjdHVyZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3RydWN0LTEubW9kIj4NCi0leGh0bWwtc3RydWN0Lm1vZDsNCi08IS0tIEJsb2NrIFByZXNlbnRhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtYmxrcHJlcy5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFByZXNlbnRhdGlvbiAxLjAvL0VOIg0KLSAJCSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmxrcHJlcy0xLm1vZCI+DQotJXhodG1sLWJsa3ByZXMubW9kOw0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJV01MIERlY2xhcmF0aW9ucw0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBTcGVjaWFsIFdNTCBlbGVtZW50cy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB3bWwtc3BlY2lhbC5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIFNwZWNpYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbC1zcGVjaWFsLTEubW9kIj4NCi0ld21sLXNwZWNpYWwubW9kOw0KLTwhLS0gRGVwcmVjYXRlZCBXTUwgZWxlbWVudHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgd21sLWRlcHJlY2F0ZWQubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VMRU1FTlRTIFdNTCBEZXByZWNhdGVkIDEuMC8vRU4iDQotICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLWRlcHJlY2F0ZWQtMS5tb2QiPg0KLSV3bWwtZGVwcmVjYXRlZC5tb2Q7DQotPCEtLSBlbmQgb2YgV01MIDIuMCBEVEQgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd3RhLXdtbDEyLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd2FwRFREcy9XQVAtMi0wL3d0YS13bWwxMi5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2MGY3ZGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAvd3RhLXdtbDEyLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLTwhLS0NCi1XaXJlbGVzcyBUZWxlcGhvbnkgQXBwbGljYXRpb25zIFdpcmVsZXNzIE1hcmt1cCBMYW5ndWFnZSAoV1RBLVdNTCkgRG9jdW1lbnQgVHlwZSBEZWZpbml0aW9uLg0KLVdUQS1XTUwgaXMgYW4gWE1MIGxhbmd1YWdlLiBUeXBpY2FsIHVzYWdlOg0KLTw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLTwhRE9DVFlQRSB3dGEtd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXVEEtV01MIDEuMi8vRU4iDQotCSJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd3RhLXdtbDEyLmR0ZCI+DQotPHd0YS13bWw+DQotLi4uDQotPC93dGEtd21sPg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgd21sLWR0ZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMi8vRU4iDQotCSJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sMTIuZHRkIj4NCi0NCi0ld21sLWR0ZDsNCi0NCi08IUVMRU1FTlQgd3RhLXdtbCAoIGhlYWQ/LCB0ZW1wbGF0ZT8sIGNhcmQrICk+DQotPCFBVFRMSVNUIHd0YS13bWwNCi0JeG1sOmxhbmcJCU5NVE9LRU4JI0lNUExJRUQNCi0JJWNvcmVhdHRyczsNCi0+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAveGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC94aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EzZTczYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC94aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDMyMTYgKzAsMCBAQAotPCEtLSBYSFRNTCBNb2JpbGUgMS4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbW9iaWxlMTAuZHRkIC0tPg0KLTwhLS0gDQotICAgICBUaGlzIGlzIFhIVE1MIE1vYmlsZSBwcm9maWxlLCBhIHByb3BlciBzdWJzZXQgb2YgWEhUTUwuDQotICAgICANCi0gICAgIAlAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotICAgIA0KLS0tPg0KLTwhLS0gVGhpcyBpcyB0aGUgZHJpdmVyIGZpbGUgZm9yIHZlcnNpb24gMS4wIG9mIHRoZSBYSFRNTCBNb2JpbGUgRFRELg0KLQ0KLSAgICAgVGhpcyBEVEQgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICBQVUJMSUM6ICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIg0KLSAgICAgU1lTVEVNOiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTEwLmR0ZCINCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnZlcnNpb24gICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIiA+DQotDQotPCEtLSBVc2UgdGhpcyBVUkkgdG8gaWRlbnRpZnkgdGhlIGRlZmF1bHQgbmFtZXNwYWNlOg0KLQ0KLSAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIg0KLQ0KLSAgICAgU2VlIHRoZSBRdWFsaWZpZWQgTmFtZXMgbW9kdWxlIGZvciBpbmZvcm1hdGlvbg0KLSAgICAgb24gdGhlIHVzZSBvZiBuYW1lc3BhY2UgcHJlZml4ZXMgaW4gdGhlIERURC4NCi0tLT4NCi08IUVOVElUWSAlIE5TLnByZWZpeGVkICJJR05PUkUiID4NCi08IUVOVElUWSAlIFhIVE1MLnByZWZpeCAgIiIgPg0KLQ0KLTwhLS0gRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgdXNpbmcgWEhUTUwgTW9iaWxlIDEuMCBkaXJlY3RseSwgdXNlDQotICAgICB0aGUgRlBJIGluIHRoZSBET0NUWVBFIGRlY2xhcmF0aW9uLCB3aXRoIHRoZSB4bWxucyBhdHRyaWJ1dGUNCi0gICAgIG9uIHRoZSBkb2N1bWVudCBlbGVtZW50IHRvIGlkZW50aWZ5IHRoZSBkZWZhdWx0IG5hbWVzcGFjZToNCi0NCi0gICAgICAgICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi0gICAgICAgICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iDQotICAgICAgICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQveGh0bWwtbW9iaWxlMTAuZHRkIiA+DQotICAgICAgICAgPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiDQotICAgICAgICAgICAgICAgeG1sOmxhbmc9ImVuIiA+DQotICAgICAgICAgLi4uDQotICAgICAgICAgPC9odG1sPg0KLS0tPg0KLQ0KLTwhLS0gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Ugd2l0aCBkb2N1bWVudCBwcm9maWxlcyAtLT4NCi08IUVOVElUWSAlIFhIVE1MLnByb2ZpbGUgICIiID4NCi0NCi08IS0tIElubGluZSBTdHlsZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1pbmxzdHlsZS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgU3R5bGUgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHN0eWxlLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSW5saW5lIFN0eWxlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWlubHN0eWxlLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIElubGluZSBTdHlsZSAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxzdHlsZS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBJbmxpbmUgU3R5bGUNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSAnc3R5bGUnIGF0dHJpYnV0ZSwgdXNlZCB0byBzdXBwb3J0IGlubGluZQ0KLSAgICAgc3R5bGUgbWFya3VwLiBUaGlzIG1vZHVsZSBtdXN0IGJlIGluc3RhbnRpYXRlZCBwcmlvciB0byB0aGUgWEhUTUwNCi0gICAgIENvbW1vbiBBdHRyaWJ1dGVzIG1vZHVsZSBpbiBvcmRlciB0byBiZSBpbmNsdWRlZCBpbiAlQ29yZS5hdHRyaWI7Lg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgc3R5bGUuYXR0cmliDQotICAgICAic3R5bGUgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotDQotPCFFTlRJVFkgJSBDb3JlLmV4dHJhLmF0dHJpYg0KLSAgICAgIiVzdHlsZS5hdHRyaWI7Ig0KLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1pbmxzdHlsZS0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIERvY3VtZW50IE1vZGVsIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1tb2RlbC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VOVElUSUVTIFhIVE1MIE1vYmlsZSAxLjAgRG9jdW1lbnQgTW9kZWwgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kIiA+DQotDQotPCEtLSBYSFRNTCBGcmFtZXdvcmsgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIFhIVE1MLmJpZGkgICJJR05PUkUiID4NCi08IUVOVElUWSAlIHhodG1sLWZyYW1ld29yay5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBNb2R1bGFyIEZyYW1ld29yayAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtZnJhbWV3b3JrLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTW9kdWxhciBGcmFtZXdvcmsgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWZyYW1ld29yay0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgTW9kdWxhciBGcmFtZXdvcmsgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtZnJhbWV3b3JrLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIE1vZHVsYXIgRnJhbWV3b3JrDQotDQotICAgICBUaGlzIHJlcXVpcmVkIG1vZHVsZSBpbnN0YW50aWF0ZXMgdGhlIG1vZHVsZXMgbmVlZGVkDQotICAgICB0byBzdXBwb3J0IHRoZSBYSFRNTCBtb2R1bGFyaXphdGlvbiBtb2RlbCwgaW5jbHVkaW5nOg0KLQ0KLSAgICAgICAgKyAgbm90YXRpb25zDQotICAgICAgICArICBkYXRhdHlwZXMNCi0gICAgICAgICsgIG5hbWVzcGFjZS1xdWFsaWZpZWQgbmFtZXMNCi0gICAgICAgICsgIGNvbW1vbiBhdHRyaWJ1dGVzDQotICAgICAgICArICBkb2N1bWVudCBtb2RlbA0KLSAgICAgICAgKyAgY2hhcmFjdGVyIGVudGl0aWVzDQotDQotICAgICBUaGUgSW50cmluc2ljIEV2ZW50cyBtb2R1bGUgaXMgaWdub3JlZCBieSBkZWZhdWx0IGJ1dA0KLSAgICAgb2NjdXJzIGluIHRoaXMgbW9kdWxlIGJlY2F1c2UgaXQgbXVzdCBiZSBpbnN0YW50aWF0ZWQNCi0gICAgIHByaW9yIHRvIEF0dHJpYnV0ZXMgYnV0IGFmdGVyIERhdGF0eXBlcy4NCi0tLT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWFyY2gubW9kdWxlICJJR05PUkUiID4NCi08IVsleGh0bWwtYXJjaC5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtYXJjaC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNlIEFyY2hpdGVjdHVyZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1hcmNoLTEubW9kIiA+DQotJXhodG1sLWFyY2gubW9kO11dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtbm90YXRpb25zLm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1ub3RhdGlvbnMubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLW5vdGF0aW9ucy5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTlMgWEhUTUwgTm90YXRpb25zIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLW5vdGF0aW9ucy0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIE5vdGF0aW9ucyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1ub3RhdGlvbnMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJA0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT05TIFhIVE1MIE5vdGF0aW9ucyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ub3RhdGlvbnMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gTm90YXRpb25zDQotDQotICAgICBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgbm90YXRpb25zLCBtYW55IG9mIHRoZXNlIGltcG9ydGVkIGZyb20NCi0gICAgIG90aGVyIHNwZWNpZmljYXRpb25zIGFuZCBzdGFuZGFyZHMuIFdoZW4gYW4gZXhpc3RpbmcgRlBJIGlzDQotICAgICBrbm93biwgaXQgaXMgaW5jb3Jwb3JhdGVkIGhlcmUuDQotLS0+DQotDQotPCEtLSBYTUwgTm90YXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBTR01MIGFuZCBYTUwgTm90YXRpb25zIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBXM0MgWE1MIDEuMCBSZWNvbW1lbmRhdGlvbiAtLT4NCi08IU5PVEFUSU9OIHczYy14bWwNCi0gICAgIFBVQkxJQyAiSVNPIDg4NzkvL05PVEFUSU9OIEV4dGVuc2libGUgTWFya3VwIExhbmd1YWdlIChYTUwpIDEuMC8vRU4iID4NCi0NCi08IS0tIFhNTCAxLjAgQ0RBVEEgLS0+DQotPCFOT1RBVElPTiBjZGF0YQ0KLSAgICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhNTCAxLjA6IENEQVRBLy9FTiIgPg0KLQ0KLTwhLS0gU0dNTCBGb3JtYWwgUHVibGljIElkZW50aWZpZXJzIC0tPg0KLTwhTk9UQVRJT04gZnBpDQotICAgICBQVUJMSUMgIklTTyA4ODc5OjE5ODYvL05PVEFUSU9OIEZvcm1hbCBQdWJsaWMgSWRlbnRpZmllci8vRU4iID4NCi0NCi08IS0tIFhIVE1MIE5vdGF0aW9ucyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIExlbmd0aCBkZWZpbmVkIGZvciBjZWxscGFkZGluZy9jZWxsc3BhY2luZyAtLT4NCi0NCi08IS0tIG5uIGZvciBwaXhlbHMgb3Igbm4lIGZvciBwZXJjZW50YWdlIGxlbmd0aCAtLT4NCi08IU5PVEFUSU9OIGxlbmd0aA0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IExlbmd0aC8vRU4iID4NCi0NCi08IS0tIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGxpbmsgdHlwZXMgLS0+DQotPCFOT1RBVElPTiBsaW5rVHlwZXMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBMaW5rVHlwZXMvL0VOIiA+DQotDQotPCEtLSBzaW5nbGUgb3IgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgZGVzY3JpcHRvcnMgLS0+DQotPCFOT1RBVElPTiBtZWRpYURlc2MNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBNZWRpYURlc2MvL0VOIiA+DQotDQotPCEtLSBwaXhlbCwgcGVyY2VudGFnZSwgb3IgcmVsYXRpdmUgLS0+DQotPCFOT1RBVElPTiBtdWx0aUxlbmd0aA0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IE11bHRpTGVuZ3RoLy9FTiIgPg0KLQ0KLTwhLS0gb25lIG9yIG1vcmUgZGlnaXRzIChOVU1CRVIpIC0tPg0KLTwhTk9UQVRJT04gbnVtYmVyDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogTnVtYmVyLy9FTiIgPg0KLQ0KLTwhLS0gaW50ZWdlciByZXByZXNlbnRpbmcgbGVuZ3RoIGluIHBpeGVscyAtLT4NCi08IU5PVEFUSU9OIHBpeGVscw0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFBpeGVscy8vRU4iID4NCi0NCi08IS0tIHNjcmlwdCBleHByZXNzaW9uIC0tPg0KLTwhTk9UQVRJT04gc2NyaXB0DQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogU2NyaXB0Ly9FTiIgPg0KLQ0KLTwhLS0gdGV4dHVhbCBjb250ZW50IC0tPg0KLTwhTk9UQVRJT04gdGV4dA0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IFRleHQvL0VOIiA+DQotDQotPCEtLSBJbXBvcnRlZCBOb3RhdGlvbnMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSBbSVNPMTA2NDZdIC0tPg0KLTwhTk9UQVRJT04gY2hhcmFjdGVyDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogQ2hhcmFjdGVyLy9FTiIgPg0KLQ0KLTwhLS0gYSBjaGFyYWN0ZXIgZW5jb2RpbmcsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFOT1RBVElPTiBjaGFyc2V0DQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogQ2hhcnNldC8vRU4iID4NCi0NCi08IS0tIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcmFjdGVyIGVuY29kaW5ncywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IU5PVEFUSU9OIGNoYXJzZXRzDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogQ2hhcnNldHMvL0VOIiA+DQotDQotPCEtLSBtZWRpYSB0eXBlLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhTk9UQVRJT04gY29udGVudFR5cGUNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBDb250ZW50VHlwZS8vRU4iID4NCi0NCi08IS0tIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIHR5cGVzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhTk9UQVRJT04gY29udGVudFR5cGVzDQotICAgIFBVQkxJQyAiLS8vVzNDLy9OT1RBVElPTiBYSFRNTCBEYXRhdHlwZTogQ29udGVudFR5cGVzLy9FTiIgPg0KLQ0KLTwhLS0gZGF0ZSBhbmQgdGltZSBpbmZvcm1hdGlvbi4gSVNPIGRhdGUgZm9ybWF0IC0tPg0KLTwhTk9UQVRJT04gZGF0ZXRpbWUNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBEYXRldGltZS8vRU4iID4NCi0NCi08IS0tIGEgbGFuZ3VhZ2UgY29kZSwgYXMgcGVyIFtSRkMzMDY2XSAtLT4NCi08IU5PVEFUSU9OIGxhbmd1YWdlQ29kZQ0KLSAgICBQVUJMSUMgIi0vL1czQy8vTk9UQVRJT04gWEhUTUwgRGF0YXR5cGU6IExhbmd1YWdlQ29kZS8vRU4iID4NCi0NCi08IS0tIGEgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBzZWUgW1VSSV0gLS0+DQotPCFOT1RBVElPTiB1cmkNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBVUkkvL0VOIiA+DQotDQotPCEtLSBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllcnMsIHNlZSBbVVJJXSAtLT4NCi08IU5PVEFUSU9OIHVyaXMNCi0gICAgUFVCTElDICItLy9XM0MvL05PVEFUSU9OIFhIVE1MIERhdGF0eXBlOiBVUklzLy9FTiIgPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLW5vdGF0aW9ucy0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWRhdGF0eXBlcy5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtZGF0YXR5cGVzLm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1kYXRhdHlwZXMubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgRGF0YXR5cGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWRhdGF0eXBlcy0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIERhdGF0eXBlcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1kYXRhdHlwZXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIERhdGF0eXBlcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1kYXRhdHlwZXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gRGF0YXR5cGVzDQotDQotICAgICBkZWZpbmVzIGNvbnRhaW5lcnMgZm9yIHRoZSBmb2xsb3dpbmcgZGF0YXR5cGVzLCBtYW55IG9mDQotICAgICB0aGVzZSBpbXBvcnRlZCBmcm9tIG90aGVyIHNwZWNpZmljYXRpb25zIGFuZCBzdGFuZGFyZHMuDQotLS0+DQotDQotPCEtLSBMZW5ndGggZGVmaW5lZCBmb3IgY2VsbHBhZGRpbmcvY2VsbHNwYWNpbmcgLS0+DQotDQotPCEtLSBubiBmb3IgcGl4ZWxzIG9yIG5uJSBmb3IgcGVyY2VudGFnZSBsZW5ndGggLS0+DQotPCFFTlRJVFkgJSBMZW5ndGguZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBsaW5rIHR5cGVzIC0tPg0KLTwhRU5USVRZICUgTGlua1R5cGVzLmRhdGF0eXBlICJOTVRPS0VOUyIgPg0KLQ0KLTwhLS0gc2luZ2xlIG9yIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIGRlc2NyaXB0b3JzIC0tPg0KLTwhRU5USVRZICUgTWVkaWFEZXNjLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gcGl4ZWwsIHBlcmNlbnRhZ2UsIG9yIHJlbGF0aXZlIC0tPg0KLTwhRU5USVRZICUgTXVsdGlMZW5ndGguZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBvbmUgb3IgbW9yZSBkaWdpdHMgKE5VTUJFUikgLS0+DQotPCFFTlRJVFkgJSBOdW1iZXIuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBpbnRlZ2VyIHJlcHJlc2VudGluZyBsZW5ndGggaW4gcGl4ZWxzIC0tPg0KLTwhRU5USVRZICUgUGl4ZWxzLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gc2NyaXB0IGV4cHJlc3Npb24gLS0+DQotPCFFTlRJVFkgJSBTY3JpcHQuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSB0ZXh0dWFsIGNvbnRlbnQgLS0+DQotPCFFTlRJVFkgJSBUZXh0LmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gSW1wb3J0ZWQgRGF0YXR5cGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gYSBzaW5nbGUgY2hhcmFjdGVyIGZyb20gW0lTTzEwNjQ2XSAtLT4NCi08IUVOVElUWSAlIENoYXJhY3Rlci5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGEgY2hhcmFjdGVyIGVuY29kaW5nLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLTwhRU5USVRZICUgQ2hhcnNldC5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcmFjdGVyIGVuY29kaW5ncywgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IUVOVElUWSAlIENoYXJzZXRzLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gQ29sb3Igc3BlY2lmaWNhdGlvbiB1c2luZyBjb2xvciBuYW1lIG9yIHNSR0IgKCNSUkdHQkIpIHZhbHVlcyAtLT4NCi08IUVOVElUWSAlIENvbG9yLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gbWVkaWEgdHlwZSwgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi08IUVOVElUWSAlIENvbnRlbnRUeXBlLmRhdGF0eXBlICJDREFUQSIgPg0KLQ0KLTwhLS0gY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgbWVkaWEgdHlwZXMsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotPCFFTlRJVFkgJSBDb250ZW50VHlwZXMuZGF0YXR5cGUgIkNEQVRBIiA+DQotDQotPCEtLSBkYXRlIGFuZCB0aW1lIGluZm9ybWF0aW9uLiBJU08gZGF0ZSBmb3JtYXQgLS0+DQotPCFFTlRJVFkgJSBEYXRldGltZS5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGZvcm1hbCBwdWJsaWMgaWRlbnRpZmllciwgYXMgcGVyIFtJU084ODc5XSAtLT4NCi08IUVOVElUWSAlIEZQSS5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGEgbGFuZ3VhZ2UgY29kZSwgYXMgcGVyIFtSRkMzMDY2XSAtLT4NCi08IUVOVElUWSAlIExhbmd1YWdlQ29kZS5kYXRhdHlwZSAiTk1UT0tFTiIgPg0KLQ0KLTwhLS0gYSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIHNlZSBbVVJJXSAtLT4NCi08IUVOVElUWSAlIFVSSS5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVycywgc2VlIFtVUkldIC0tPg0KLTwhRU5USVRZICUgVVJJcy5kYXRhdHlwZSAiQ0RBVEEiID4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1kYXRhdHlwZXMtMS5tb2QgLS0+DQotXV0+DQotDQotPCEtLSBwbGFjZWhvbGRlciBmb3IgWExpbmsgc3VwcG9ydCBtb2R1bGUgLS0+DQotPCFFTlRJVFkgJSB4aHRtbC14bGluay5tb2QgIiIgPg0KLQ0KLQ0KLTwhRU5USVRZICUgeGh0bWwtcW5hbWUubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLXFuYW1lLm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1xbmFtZS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBRdWFsaWZpZWQgTmFtZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtcW5hbWUtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgUW5hbWUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1xbmFtZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgUXVhbGlmaWVkIE5hbWVzIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXFuYW1lLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSMyMDAwLTEwLTIyOiBhZGRlZCBxbmFtZSBkZWNsYXJhdGlvbnMgZm9yIHJ1YnkgZWxlbWVudHMNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gWEhUTUwgUW5hbWUgKFF1YWxpZmllZCBOYW1lKSBNb2R1bGUNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGlzIGNvbnRhaW5lZCBpbiB0d28gcGFydHMsIGxhYmVsZWQgU2VjdGlvbiAnQScgYW5kICdCJzoNCi0NCi0gICAgICAgU2VjdGlvbiBBIGRlY2xhcmVzIHBhcmFtZXRlciBlbnRpdGllcyB0byBzdXBwb3J0IG5hbWVzcGFjZS0NCi0gICAgICAgcXVhbGlmaWVkIG5hbWVzLCBuYW1lc3BhY2UgZGVjbGFyYXRpb25zLCBhbmQgbmFtZSBwcmVmaXhpbmcNCi0gICAgICAgZm9yIFhIVE1MIGFuZCBleHRlbnNpb25zLg0KLQ0KLSAgICAgICBTZWN0aW9uIEIgZGVjbGFyZXMgcGFyYW1ldGVyIGVudGl0aWVzIHVzZWQgdG8gcHJvdmlkZQ0KLSAgICAgICBuYW1lc3BhY2UtcXVhbGlmaWVkIG5hbWVzIGZvciBhbGwgWEhUTUwgZWxlbWVudCB0eXBlczoNCi0NCi0gICAgICAgICAlYXBwbGV0LnFuYW1lOyAgIHRoZSB4bWxucy1xdWFsaWZpZWQgbmFtZSBmb3IgPGFwcGxldD4NCi0gICAgICAgICAlYmFzZS5xbmFtZTsgICAgIHRoZSB4bWxucy1xdWFsaWZpZWQgbmFtZSBmb3IgPGJhc2U+DQotICAgICAgICAgLi4uDQotDQotICAgICBYSFRNTCBleHRlbnNpb25zIHdvdWxkIGNyZWF0ZSBhIG1vZHVsZSBzaW1pbGFyIHRvIHRoaXMgb25lLg0KLSAgICAgSW5jbHVkZWQgaW4gdGhlIFhIVE1MIGRpc3RyaWJ1dGlvbiBpcyBhIHRlbXBsYXRlIG1vZHVsZQ0KLSAgICAgKCd0ZW1wbGF0ZS1xbmFtZS0xLm1vZCcpIHN1aXRhYmxlIGZvciB0aGlzIHB1cnBvc2UuDQotLS0+DQotDQotPCEtLSBTZWN0aW9uIEE6IFhIVE1MIFhNTCBOYW1lc3BhY2UgRnJhbWV3b3JrIDo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6IC0tPg0KLQ0KLTwhLS0gMS4gRGVjbGFyZSBhICVYSFRNTC5wcmVmaXhlZDsgY29uZGl0aW9uYWwgc2VjdGlvbiBrZXl3b3JkLCB1c2VkDQotICAgICAgICB0byBhY3RpdmF0ZSBuYW1lc3BhY2UgcHJlZml4aW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBzaG91bGQNCi0gICAgICAgIGluaGVyaXQgJyVOUy5wcmVmaXhlZDsnIGZyb20gdGhlIERURCBkcml2ZXIsIHNvIHRoYXQgdW5sZXNzDQotICAgICAgICBvdmVycmlkZGVuLCB0aGUgZGVmYXVsdCBiZWhhdmlvdXIgZm9sbG93cyB0aGUgb3ZlcmFsbCBEVEQNCi0gICAgICAgIHByZWZpeGluZyBzY2hlbWUuDQotLS0+DQotPCFFTlRJVFkgJSBOUy5wcmVmaXhlZCAiSUdOT1JFIiA+DQotPCFFTlRJVFkgJSBYSFRNTC5wcmVmaXhlZCAiJU5TLnByZWZpeGVkOyIgPg0KLQ0KLTwhLS0gMi4gRGVjbGFyZSBhIHBhcmFtZXRlciBlbnRpdHkgKGVnLiwgJVhIVE1MLnhtbG5zOykgY29udGFpbmluZw0KLSAgICAgICAgdGhlIFVSSSByZWZlcmVuY2UgdXNlZCB0byBpZGVudGlmeSB0aGUgWEhUTUwgbmFtZXNwYWNlOg0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwueG1sbnMgICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiA+DQotDQotPCEtLSAzLiBEZWNsYXJlIHBhcmFtZXRlciBlbnRpdGllcyAoZWcuLCAlWEhUTUwucHJlZml4OykgY29udGFpbmluZw0KLSAgICAgICAgdGhlIGRlZmF1bHQgbmFtZXNwYWNlIHByZWZpeCBzdHJpbmcocykgdG8gdXNlIHdoZW4gcHJlZml4aW5nDQotICAgICAgICBpcyBlbmFibGVkLiBUaGlzIG1heSBiZSBvdmVycmlkZGVuIGluIHRoZSBEVEQgZHJpdmVyIG9yIHRoZQ0KLSAgICAgICAgaW50ZXJuYWwgc3Vic2V0IG9mIGFuIGRvY3VtZW50IGluc3RhbmNlLiBJZiBubyBkZWZhdWx0IHByZWZpeA0KLSAgICAgICAgaXMgZGVzaXJlZCwgdGhpcyBtYXkgYmUgZGVjbGFyZWQgYXMgYW4gZW1wdHkgc3RyaW5nLg0KLQ0KLSAgICAgTk9URTogQXMgc3BlY2lmaWVkIGluIFtYTUxOQU1FU10sIHRoZSBuYW1lc3BhY2UgcHJlZml4IHNlcnZlcw0KLSAgICAgYXMgYSBwcm94eSBmb3IgdGhlIFVSSSByZWZlcmVuY2UsIGFuZCBpcyBub3QgaW4gaXRzZWxmIHNpZ25pZmljYW50Lg0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwucHJlZml4ICAiIiA+DQotDQotPCEtLSA0LiBEZWNsYXJlIHBhcmFtZXRlciBlbnRpdGllcyAoZWcuLCAlWEhUTUwucGZ4OykgY29udGFpbmluZyB0aGUNCi0gICAgICAgIGNvbG9uaXplZCBwcmVmaXgoZXMpIChlZy4sICclWEhUTUwucHJlZml4OzonKSB1c2VkIHdoZW4NCi0gICAgICAgIHByZWZpeGluZyBpcyBhY3RpdmUsIGFuIGVtcHR5IHN0cmluZyB3aGVuIGl0IGlzIG5vdC4NCi0tLT4NCi08IVslWEhUTUwucHJlZml4ZWQ7Ww0KLTwhRU5USVRZICUgWEhUTUwucGZ4ICAiJVhIVE1MLnByZWZpeDs6IiA+DQotXV0+DQotPCFFTlRJVFkgJSBYSFRNTC5wZnggICIiID4NCi0NCi08IS0tIGRlY2xhcmUgcXVhbGlmaWVkIG5hbWUgZXh0ZW5zaW9ucyBoZXJlIC4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXFuYW1lLWV4dHJhLm1vZCAiIiA+DQotDQotDQotPCEtLSA1LiBUaGUgcGFyYW1ldGVyIGVudGl0eSAlWEhUTUwueG1sbnMuZXh0cmEuYXR0cmliOyBtYXkgYmUNCi0gICAgICAgIHJlZGVjbGFyZWQgdG8gY29udGFpbiBhbnkgbm9uLVhIVE1MIG5hbWVzcGFjZSBkZWNsYXJhdGlvbg0KLSAgICAgICAgYXR0cmlidXRlcyBmb3IgbmFtZXNwYWNlcyBlbWJlZGRlZCBpbiBYSFRNTC4gVGhlIGRlZmF1bHQNCi0gICAgICAgIGlzIGFuIGVtcHR5IHN0cmluZy4gIFhMaW5rIHNob3VsZCBiZSBpbmNsdWRlZCBoZXJlIGlmIHVzZWQNCi0gICAgICAgIGluIHRoZSBEVEQuDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC54bWxucy5leHRyYS5hdHRyaWIgIiIgPg0KLQ0KLTwhLS0gVGhlIHJlbWFpbmRlciBvZiBTZWN0aW9uIEEgaXMgb25seSBmb2xsb3dlZCBpbiBYSFRNTCwgbm90IGV4dGVuc2lvbnMuIC0tPg0KLQ0KLTwhLS0gRGVjbGFyZSBhIHBhcmFtZXRlciBlbnRpdHkgJU5TLmRlY2wuYXR0cmliOyBjb250YWluaW5nDQotICAgICBhbGwgWE1MIE5hbWVzcGFjZSBkZWNsYXJhdGlvbnMgdXNlZCBpbiB0aGUgRFRELCBwbHVzIHRoZQ0KLSAgICAgeG1sbnMgZGVjbGFyYXRpb24gZm9yIFhIVE1MLCBpdHMgZm9ybSBkZXBlbmRlbnQgb24gd2hldGhlcg0KLSAgICAgcHJlZml4aW5nIGlzIGFjdGl2ZS4NCi0tLT4NCi08IVslWEhUTUwucHJlZml4ZWQ7Ww0KLTwhRU5USVRZICUgTlMuZGVjbC5hdHRyaWINCi0gICAgICJ4bWxuczolWEhUTUwucHJlZml4OyAgJVVSSS5kYXRhdHlwZTsgICAjRklYRUQgJyVYSFRNTC54bWxuczsnDQotICAgICAgJVhIVE1MLnhtbG5zLmV4dHJhLmF0dHJpYjsiDQotPg0KLV1dPg0KLTwhRU5USVRZICUgTlMuZGVjbC5hdHRyaWINCi0gICAgICIlWEhUTUwueG1sbnMuZXh0cmEuYXR0cmliOyINCi0+DQotDQotPCEtLSBUaGlzIGlzIGEgcGxhY2Vob2xkZXIgZm9yIGZ1dHVyZSBYTGluayBzdXBwb3J0Lg0KLS0tPg0KLTwhRU5USVRZICUgWExJTksueG1sbnMuYXR0cmliICIiID4NCi0NCi08IS0tIERlY2xhcmUgYSBwYXJhbWV0ZXIgZW50aXR5ICVOUy5kZWNsLmF0dHJpYjsgY29udGFpbmluZyBhbGwNCi0gICAgIFhNTCBuYW1lc3BhY2UgZGVjbGFyYXRpb24gYXR0cmlidXRlcyB1c2VkIGJ5IFhIVE1MLCBpbmNsdWRpbmcNCi0gICAgIGEgZGVmYXVsdCB4bWxucyBhdHRyaWJ1dGUgd2hlbiBwcmVmaXhpbmcgaXMgaW5hY3RpdmUuDQotLS0+DQotPCFbJVhIVE1MLnByZWZpeGVkO1sNCi08IUVOVElUWSAlIFhIVE1MLnhtbG5zLmF0dHJpYg0KLSAgICAgIiVOUy5kZWNsLmF0dHJpYjsNCi0gICAgICAlWExJTksueG1sbnMuYXR0cmliOyINCi0+DQotXV0+DQotPCFFTlRJVFkgJSBYSFRNTC54bWxucy5hdHRyaWINCi0gICAgICJ4bWxucyAgICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNGSVhFRCAnJVhIVE1MLnhtbG5zOycNCi0gICAgICAlWExJTksueG1sbnMuYXR0cmliOyINCi0+DQotDQotPCEtLSBwbGFjZWhvbGRlciBmb3IgcXVhbGlmaWVkIG5hbWUgcmVkZWNsYXJhdGlvbnMgLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1xbmFtZS5yZWRlY2wgIiIgPg0KLQ0KLQ0KLTwhLS0gU2VjdGlvbiBCOiBYSFRNTCBRdWFsaWZpZWQgTmFtZXMgOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjogLS0+DQotDQotPCEtLSA2LiBUaGlzIHNlY3Rpb24gZGVjbGFyZXMgcGFyYW1ldGVyIGVudGl0aWVzIHVzZWQgdG8gcHJvdmlkZQ0KLSAgICAgICAgbmFtZXNwYWNlLXF1YWxpZmllZCBuYW1lcyBmb3IgYWxsIFhIVE1MIGVsZW1lbnQgdHlwZXMuDQotLS0+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1hcHBsZXQtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBhcHBsZXQucW5hbWUgICIlWEhUTUwucGZ4O2FwcGxldCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmFzZS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGJhc2UucW5hbWUgICAgIiVYSFRNTC5wZng7YmFzZSIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmRvLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYmRvLnFuYW1lICAgICAiJVhIVE1MLnBmeDtiZG8iID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWJsa3BocmFzLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYWRkcmVzcy5xbmFtZSAiJVhIVE1MLnBmeDthZGRyZXNzIiA+DQotPCFFTlRJVFkgJSBibG9ja3F1b3RlLnFuYW1lICAiJVhIVE1MLnBmeDtibG9ja3F1b3RlIiA+DQotPCFFTlRJVFkgJSBwcmUucW5hbWUgICAgICIlWEhUTUwucGZ4O3ByZSIgPg0KLTwhRU5USVRZICUgaDEucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoMSIgPg0KLTwhRU5USVRZICUgaDIucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoMiIgPg0KLTwhRU5USVRZICUgaDMucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoMyIgPg0KLTwhRU5USVRZICUgaDQucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoNCIgPg0KLTwhRU5USVRZICUgaDUucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoNSIgPg0KLTwhRU5USVRZICUgaDYucW5hbWUgICAgICAiJVhIVE1MLnBmeDtoNiIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtYmxrcHJlcy0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGhyLnFuYW1lICAgICAgIiVYSFRNTC5wZng7aHIiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWJsa3N0cnVjdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIGRpdi5xbmFtZSAgICAgIiVYSFRNTC5wZng7ZGl2IiA+DQotPCFFTlRJVFkgJSBwLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O3AiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWVkaXQtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBpbnMucW5hbWUgICAgICIlWEhUTUwucGZ4O2lucyIgPg0KLTwhRU5USVRZICUgZGVsLnFuYW1lICAgICAiJVhIVE1MLnBmeDtkZWwiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWZvcm0tMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBmb3JtLnFuYW1lICAgICIlWEhUTUwucGZ4O2Zvcm0iID4NCi08IUVOVElUWSAlIGxhYmVsLnFuYW1lICAgIiVYSFRNTC5wZng7bGFiZWwiID4NCi08IUVOVElUWSAlIGlucHV0LnFuYW1lICAgIiVYSFRNTC5wZng7aW5wdXQiID4NCi08IUVOVElUWSAlIHNlbGVjdC5xbmFtZSAgIiVYSFRNTC5wZng7c2VsZWN0IiA+DQotPCFFTlRJVFkgJSBvcHRncm91cC5xbmFtZSAgIiVYSFRNTC5wZng7b3B0Z3JvdXAiID4NCi08IUVOVElUWSAlIG9wdGlvbi5xbmFtZSAgIiVYSFRNTC5wZng7b3B0aW9uIiA+DQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5xbmFtZSAgIiVYSFRNTC5wZng7dGV4dGFyZWEiID4NCi08IUVOVElUWSAlIGZpZWxkc2V0LnFuYW1lICAiJVhIVE1MLnBmeDtmaWVsZHNldCIgPg0KLTwhRU5USVRZICUgbGVnZW5kLnFuYW1lICAiJVhIVE1MLnBmeDtsZWdlbmQiID4NCi08IUVOVElUWSAlIGJ1dHRvbi5xbmFtZSAgIiVYSFRNTC5wZng7YnV0dG9uIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1oeXBlcnRleHQtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBhLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O2EiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWltYWdlLTEubW9kIC0tPg0KLTwhRU5USVRZICUgaW1nLnFuYW1lICAgICAiJVhIVE1MLnBmeDtpbWciID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWlubHBocmFzLTEubW9kIC0tPg0KLTwhRU5USVRZICUgYWJici5xbmFtZSAgICAiJVhIVE1MLnBmeDthYmJyIiA+DQotPCFFTlRJVFkgJSBhY3JvbnltLnFuYW1lICIlWEhUTUwucGZ4O2Fjcm9ueW0iID4NCi08IUVOVElUWSAlIGNpdGUucW5hbWUgICAgIiVYSFRNTC5wZng7Y2l0ZSIgPg0KLTwhRU5USVRZICUgY29kZS5xbmFtZSAgICAiJVhIVE1MLnBmeDtjb2RlIiA+DQotPCFFTlRJVFkgJSBkZm4ucW5hbWUgICAgICIlWEhUTUwucGZ4O2RmbiIgPg0KLTwhRU5USVRZICUgZW0ucW5hbWUgICAgICAiJVhIVE1MLnBmeDtlbSIgPg0KLTwhRU5USVRZICUga2JkLnFuYW1lICAgICAiJVhIVE1MLnBmeDtrYmQiID4NCi08IUVOVElUWSAlIHEucW5hbWUgICAgICAgIiVYSFRNTC5wZng7cSIgPg0KLTwhRU5USVRZICUgc2FtcC5xbmFtZSAgICAiJVhIVE1MLnBmeDtzYW1wIiA+DQotPCFFTlRJVFkgJSBzdHJvbmcucW5hbWUgICIlWEhUTUwucGZ4O3N0cm9uZyIgPg0KLTwhRU5USVRZICUgdmFyLnFuYW1lICAgICAiJVhIVE1MLnBmeDt2YXIiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWlubHByZXMtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBiLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O2IiID4NCi08IUVOVElUWSAlIGJpZy5xbmFtZSAgICAgIiVYSFRNTC5wZng7YmlnIiA+DQotPCFFTlRJVFkgJSBpLnFuYW1lICAgICAgICIlWEhUTUwucGZ4O2kiID4NCi08IUVOVElUWSAlIHNtYWxsLnFuYW1lICAgIiVYSFRNTC5wZng7c21hbGwiID4NCi08IUVOVElUWSAlIHN1Yi5xbmFtZSAgICAgIiVYSFRNTC5wZng7c3ViIiA+DQotPCFFTlRJVFkgJSBzdXAucW5hbWUgICAgICIlWEhUTUwucGZ4O3N1cCIgPg0KLTwhRU5USVRZICUgdHQucW5hbWUgICAgICAiJVhIVE1MLnBmeDt0dCIgPg0KLQ0KLTwhLS0gbW9kdWxlOiAgeGh0bWwtaW5sc3RydWN0LTEubW9kIC0tPg0KLTwhRU5USVRZICUgYnIucW5hbWUgICAgICAiJVhIVE1MLnBmeDticiIgPg0KLTwhRU5USVRZICUgc3Bhbi5xbmFtZSAgICAiJVhIVE1MLnBmeDtzcGFuIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pc21hcC0xLm1vZCAoYWxzbyBjc2lzbWFwLCBzc2lzbWFwKSAtLT4NCi08IUVOVElUWSAlIG1hcC5xbmFtZSAgICAgIiVYSFRNTC5wZng7bWFwIiA+DQotPCFFTlRJVFkgJSBhcmVhLnFuYW1lICAgICIlWEhUTUwucGZ4O2FyZWEiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWxpbmstMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBsaW5rLnFuYW1lICAgICIlWEhUTUwucGZ4O2xpbmsiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLWxpc3QtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBkbC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2RsIiA+DQotPCFFTlRJVFkgJSBkdC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2R0IiA+DQotPCFFTlRJVFkgJSBkZC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2RkIiA+DQotPCFFTlRJVFkgJSBvbC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O29sIiA+DQotPCFFTlRJVFkgJSB1bC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3VsIiA+DQotPCFFTlRJVFkgJSBsaS5xbmFtZSAgICAgICIlWEhUTUwucGZ4O2xpIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1tZXRhLTEubW9kIC0tPg0KLTwhRU5USVRZICUgbWV0YS5xbmFtZSAgICAiJVhIVE1MLnBmeDttZXRhIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1wYXJhbS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIHBhcmFtLnFuYW1lICAgIiVYSFRNTC5wZng7cGFyYW0iID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLW9iamVjdC0xLm1vZCAtLT4NCi08IUVOVElUWSAlIG9iamVjdC5xbmFtZSAgIiVYSFRNTC5wZng7b2JqZWN0IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1zY3JpcHQtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBzY3JpcHQucW5hbWUgICIlWEhUTUwucGZ4O3NjcmlwdCIgPg0KLTwhRU5USVRZICUgbm9zY3JpcHQucW5hbWUgICIlWEhUTUwucGZ4O25vc2NyaXB0IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1zdHJ1Y3QtMS5tb2QgLS0+DQotPCFFTlRJVFkgJSBodG1sLnFuYW1lICAgICIlWEhUTUwucGZ4O2h0bWwiID4NCi08IUVOVElUWSAlIGhlYWQucW5hbWUgICAgIiVYSFRNTC5wZng7aGVhZCIgPg0KLTwhRU5USVRZICUgdGl0bGUucW5hbWUgICAiJVhIVE1MLnBmeDt0aXRsZSIgPg0KLTwhRU5USVRZICUgYm9keS5xbmFtZSAgICAiJVhIVE1MLnBmeDtib2R5IiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1zdHlsZS0xLm1vZCAtLT4NCi08IUVOVElUWSAlIHN0eWxlLnFuYW1lICAgIiVYSFRNTC5wZng7c3R5bGUiID4NCi0NCi08IS0tIG1vZHVsZTogIHhodG1sLXRhYmxlLTEubW9kIC0tPg0KLTwhRU5USVRZICUgdGFibGUucW5hbWUgICAiJVhIVE1MLnBmeDt0YWJsZSIgPg0KLTwhRU5USVRZICUgY2FwdGlvbi5xbmFtZSAiJVhIVE1MLnBmeDtjYXB0aW9uIiA+DQotPCFFTlRJVFkgJSB0aGVhZC5xbmFtZSAgICIlWEhUTUwucGZ4O3RoZWFkIiA+DQotPCFFTlRJVFkgJSB0Zm9vdC5xbmFtZSAgICIlWEhUTUwucGZ4O3Rmb290IiA+DQotPCFFTlRJVFkgJSB0Ym9keS5xbmFtZSAgICIlWEhUTUwucGZ4O3Rib2R5IiA+DQotPCFFTlRJVFkgJSBjb2xncm91cC5xbmFtZSAgIiVYSFRNTC5wZng7Y29sZ3JvdXAiID4NCi08IUVOVElUWSAlIGNvbC5xbmFtZSAgICAgIiVYSFRNTC5wZng7Y29sIiA+DQotPCFFTlRJVFkgJSB0ci5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3RyIiA+DQotPCFFTlRJVFkgJSB0aC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3RoIiA+DQotPCFFTlRJVFkgJSB0ZC5xbmFtZSAgICAgICIlWEhUTUwucGZ4O3RkIiA+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1ydWJ5LTEubW9kIC0tPg0KLQ0KLTwhRU5USVRZICUgcnVieS5xbmFtZSAgICAiJVhIVE1MLnBmeDtydWJ5IiA+DQotPCFFTlRJVFkgJSByYmMucW5hbWUgICAgICIlWEhUTUwucGZ4O3JiYyIgPg0KLTwhRU5USVRZICUgcnRjLnFuYW1lICAgICAiJVhIVE1MLnBmeDtydGMiID4NCi08IUVOVElUWSAlIHJiLnFuYW1lICAgICAgIiVYSFRNTC5wZng7cmIiID4NCi08IUVOVElUWSAlIHJ0LnFuYW1lICAgICAgIiVYSFRNTC5wZng7cnQiID4NCi08IUVOVElUWSAlIHJwLnFuYW1lICAgICAgIiVYSFRNTC5wZng7cnAiID4NCi0NCi08IS0tIFByb3Zpc2lvbmFsIFhIVE1MIDIuMCBRdWFsaWZpZWQgTmFtZXMgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBtb2R1bGU6ICB4aHRtbC1pbWFnZS0yLm1vZCAtLT4NCi08IUVOVElUWSAlIGFsdC5xbmFtZSAgICAgIiVYSFRNTC5wZng7YWx0IiA+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtcW5hbWUtMS5tb2QgLS0+DQotXV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1ldmVudHMubW9kdWxlICJJR05PUkUiID4NCi08IVsleGh0bWwtZXZlbnRzLm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1ldmVudHMubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgSW50cmluc2ljIEV2ZW50cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1ldmVudHMtMS5tb2QiID4NCi0leGh0bWwtZXZlbnRzLm1vZDtdXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWF0dHJpYnMubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWF0dHJpYnMubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWF0dHJpYnMubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgQ29tbW9uIEF0dHJpYnV0ZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAieGh0bWwtYXR0cmlicy0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIENvbW1vbiBBdHRyaWJ1dGVzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1hdHRyaWJzLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBDb21tb24gQXR0cmlidXRlcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1hdHRyaWJzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIENvbW1vbiBBdHRyaWJ1dGVzDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyBtYW55IG9mIHRoZSBjb21tb24gYXR0cmlidXRlcyBmb3IgdGhlIFhIVE1MIERURC4NCi0gICAgICVOUy5kZWNsLmF0dHJpYjsgaXMgZGVjbGFyZWQgaW4gdGhlIFhIVE1MIFFuYW1lIG1vZHVsZS4NCi0tLT4NCi0NCi08IUVOVElUWSAlIGlkLmF0dHJpYg0KLSAgICAgImlkICAgICAgICAgICBJRCAgICAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhRU5USVRZICUgY2xhc3MuYXR0cmliDQotICAgICAiY2xhc3MgICAgICAgIE5NVE9LRU5TICAgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCFFTlRJVFkgJSB0aXRsZS5hdHRyaWINCi0gICAgICJ0aXRsZSAgICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNJTVBMSUVEIg0KLT4NCi0NCi08IUVOVElUWSAlIENvcmUuZXh0cmEuYXR0cmliICIiID4NCi0NCi08IUVOVElUWSAlIENvcmUuYXR0cmliDQotICAgICAiJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAlaWQuYXR0cmliOw0KLSAgICAgICVjbGFzcy5hdHRyaWI7DQotICAgICAgJXRpdGxlLmF0dHJpYjsNCi0gICAgICAlQ29yZS5leHRyYS5hdHRyaWI7Ig0KLT4NCi0NCi08IUVOVElUWSAlIGxhbmcuYXR0cmliDQotICAgICAieG1sOmxhbmcgICAgICVMYW5ndWFnZUNvZGUuZGF0YXR5cGU7ICAjSU1QTElFRCINCi0+DQotDQotPCFbJVhIVE1MLmJpZGk7Ww0KLTwhRU5USVRZICUgZGlyLmF0dHJpYg0KLSAgICAgImRpciAgICAgICAgICAoIGx0ciB8IHJ0bCApICAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhRU5USVRZICUgSTE4bi5hdHRyaWINCi0gICAgICIlZGlyLmF0dHJpYjsNCi0gICAgICAlbGFuZy5hdHRyaWI7Ig0KLT4NCi0NCi1dXT4NCi08IUVOVElUWSAlIEkxOG4uYXR0cmliDQotICAgICAiJWxhbmcuYXR0cmliOyINCi0+DQotDQotPCFFTlRJVFkgJSBDb21tb24uZXh0cmEuYXR0cmliICIiID4NCi0NCi08IS0tIGludHJpbnNpYyBldmVudCBhdHRyaWJ1dGVzIGRlY2xhcmVkIHByZXZpb3VzbHkNCi0tLT4NCi08IUVOVElUWSAlIEV2ZW50cy5hdHRyaWIgIiIgPg0KLQ0KLTwhRU5USVRZICUgQ29tbW9uLmF0dHJpYg0KLSAgICAgIiVDb3JlLmF0dHJpYjsNCi0gICAgICAlSTE4bi5hdHRyaWI7DQotICAgICAgJUV2ZW50cy5hdHRyaWI7DQotICAgICAgJUNvbW1vbi5leHRyYS5hdHRyaWI7Ig0KLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1hdHRyaWJzLTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhLS0gcGxhY2Vob2xkZXIgZm9yIGNvbnRlbnQgbW9kZWwgcmVkZWNsYXJhdGlvbnMgLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1tb2RlbC5yZWRlY2wgIiIgPg0KLQ0KLQ0KLTwhRU5USVRZICUgeGh0bWwtbW9kZWwubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLW1vZGVsLm1vZHVsZTtbDQotPCEtLSBpbnN0YW50aWF0ZSB0aGUgRG9jdW1lbnQgTW9kZWwgbW9kdWxlIGRlY2xhcmVkIGluIHRoZSBEVEQgZHJpdmVyDQotLS0+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIE1vYmlsZSAxLjAgRG9jdW1lbnQgTW9kZWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1tb2JpbGUxMC1tb2RlbC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCBNb2JpbGUsIGEgcHJvcGVyIHN1YnNldCBvZiBYSFRNTC4NCi0gICAgIAlAV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0sIEx0ZC4gMjAwMS4NCi0NCi0JVGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlIGFyZSBhdmFpbGFibGUgZnJvbSB0aGUgV2lyZWxlc3MgQXBwbGljYXRpb24gUHJvdG9jb2wgRm9ydW0gTHRkLiANCi0JV2ViIHNpdGUgKGh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL3doYXQvY29weXJpZ2h0Lmh0bSkuDQotICAgIA0KLS0tPg0KLTwhLS0gWEhUTUwgTW9iaWxlIERvY3VtZW50IE1vZGVsDQotDQotICAgICBUaGlzIG1vZHVsZSBkZXNjcmliZXMgdGhlIGdyb3VwaW5ncyBvZiBlbGVtZW50cyB0aGF0IG1ha2UgdXANCi0gICAgIGNvbW1vbiBjb250ZW50IG1vZGVscyBmb3IgWEhUTUwgZWxlbWVudHMuDQotLS0+DQotDQotPCEtLSBPcHRpb25hbCBFbGVtZW50cyBpbiBoZWFkICAuLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIEhlYWRPcHRzLm1peA0KLSAgICAgIiggJW1ldGEucW5hbWU7IHwgJWxpbmsucW5hbWU7IHwgJW9iamVjdC5xbmFtZTsgfCAlc3R5bGUucW5hbWU7ICkqIiA+DQotDQotPCEtLSBNaXNjZWxsYW5lb3VzIEVsZW1lbnRzICAuLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIE1pc2MuY2xhc3MgIiIgPg0KLQ0KLTwhLS0gSW5saW5lIEVsZW1lbnRzICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBJbmxTdHJ1Y3QuY2xhc3MgIiVici5xbmFtZTsgfCAlc3Bhbi5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIElubFBocmFzLmNsYXNzDQotICAgICAifCAlZW0ucW5hbWU7IHwgJXN0cm9uZy5xbmFtZTsgfCAlZGZuLnFuYW1lOyB8ICVjb2RlLnFuYW1lOw0KLSAgICAgIHwgJXNhbXAucW5hbWU7IHwgJWtiZC5xbmFtZTsgfCAldmFyLnFuYW1lOyB8ICVjaXRlLnFuYW1lOw0KLSAgICAgIHwgJWFiYnIucW5hbWU7IHwgJWFjcm9ueW0ucW5hbWU7IHwgJXEucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBJbmxQcmVzLmNsYXNzDQotICAgICAifCAlaS5xbmFtZTsgfCAlYi5xbmFtZTsgfCAlYmlnLnFuYW1lOyB8ICVzbWFsbC5xbmFtZTsgIiA+DQotDQotDQotPCFFTlRJVFkgJSBJMThuLmNsYXNzICIiID4NCi0NCi08IUVOVElUWSAlIEFuY2hvci5jbGFzcyAifCAlYS5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIElubFNwZWNpYWwuY2xhc3MgInwgJWltZy5xbmFtZTsgfCAlb2JqZWN0LnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgSW5sRm9ybS5jbGFzcw0KLSAgICAgInwgJWlucHV0LnFuYW1lOyB8ICVzZWxlY3QucW5hbWU7IHwgJXRleHRhcmVhLnFuYW1lOw0KLSAgICAgIHwgJWxhYmVsLnFuYW1lOyINCi0+DQotDQotPCFFTlRJVFkgJSBJbmxpbmUuZXh0cmEgIiIgPg0KLQ0KLTwhRU5USVRZICUgSW5saW5lLmNsYXNzDQotICAgICAiJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICAlSW5sU3BlY2lhbC5jbGFzczsNCi0gICAgICAlSW5sRm9ybS5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyINCi0+DQotDQotPCFFTlRJVFkgJSBJbmxOb0FuY2hvci5jbGFzcw0KLSAgICAgIiVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgICVJbmxTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVJbmxGb3JtLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7Ig0KLT4NCi0NCi08IUVOVElUWSAlIElubE5vQW5jaG9yLm1peA0KLSAgICAgIiVJbmxOb0FuY2hvci5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhRU5USVRZICUgSW5saW5lLm1peA0KLSAgICAgIiVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IS0tIEJsb2NrIEVsZW1lbnRzICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgSGVhZGluZy5jbGFzcw0KLSAgICAgIiVoMS5xbmFtZTsgfCAlaDIucW5hbWU7IHwgJWgzLnFuYW1lOw0KLSAgICAgIHwgJWg0LnFuYW1lOyB8ICVoNS5xbmFtZTsgfCAlaDYucW5hbWU7Ig0KLT4NCi08IUVOVElUWSAlIExpc3QuY2xhc3MgICIldWwucW5hbWU7IHwgJW9sLnFuYW1lOyB8ICVkbC5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIFRhYmxlLmNsYXNzICJ8ICV0YWJsZS5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIEZvcm0uY2xhc3MgICJ8ICVmb3JtLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgRmllbGRzZXQuY2xhc3MgICJ8ICVmaWVsZHNldC5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIEJsa1N0cnVjdC5jbGFzcyAiJXAucW5hbWU7IHwgJWRpdi5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIEJsa1BocmFzLmNsYXNzDQotICAgICAifCAlcHJlLnFuYW1lOyB8ICVibG9ja3F1b3RlLnFuYW1lOyB8ICVhZGRyZXNzLnFuYW1lOyINCi0+DQotDQotPCFFTlRJVFkgJSBCbGtQcmVzLmNsYXNzICJ8ICVoci5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIEJsa1NwZWNpYWwuY2xhc3MNCi0gICAgICIlVGFibGUuY2xhc3M7DQotICAgICAgJUZvcm0uY2xhc3M7DQotICAgICAgJUZpZWxkc2V0LmNsYXNzOyINCi0+DQotDQotPCFFTlRJVFkgJSBCbG9jay5leHRyYSAiIiA+DQotDQotPCFFTlRJVFkgJSBCbG9jay5jbGFzcw0KLSAgICAgIiVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVCbGtQcmVzLmNsYXNzOw0KLSAgICAgICVCbGtTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVCbG9jay5leHRyYTsiDQotPg0KLQ0KLTwhRU5USVRZICUgQmxrTm9Gb3JtLm1peA0KLSAgICAgIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlQmxrUHJlcy5jbGFzczsNCi0gICAgICAlVGFibGUuY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCFFTlRJVFkgJSBCbG9jay5taXgNCi0gICAgICIlSGVhZGluZy5jbGFzczsNCi0gICAgICB8ICVMaXN0LmNsYXNzOw0KLSAgICAgIHwgJUJsb2NrLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCEtLSBBbGwgQ29udGVudCBFbGVtZW50cyAgLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIGRlY2xhcmVzIGFsbCBjb250ZW50IGV4Y2VwdCB0YWJsZXMNCi0tLT4NCi08IUVOVElUWSAlIEZsb3dOb1RhYmxlLm1peA0KLSAgICAgIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxrU3RydWN0LmNsYXNzOw0KLSAgICAgICVCbGtQaHJhcy5jbGFzczsNCi0gICAgICAlRm9ybS5jbGFzczsNCi0gICAgICAlQmxvY2suZXh0cmE7DQotICAgICAgfCAlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotDQotPCFFTlRJVFkgJSBGbG93Lm1peA0KLSAgICAgIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxvY2suY2xhc3M7DQotICAgICAgfCAlSW5saW5lLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtbW9iaWxlMTAtbW9kZWwtMS5tb2QgLS0+DQotXV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1jaGFyZW50Lm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1jaGFyZW50Lm1vZHVsZTtbDQotPCFFTlRJVFkgJSB4aHRtbC1jaGFyZW50Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFhIVE1MIENoYXJhY3RlciBFbnRpdGllcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1jaGFyZW50LTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQ2hhcmFjdGVyIEVudGl0aWVzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1jaGFyZW50LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBYSFRNTCBDaGFyYWN0ZXIgRW50aXRpZXMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtY2hhcmVudC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBDaGFyYWN0ZXIgRW50aXRpZXMgZm9yIFhIVE1MDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgc2V0IG9mIGNoYXJhY3RlciBlbnRpdGllcyBmb3IgWEhUTUwsDQotICAgICBpbmNsdWRpbmcgdGhlIExhdGluIDEsIFN5bWJvbCBhbmQgU3BlY2lhbCBjaGFyYWN0ZXIgY29sbGVjdGlvbnMuDQotLS0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1sYXQxDQotICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBMYXRpbiAxIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAieGh0bWwtbGF0MS5lbnQiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYTUwtY29tcGF0aWJsZSBJU08gTGF0aW4gMSBDaGFyYWN0ZXIgRW50aXR5IFNldCBmb3IgWEhUTUwgLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbGF0MS5lbnQNCi0NCi0gICAgIFR5cGljYWwgaW52b2NhdGlvbjoNCi0NCi0gICAgICAgPCFFTlRJVFkgJSB4aHRtbC1sYXQxDQotICAgICAgICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgTGF0aW4gMSBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgICAgICAgICJ4aHRtbC1sYXQxLmVudCIgPg0KLSAgICAgICAleGh0bWwtbGF0MTsNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIExhdGluIDEgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGF0MS5lbnQiDQotDQotICAgICBSZXZpc2lvbjogICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBQb3J0aW9ucyAoQykgSW50ZXJuYXRpb25hbCBPcmdhbml6YXRpb24gZm9yIFN0YW5kYXJkaXphdGlvbiAxOTg2Og0KLSAgICAgUGVybWlzc2lvbiB0byBjb3B5IGluIGFueSBmb3JtIGlzIGdyYW50ZWQgZm9yIHVzZSB3aXRoIGNvbmZvcm1pbmcNCi0gICAgIFNHTUwgc3lzdGVtcyBhbmQgYXBwbGljYXRpb25zIGFzIGRlZmluZWQgaW4gSVNPIDg4NzksIHByb3ZpZGVkDQotICAgICB0aGlzIG5vdGljZSBpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzLg0KLS0tPg0KLQ0KLTwhRU5USVRZIG5ic3AgICAiJiMxNjA7IiA+PCEtLSBuby1icmVhayBzcGFjZSA9IG5vbi1icmVha2luZyBzcGFjZSwgVSswMEEwIElTT251bSAtLT4NCi08IUVOVElUWSBpZXhjbCAgIiYjMTYxOyIgPjwhLS0gaW52ZXJ0ZWQgZXhjbGFtYXRpb24gbWFyaywgVSswMEExIElTT251bSAtLT4NCi08IUVOVElUWSBjZW50ICAgIiYjMTYyOyIgPjwhLS0gY2VudCBzaWduLCBVKzAwQTIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHBvdW5kICAiJiMxNjM7IiA+PCEtLSBwb3VuZCBzaWduLCBVKzAwQTMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGN1cnJlbiAiJiMxNjQ7IiA+PCEtLSBjdXJyZW5jeSBzaWduLCBVKzAwQTQgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHllbiAgICAiJiMxNjU7IiA+PCEtLSB5ZW4gc2lnbiA9IHl1YW4gc2lnbiwgVSswMEE1IElTT251bSAtLT4NCi08IUVOVElUWSBicnZiYXIgIiYjMTY2OyIgPjwhLS0gYnJva2VuIGJhciA9IGJyb2tlbiB2ZXJ0aWNhbCBiYXIsIFUrMDBBNiBJU09udW0gLS0+DQotPCFFTlRJVFkgc2VjdCAgICImIzE2NzsiID48IS0tIHNlY3Rpb24gc2lnbiwgVSswMEE3IElTT251bSAtLT4NCi08IUVOVElUWSB1bWwgICAgIiYjMTY4OyIgPjwhLS0gZGlhZXJlc2lzID0gc3BhY2luZyBkaWFlcmVzaXMsIFUrMDBBOCBJU09kaWEgLS0+DQotPCFFTlRJVFkgY29weSAgICImIzE2OTsiID48IS0tIGNvcHlyaWdodCBzaWduLCBVKzAwQTkgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG9yZGYgICAiJiMxNzA7IiA+PCEtLSBmZW1pbmluZSBvcmRpbmFsIGluZGljYXRvciwgVSswMEFBIElTT251bSAtLT4NCi08IUVOVElUWSBsYXF1byAgIiYjMTcxOyIgPjwhLS0gbGVmdC1wb2ludGluZyBkb3VibGUgYW5nbGUgcXVvdGF0aW9uIG1hcmsgPSBsZWZ0IHBvaW50aW5nIGd1aWxsZW1ldCwgVSswMEFCIElTT251bSAtLT4NCi08IUVOVElUWSBub3QgICAgIiYjMTcyOyIgPjwhLS0gbm90IHNpZ24sIFUrMDBBQyBJU09udW0gLS0+DQotPCFFTlRJVFkgc2h5ICAgICImIzE3MzsiID48IS0tIHNvZnQgaHlwaGVuID0gZGlzY3JldGlvbmFyeSBoeXBoZW4sIFUrMDBBRCBJU09udW0gLS0+DQotPCFFTlRJVFkgcmVnICAgICImIzE3NDsiID48IS0tIHJlZ2lzdGVyZWQgc2lnbiA9IHJlZ2lzdGVyZWQgdHJhZGUgbWFyayBzaWduLCBVKzAwQUUgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG1hY3IgICAiJiMxNzU7IiA+PCEtLSBtYWNyb24gPSBzcGFjaW5nIG1hY3JvbiA9IG92ZXJsaW5lID0gQVBMIG92ZXJiYXIsIFUrMDBBRiBJU09kaWEgLS0+DQotPCFFTlRJVFkgZGVnICAgICImIzE3NjsiID48IS0tIGRlZ3JlZSBzaWduLCBVKzAwQjAgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHBsdXNtbiAiJiMxNzc7IiA+PCEtLSBwbHVzLW1pbnVzIHNpZ24gPSBwbHVzLW9yLW1pbnVzIHNpZ24sIFUrMDBCMSBJU09udW0gLS0+DQotPCFFTlRJVFkgc3VwMiAgICImIzE3ODsiID48IS0tIHN1cGVyc2NyaXB0IHR3byA9IHN1cGVyc2NyaXB0IGRpZ2l0IHR3byA9IHNxdWFyZWQsIFUrMDBCMiBJU09udW0gLS0+DQotPCFFTlRJVFkgc3VwMyAgICImIzE3OTsiID48IS0tIHN1cGVyc2NyaXB0IHRocmVlID0gc3VwZXJzY3JpcHQgZGlnaXQgdGhyZWUgPSBjdWJlZCwgVSswMEIzIElTT251bSAtLT4NCi08IUVOVElUWSBhY3V0ZSAgIiYjMTgwOyIgPjwhLS0gYWN1dGUgYWNjZW50ID0gc3BhY2luZyBhY3V0ZSwgVSswMEI0IElTT2RpYSAtLT4NCi08IUVOVElUWSBtaWNybyAgIiYjMTgxOyIgPjwhLS0gbWljcm8gc2lnbiwgVSswMEI1IElTT251bSAtLT4NCi08IUVOVElUWSBwYXJhICAgIiYjMTgyOyIgPjwhLS0gcGlsY3JvdyBzaWduID0gcGFyYWdyYXBoIHNpZ24sIFUrMDBCNiBJU09udW0gLS0+DQotPCFFTlRJVFkgbWlkZG90ICImIzE4MzsiID48IS0tIG1pZGRsZSBkb3QgPSBHZW9yZ2lhbiBjb21tYSA9IEdyZWVrIG1pZGRsZSBkb3QsIFUrMDBCNyBJU09udW0gLS0+DQotPCFFTlRJVFkgY2VkaWwgICImIzE4NDsiID48IS0tIGNlZGlsbGEgPSBzcGFjaW5nIGNlZGlsbGEsIFUrMDBCOCBJU09kaWEgLS0+DQotPCFFTlRJVFkgc3VwMSAgICImIzE4NTsiID48IS0tIHN1cGVyc2NyaXB0IG9uZSA9IHN1cGVyc2NyaXB0IGRpZ2l0IG9uZSwgVSswMEI5IElTT251bSAtLT4NCi08IUVOVElUWSBvcmRtICAgIiYjMTg2OyIgPjwhLS0gbWFzY3VsaW5lIG9yZGluYWwgaW5kaWNhdG9yLCBVKzAwQkEgSVNPbnVtIC0tPg0KLTwhRU5USVRZIHJhcXVvICAiJiMxODc7IiA+PCEtLSByaWdodC1wb2ludGluZyBkb3VibGUgYW5nbGUgcXVvdGF0aW9uIG1hcmsgPSByaWdodCBwb2ludGluZyBndWlsbGVtZXQsIFUrMDBCQiBJU09udW0gLS0+DQotPCFFTlRJVFkgZnJhYzE0ICImIzE4ODsiID48IS0tIHZ1bGdhciBmcmFjdGlvbiBvbmUgcXVhcnRlciA9IGZyYWN0aW9uIG9uZSBxdWFydGVyLCBVKzAwQkMgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGZyYWMxMiAiJiMxODk7IiA+PCEtLSB2dWxnYXIgZnJhY3Rpb24gb25lIGhhbGYgPSBmcmFjdGlvbiBvbmUgaGFsZiwgVSswMEJEIElTT251bSAtLT4NCi08IUVOVElUWSBmcmFjMzQgIiYjMTkwOyIgPjwhLS0gdnVsZ2FyIGZyYWN0aW9uIHRocmVlIHF1YXJ0ZXJzID0gZnJhY3Rpb24gdGhyZWUgcXVhcnRlcnMsIFUrMDBCRSBJU09udW0gLS0+DQotPCFFTlRJVFkgaXF1ZXN0ICImIzE5MTsiID48IS0tIGludmVydGVkIHF1ZXN0aW9uIG1hcmsgPSB0dXJuZWQgcXVlc3Rpb24gbWFyaywgVSswMEJGIElTT251bSAtLT4NCi08IUVOVElUWSBBZ3JhdmUgIiYjMTkyOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBBIHdpdGggZ3JhdmUgPSBsYXRpbiBjYXBpdGFsIEEgZ3JhdmUsIFUrMDBDMCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEFhY3V0ZSAiJiMxOTM7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCBhY3V0ZSwgVSswMEMxIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQWNpcmMgICImIzE5NDsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBDMiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEF0aWxkZSAiJiMxOTU7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEEgd2l0aCB0aWxkZSwgVSswMEMzIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQXVtbCAgICImIzE5NjsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIGRpYWVyZXNpcywgVSswMEM0IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQXJpbmcgICImIzE5NzsiID48IS0tIGxhdGluIGNhcGl0YWwgQSB3aXRoIHJpbmcgYWJvdmUgPSBsYXRpbiBjYXBpdGFsIEEgcmluZywgVSswMEM1IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgQUVsaWcgICImIzE5ODsiID48IS0tIGxhdGluIGNhcGl0YWwgQUUgPSBsYXRpbiBjYXBpdGFsIGxpZ2F0dXJlIEFFLCBVKzAwQzYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBDY2VkaWwgIiYjMTk5OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBDIHdpdGggY2VkaWxsYSwgVSswMEM3IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgRWdyYXZlICImIzIwMDsiID48IS0tIGxhdGluIGNhcGl0YWwgRSB3aXRoIGdyYXZlLCBVKzAwQzggSVNPbGF0MSAtLT4NCi08IUVOVElUWSBFYWN1dGUgIiYjMjAxOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBFIHdpdGggYWN1dGUsIFUrMDBDOSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEVjaXJjICAiJiMyMDI7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEUgd2l0aCBjaXJjdW1mbGV4LCBVKzAwQ0EgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBFdW1sICAgIiYjMjAzOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBFIHdpdGggZGlhZXJlc2lzLCBVKzAwQ0IgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBJZ3JhdmUgIiYjMjA0OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBJIHdpdGggZ3JhdmUsIFUrMDBDQyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIElhY3V0ZSAiJiMyMDU7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEkgd2l0aCBhY3V0ZSwgVSswMENEIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgSWNpcmMgICImIzIwNjsiID48IS0tIGxhdGluIGNhcGl0YWwgSSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBDRSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEl1bWwgICAiJiMyMDc7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEkgd2l0aCBkaWFlcmVzaXMsIFUrMDBDRiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIEVUSCAgICAiJiMyMDg7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIEVUSCwgVSswMEQwIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgTnRpbGRlICImIzIwOTsiID48IS0tIGxhdGluIGNhcGl0YWwgTiB3aXRoIHRpbGRlLCBVKzAwRDEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBPZ3JhdmUgIiYjMjEwOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBPIHdpdGggZ3JhdmUsIFUrMDBEMiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE9hY3V0ZSAiJiMyMTE7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCBhY3V0ZSwgVSswMEQzIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT2NpcmMgICImIzIxMjsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIGNpcmN1bWZsZXgsIFUrMDBENCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIE90aWxkZSAiJiMyMTM7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIE8gd2l0aCB0aWxkZSwgVSswMEQ1IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgT3VtbCAgICImIzIxNDsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIGRpYWVyZXNpcywgVSswMEQ2IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdGltZXMgICImIzIxNTsiID48IS0tIG11bHRpcGxpY2F0aW9uIHNpZ24sIFUrMDBENyBJU09udW0gLS0+DQotPCFFTlRJVFkgT3NsYXNoICImIzIxNjsiID48IS0tIGxhdGluIGNhcGl0YWwgTyB3aXRoIHN0cm9rZSA9IGxhdGluIGNhcGl0YWwgTyBzbGFzaCwgVSswMEQ4IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgVWdyYXZlICImIzIxNzsiID48IS0tIGxhdGluIGNhcGl0YWwgVSB3aXRoIGdyYXZlLCBVKzAwRDkgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBVYWN1dGUgIiYjMjE4OyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBVIHdpdGggYWN1dGUsIFUrMDBEQSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFVjaXJjICAiJiMyMTk7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFUgd2l0aCBjaXJjdW1mbGV4LCBVKzAwREIgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBVdW1sICAgIiYjMjIwOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBVIHdpdGggZGlhZXJlc2lzLCBVKzAwREMgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBZYWN1dGUgIiYjMjIxOyIgPjwhLS0gbGF0aW4gY2FwaXRhbCBZIHdpdGggYWN1dGUsIFUrMDBERCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIFRIT1JOICAiJiMyMjI7IiA+PCEtLSBsYXRpbiBjYXBpdGFsIFRIT1JOLCBVKzAwREUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBzemxpZyAgIiYjMjIzOyIgPjwhLS0gbGF0aW4gc21hbGwgc2hhcnAgcyA9IGVzcy16ZWQsIFUrMDBERiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFncmF2ZSAiJiMyMjQ7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggZ3JhdmUgPSBsYXRpbiBzbWFsbCBhIGdyYXZlLCBVKzAwRTAgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhYWN1dGUgIiYjMjI1OyIgPjwhLS0gbGF0aW4gc21hbGwgYSB3aXRoIGFjdXRlLCBVKzAwRTEgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhY2lyYyAgIiYjMjI2OyIgPjwhLS0gbGF0aW4gc21hbGwgYSB3aXRoIGNpcmN1bWZsZXgsIFUrMDBFMiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGF0aWxkZSAiJiMyMjc7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggdGlsZGUsIFUrMDBFMyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGF1bWwgICAiJiMyMjg7IiA+PCEtLSBsYXRpbiBzbWFsbCBhIHdpdGggZGlhZXJlc2lzLCBVKzAwRTQgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBhcmluZyAgIiYjMjI5OyIgPjwhLS0gbGF0aW4gc21hbGwgYSB3aXRoIHJpbmcgYWJvdmUgPSBsYXRpbiBzbWFsbCBhIHJpbmcsIFUrMDBFNSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGFlbGlnICAiJiMyMzA7IiA+PCEtLSBsYXRpbiBzbWFsbCBhZSA9IGxhdGluIHNtYWxsIGxpZ2F0dXJlIGFlLCBVKzAwRTYgSVNPbGF0MSAtLT4NCi08IUVOVElUWSBjY2VkaWwgIiYjMjMxOyIgPjwhLS0gbGF0aW4gc21hbGwgYyB3aXRoIGNlZGlsbGEsIFUrMDBFNyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGVncmF2ZSAiJiMyMzI7IiA+PCEtLSBsYXRpbiBzbWFsbCBlIHdpdGggZ3JhdmUsIFUrMDBFOCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGVhY3V0ZSAiJiMyMzM7IiA+PCEtLSBsYXRpbiBzbWFsbCBlIHdpdGggYWN1dGUsIFUrMDBFOSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGVjaXJjICAiJiMyMzQ7IiA+PCEtLSBsYXRpbiBzbWFsbCBlIHdpdGggY2lyY3VtZmxleCwgVSswMEVBIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgZXVtbCAgICImIzIzNTsiID48IS0tIGxhdGluIHNtYWxsIGUgd2l0aCBkaWFlcmVzaXMsIFUrMDBFQiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGlncmF2ZSAiJiMyMzY7IiA+PCEtLSBsYXRpbiBzbWFsbCBpIHdpdGggZ3JhdmUsIFUrMDBFQyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGlhY3V0ZSAiJiMyMzc7IiA+PCEtLSBsYXRpbiBzbWFsbCBpIHdpdGggYWN1dGUsIFUrMDBFRCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGljaXJjICAiJiMyMzg7IiA+PCEtLSBsYXRpbiBzbWFsbCBpIHdpdGggY2lyY3VtZmxleCwgVSswMEVFIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgaXVtbCAgICImIzIzOTsiID48IS0tIGxhdGluIHNtYWxsIGkgd2l0aCBkaWFlcmVzaXMsIFUrMDBFRiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGV0aCAgICAiJiMyNDA7IiA+PCEtLSBsYXRpbiBzbWFsbCBldGgsIFUrMDBGMCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIG50aWxkZSAiJiMyNDE7IiA+PCEtLSBsYXRpbiBzbWFsbCBuIHdpdGggdGlsZGUsIFUrMDBGMSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIG9ncmF2ZSAiJiMyNDI7IiA+PCEtLSBsYXRpbiBzbWFsbCBvIHdpdGggZ3JhdmUsIFUrMDBGMiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIG9hY3V0ZSAiJiMyNDM7IiA+PCEtLSBsYXRpbiBzbWFsbCBvIHdpdGggYWN1dGUsIFUrMDBGMyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIG9jaXJjICAiJiMyNDQ7IiA+PCEtLSBsYXRpbiBzbWFsbCBvIHdpdGggY2lyY3VtZmxleCwgVSswMEY0IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb3RpbGRlICImIzI0NTsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCB0aWxkZSwgVSswMEY1IElTT2xhdDEgLS0+DQotPCFFTlRJVFkgb3VtbCAgICImIzI0NjsiID48IS0tIGxhdGluIHNtYWxsIG8gd2l0aCBkaWFlcmVzaXMsIFUrMDBGNiBJU09sYXQxIC0tPg0KLTwhRU5USVRZIGRpdmlkZSAiJiMyNDc7IiA+PCEtLSBkaXZpc2lvbiBzaWduLCBVKzAwRjcgSVNPbnVtIC0tPg0KLTwhRU5USVRZIG9zbGFzaCAiJiMyNDg7IiA+PCEtLSBsYXRpbiBzbWFsbCBvIHdpdGggc3Ryb2tlLCA9IGxhdGluIHNtYWxsIG8gc2xhc2gsIFUrMDBGOCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHVncmF2ZSAiJiMyNDk7IiA+PCEtLSBsYXRpbiBzbWFsbCB1IHdpdGggZ3JhdmUsIFUrMDBGOSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHVhY3V0ZSAiJiMyNTA7IiA+PCEtLSBsYXRpbiBzbWFsbCB1IHdpdGggYWN1dGUsIFUrMDBGQSBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHVjaXJjICAiJiMyNTE7IiA+PCEtLSBsYXRpbiBzbWFsbCB1IHdpdGggY2lyY3VtZmxleCwgVSswMEZCIElTT2xhdDEgLS0+DQotPCFFTlRJVFkgdXVtbCAgICImIzI1MjsiID48IS0tIGxhdGluIHNtYWxsIHUgd2l0aCBkaWFlcmVzaXMsIFUrMDBGQyBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHlhY3V0ZSAiJiMyNTM7IiA+PCEtLSBsYXRpbiBzbWFsbCB5IHdpdGggYWN1dGUsIFUrMDBGRCBJU09sYXQxIC0tPg0KLTwhRU5USVRZIHRob3JuICAiJiMyNTQ7IiA+PCEtLSBsYXRpbiBzbWFsbCB0aG9ybiB3aXRoLCBVKzAwRkUgSVNPbGF0MSAtLT4NCi08IUVOVElUWSB5dW1sICAgIiYjMjU1OyIgPjwhLS0gbGF0aW4gc21hbGwgeSB3aXRoIGRpYWVyZXNpcywgVSswMEZGIElTT2xhdDEgLS0+DQotPCEtLSBlbmQgb2YgeGh0bWwtbGF0MS5lbnQgLS0+DQotDQotDQotPCFFTlRJVFkgJSB4aHRtbC1zeW1ib2wNCi0gICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFN5bWJvbHMgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICJ4aHRtbC1zeW1ib2wuZW50IiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gSVNPIE1hdGgsIEdyZWVrIGFuZCBTeW1ib2xpYyBDaGFyYWN0ZXIgRW50aXR5IFNldCBmb3IgWEhUTUwgLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXN5bWJvbC5lbnQNCi0NCi0gICAgIFR5cGljYWwgaW52b2NhdGlvbjoNCi0NCi0gICAgICAgPCFFTlRJVFkgJSB4aHRtbC1zeW1ib2wNCi0gICAgICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTeW1ib2xzIGZvciBYSFRNTC8vRU4iDQotICAgICAgICAgICAgICAgICAgInhodG1sLXN5bWJvbC5lbnQiID4NCi0gICAgICAgJXhodG1sLXN5bWJvbDsNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFN5bWJvbHMgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3ltYm9sLmVudCINCi0NCi0gICAgIFJldmlzaW9uOiAgJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFBvcnRpb25zIChDKSBJbnRlcm5hdGlvbmFsIE9yZ2FuaXphdGlvbiBmb3IgU3RhbmRhcmRpemF0aW9uIDE5ODY6DQotICAgICBQZXJtaXNzaW9uIHRvIGNvcHkgaW4gYW55IGZvcm0gaXMgZ3JhbnRlZCBmb3IgdXNlIHdpdGggY29uZm9ybWluZw0KLSAgICAgU0dNTCBzeXN0ZW1zIGFuZCBhcHBsaWNhdGlvbnMgYXMgZGVmaW5lZCBpbiBJU08gODg3OSwgcHJvdmlkZWQNCi0gICAgIHRoaXMgbm90aWNlIGlzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMuDQotLS0+DQotDQotPCEtLSBSZWxldmFudCBJU08gZW50aXR5IHNldCBpcyBnaXZlbiB1bmxlc3MgbmFtZXMgYXJlIG5ld2x5IGludHJvZHVjZWQuDQotICAgICBOZXcgbmFtZXMgKGkuZS4sIG5vdCBpbiBJU08gODg3OSBbU0dNTF0gbGlzdCkgZG8gbm90IGNsYXNoIHdpdGgNCi0gICAgIGFueSBleGlzdGluZyBJU08gODg3OSBlbnRpdHkgbmFtZXMuIElTTyAxMDY0NiBbSVNPMTA2NDZdIGNoYXJhY3Rlcg0KLSAgICAgbnVtYmVycyBhcmUgZ2l2ZW4gZm9yIGVhY2ggY2hhcmFjdGVyLCBpbiBoZXguIEVudGl0eSB2YWx1ZXMgYXJlDQotICAgICBkZWNpbWFsIGNvbnZlcnNpb25zIG9mIHRoZSBJU08gMTA2NDYgdmFsdWVzIGFuZCByZWZlciB0byB0aGUNCi0gICAgIGRvY3VtZW50IGNoYXJhY3RlciBzZXQuIE5hbWVzIGFyZSBVbmljb2RlIFtVTklDT0RFXSBuYW1lcy4NCi0tLT4NCi0NCi08IS0tIExhdGluIEV4dGVuZGVkLUIgLS0+DQotPCFFTlRJVFkgZm5vZiAgICAgIiYjNDAyOyIgPjwhLS0gbGF0aW4gc21hbGwgZiB3aXRoIGhvb2sgPSBmdW5jdGlvbg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gZmxvcmluLCBVKzAxOTIgSVNPdGVjaCAtLT4NCi0NCi08IS0tIEdyZWVrIC0tPg0KLTwhRU5USVRZIEFscGhhICAgICImIzkxMzsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGFscGhhLCBVKzAzOTEgLS0+DQotPCFFTlRJVFkgQmV0YSAgICAgIiYjOTE0OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgYmV0YSwgVSswMzkyIC0tPg0KLTwhRU5USVRZIEdhbW1hICAgICImIzkxNTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGdhbW1hLCBVKzAzOTMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBEZWx0YSAgICAiJiM5MTY7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBkZWx0YSwgVSswMzk0IElTT2dyazMgLS0+DQotPCFFTlRJVFkgRXBzaWxvbiAgIiYjOTE3OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgZXBzaWxvbiwgVSswMzk1IC0tPg0KLTwhRU5USVRZIFpldGEgICAgICImIzkxODsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHpldGEsIFUrMDM5NiAtLT4NCi08IUVOVElUWSBFdGEgICAgICAiJiM5MTk7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBldGEsIFUrMDM5NyAtLT4NCi08IUVOVElUWSBUaGV0YSAgICAiJiM5MjA7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciB0aGV0YSwgVSswMzk4IElTT2dyazMgLS0+DQotPCFFTlRJVFkgSW90YSAgICAgIiYjOTIxOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgaW90YSwgVSswMzk5IC0tPg0KLTwhRU5USVRZIEthcHBhICAgICImIzkyMjsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGthcHBhLCBVKzAzOUEgLS0+DQotPCFFTlRJVFkgTGFtYmRhICAgIiYjOTIzOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgbGFtYmRhLCBVKzAzOUIgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBNdSAgICAgICAiJiM5MjQ7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBtdSwgVSswMzlDIC0tPg0KLTwhRU5USVRZIE51ICAgICAgICImIzkyNTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIG51LCBVKzAzOUQgLS0+DQotPCFFTlRJVFkgWGkgICAgICAgIiYjOTI2OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgeGksIFUrMDM5RSBJU09ncmszIC0tPg0KLTwhRU5USVRZIE9taWNyb24gICImIzkyNzsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIG9taWNyb24sIFUrMDM5RiAtLT4NCi08IUVOVElUWSBQaSAgICAgICAiJiM5Mjg7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBwaSwgVSswM0EwIElTT2dyazMgLS0+DQotPCFFTlRJVFkgUmhvICAgICAgIiYjOTI5OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgcmhvLCBVKzAzQTEgLS0+DQotPCEtLSB0aGVyZSBpcyBubyBTaWdtYWYsIGFuZCBubyBVKzAzQTIgY2hhcmFjdGVyIGVpdGhlciAtLT4NCi08IUVOVElUWSBTaWdtYSAgICAiJiM5MzE7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBzaWdtYSwgVSswM0EzIElTT2dyazMgLS0+DQotPCFFTlRJVFkgVGF1ICAgICAgIiYjOTMyOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgdGF1LCBVKzAzQTQgLS0+DQotPCFFTlRJVFkgVXBzaWxvbiAgIiYjOTMzOyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgdXBzaWxvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVKzAzQTUgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBQaGkgICAgICAiJiM5MzQ7IiA+PCEtLSBncmVlayBjYXBpdGFsIGxldHRlciBwaGksIFUrMDNBNiBJU09ncmszIC0tPg0KLTwhRU5USVRZIENoaSAgICAgICImIzkzNTsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIGNoaSwgVSswM0E3IC0tPg0KLTwhRU5USVRZIFBzaSAgICAgICImIzkzNjsiID48IS0tIGdyZWVrIGNhcGl0YWwgbGV0dGVyIHBzaSwgVSswM0E4IElTT2dyazMgLS0+DQotPCFFTlRJVFkgT21lZ2EgICAgIiYjOTM3OyIgPjwhLS0gZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgb21lZ2EsIFUrMDNBOSBJU09ncmszIC0tPg0KLTwhRU5USVRZIGFscGhhICAgICImIzk0NTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBhbHBoYSwgVSswM0IxIElTT2dyazMgLS0+DQotPCFFTlRJVFkgYmV0YSAgICAgIiYjOTQ2OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGJldGEsIFUrMDNCMiBJU09ncmszIC0tPg0KLTwhRU5USVRZIGdhbW1hICAgICImIzk0NzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBnYW1tYSwgVSswM0IzIElTT2dyazMgLS0+DQotPCFFTlRJVFkgZGVsdGEgICAgIiYjOTQ4OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGRlbHRhLCBVKzAzQjQgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBlcHNpbG9uICAiJiM5NDk7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgZXBzaWxvbiwgVSswM0I1IElTT2dyazMgLS0+DQotPCFFTlRJVFkgemV0YSAgICAgIiYjOTUwOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHpldGEsIFUrMDNCNiBJU09ncmszIC0tPg0KLTwhRU5USVRZIGV0YSAgICAgICImIzk1MTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBldGEsIFUrMDNCNyBJU09ncmszIC0tPg0KLTwhRU5USVRZIHRoZXRhICAgICImIzk1MjsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciB0aGV0YSwgVSswM0I4IElTT2dyazMgLS0+DQotPCFFTlRJVFkgaW90YSAgICAgIiYjOTUzOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGlvdGEsIFUrMDNCOSBJU09ncmszIC0tPg0KLTwhRU5USVRZIGthcHBhICAgICImIzk1NDsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBrYXBwYSwgVSswM0JBIElTT2dyazMgLS0+DQotPCFFTlRJVFkgbGFtYmRhICAgIiYjOTU1OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIGxhbWJkYSwgVSswM0JCIElTT2dyazMgLS0+DQotPCFFTlRJVFkgbXUgICAgICAgIiYjOTU2OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIG11LCBVKzAzQkMgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBudSAgICAgICAiJiM5NTc7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgbnUsIFUrMDNCRCBJU09ncmszIC0tPg0KLTwhRU5USVRZIHhpICAgICAgICImIzk1ODsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciB4aSwgVSswM0JFIElTT2dyazMgLS0+DQotPCFFTlRJVFkgb21pY3JvbiAgIiYjOTU5OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIG9taWNyb24sIFUrMDNCRiBORVcgLS0+DQotPCFFTlRJVFkgcGkgICAgICAgIiYjOTYwOyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHBpLCBVKzAzQzAgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSByaG8gICAgICAiJiM5NjE7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgcmhvLCBVKzAzQzEgSVNPZ3JrMyAtLT4NCi08IUVOVElUWSBzaWdtYWYgICAiJiM5NjI7IiA+PCEtLSBncmVlayBzbWFsbCBsZXR0ZXIgZmluYWwgc2lnbWEsIFUrMDNDMiBJU09ncmszIC0tPg0KLTwhRU5USVRZIHNpZ21hICAgICImIzk2MzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBzaWdtYSwgVSswM0MzIElTT2dyazMgLS0+DQotPCFFTlRJVFkgdGF1ICAgICAgIiYjOTY0OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHRhdSwgVSswM0M0IElTT2dyazMgLS0+DQotPCFFTlRJVFkgdXBzaWxvbiAgIiYjOTY1OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHVwc2lsb24sIFUrMDNDNSBJU09ncmszIC0tPg0KLTwhRU5USVRZIHBoaSAgICAgICImIzk2NjsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBwaGksIFUrMDNDNiBJU09ncmszIC0tPg0KLTwhRU5USVRZIGNoaSAgICAgICImIzk2NzsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBjaGksIFUrMDNDNyBJU09ncmszIC0tPg0KLTwhRU5USVRZIHBzaSAgICAgICImIzk2ODsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBwc2ksIFUrMDNDOCBJU09ncmszIC0tPg0KLTwhRU5USVRZIG9tZWdhICAgICImIzk2OTsiID48IS0tIGdyZWVrIHNtYWxsIGxldHRlciBvbWVnYSwgVSswM0M5IElTT2dyazMgLS0+DQotPCFFTlRJVFkgdGhldGFzeW0gIiYjOTc3OyIgPjwhLS0gZ3JlZWsgc21hbGwgbGV0dGVyIHRoZXRhIHN5bWJvbCwgVSswM0QxIE5FVyAtLT4NCi08IUVOVElUWSB1cHNpaCAgICAiJiM5Nzg7IiA+PCEtLSBncmVlayB1cHNpbG9uIHdpdGggaG9vayBzeW1ib2wsIFUrMDNEMiBORVcgLS0+DQotPCFFTlRJVFkgcGl2ICAgICAgIiYjOTgyOyIgPjwhLS0gZ3JlZWsgcGkgc3ltYm9sLCBVKzAzRDYgSVNPZ3JrMyAtLT4NCi0NCi08IS0tIEdlbmVyYWwgUHVuY3R1YXRpb24gLS0+DQotPCFFTlRJVFkgYnVsbCAgICAgIiYjODIyNjsiID48IS0tIGJ1bGxldCA9IGJsYWNrIHNtYWxsIGNpcmNsZSwgVSsyMDIyIElTT3B1YiAgLS0+DQotPCEtLSBidWxsZXQgaXMgTk9UIHRoZSBzYW1lIGFzIGJ1bGxldCBvcGVyYXRvciwgVSsyMjE5IC0tPg0KLTwhRU5USVRZIGhlbGxpcCAgICImIzgyMzA7IiA+PCEtLSBob3Jpem9udGFsIGVsbGlwc2lzID0gdGhyZWUgZG90IGxlYWRlciwgVSsyMDI2IElTT3B1YiAgLS0+DQotPCFFTlRJVFkgcHJpbWUgICAgIiYjODI0MjsiID48IS0tIHByaW1lID0gbWludXRlcyA9IGZlZXQsIFUrMjAzMiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIFByaW1lICAgICImIzgyNDM7IiA+PCEtLSBkb3VibGUgcHJpbWUgPSBzZWNvbmRzID0gaW5jaGVzLCBVKzIwMzMgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBvbGluZSAgICAiJiM4MjU0OyIgPjwhLS0gb3ZlcmxpbmUgPSBzcGFjaW5nIG92ZXJzY29yZSwgVSsyMDNFIE5FVyAtLT4NCi08IUVOVElUWSBmcmFzbCAgICAiJiM4MjYwOyIgPjwhLS0gZnJhY3Rpb24gc2xhc2gsIFUrMjA0NCBORVcgLS0+DQotDQotPCEtLSBMZXR0ZXJsaWtlIFN5bWJvbHMgLS0+DQotPCFFTlRJVFkgd2VpZXJwICAgIiYjODQ3MjsiID48IS0tIHNjcmlwdCBjYXBpdGFsIFAgPSBwb3dlciBzZXQgPSBXZWllcnN0cmFzcyBwLCBVKzIxMTggSVNPYW1zbyAtLT4NCi08IUVOVElUWSBpbWFnZSAgICAiJiM4NDY1OyIgPjwhLS0gYmxhY2tsZXR0ZXIgY2FwaXRhbCBJID0gaW1hZ2luYXJ5IHBhcnQsIFUrMjExMSBJU09hbXNvIC0tPg0KLTwhRU5USVRZIHJlYWwgICAgICImIzg0NzY7IiA+PCEtLSBibGFja2xldHRlciBjYXBpdGFsIFIgPSByZWFsIHBhcnQgc3ltYm9sLCBVKzIxMUMgSVNPYW1zbyAtLT4NCi08IUVOVElUWSB0cmFkZSAgICAiJiM4NDgyOyIgPjwhLS0gdHJhZGUgbWFyayBzaWduLCBVKzIxMjIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGFsZWZzeW0gICImIzg1MDE7IiA+PCEtLSBhbGVmIHN5bWJvbCA9IGZpcnN0IHRyYW5zZmluaXRlIGNhcmRpbmFsLCBVKzIxMzUgTkVXIC0tPg0KLTwhLS0gYWxlZiBzeW1ib2wgaXMgTk9UIHRoZSBzYW1lIGFzIGhlYnJldyBsZXR0ZXIgYWxlZiwgVSswNUQwIGFsdGhvdWdoDQotICAgICB0aGUgc2FtZSBnbHlwaCBjb3VsZCBiZSB1c2VkIHRvIGRlcGljdCBib3RoIGNoYXJhY3RlcnMgLS0+DQotDQotPCEtLSBBcnJvd3MgLS0+DQotPCFFTlRJVFkgbGFyciAgICAgIiYjODU5MjsiID48IS0tIGxlZnR3YXJkcyBhcnJvdywgVSsyMTkwIElTT251bSAtLT4NCi08IUVOVElUWSB1YXJyICAgICAiJiM4NTkzOyIgPjwhLS0gdXB3YXJkcyBhcnJvdywgVSsyMTkxIElTT251bS0tPg0KLTwhRU5USVRZIHJhcnIgICAgICImIzg1OTQ7IiA+PCEtLSByaWdodHdhcmRzIGFycm93LCBVKzIxOTIgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGRhcnIgICAgICImIzg1OTU7IiA+PCEtLSBkb3dud2FyZHMgYXJyb3csIFUrMjE5MyBJU09udW0gLS0+DQotPCFFTlRJVFkgaGFyciAgICAgIiYjODU5NjsiID48IS0tIGxlZnQgcmlnaHQgYXJyb3csIFUrMjE5NCBJU09hbXNhIC0tPg0KLTwhRU5USVRZIGNyYXJyICAgICImIzg2Mjk7IiA+PCEtLSBkb3dud2FyZHMgYXJyb3cgd2l0aCBjb3JuZXIgbGVmdHdhcmRzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gY2FycmlhZ2UgcmV0dXJuLCBVKzIxQjUgTkVXIC0tPg0KLTwhRU5USVRZIGxBcnIgICAgICImIzg2NTY7IiA+PCEtLSBsZWZ0d2FyZHMgZG91YmxlIGFycm93LCBVKzIxRDAgSVNPdGVjaCAtLT4NCi08IS0tIFVuaWNvZGUgZG9lcyBub3Qgc2F5IHRoYXQgbEFyciBpcyB0aGUgc2FtZSBhcyB0aGUgJ2lzIGltcGxpZWQgYnknIGFycm93DQotICAgIGJ1dCBhbHNvIGRvZXMgbm90IGhhdmUgYW55IG90aGVyIGNoYXJhY3RlciBmb3IgdGhhdCBmdW5jdGlvbi4gU28gPyBsQXJyIGNhbg0KLSAgICBiZSB1c2VkIGZvciAnaXMgaW1wbGllZCBieScgYXMgSVNPdGVjaCBzdWdnZXN0cyAtLT4NCi08IUVOVElUWSB1QXJyICAgICAiJiM4NjU3OyIgPjwhLS0gdXB3YXJkcyBkb3VibGUgYXJyb3csIFUrMjFEMSBJU09hbXNhIC0tPg0KLTwhRU5USVRZIHJBcnIgICAgICImIzg2NTg7IiA+PCEtLSByaWdodHdhcmRzIGRvdWJsZSBhcnJvdywgVSsyMUQyIElTT3RlY2ggLS0+DQotPCEtLSBVbmljb2RlIGRvZXMgbm90IHNheSB0aGlzIGlzIHRoZSAnaW1wbGllcycgY2hhcmFjdGVyIGJ1dCBkb2VzIG5vdCBoYXZlDQotICAgICBhbm90aGVyIGNoYXJhY3RlciB3aXRoIHRoaXMgZnVuY3Rpb24gc28gPw0KLSAgICAgckFyciBjYW4gYmUgdXNlZCBmb3IgJ2ltcGxpZXMnIGFzIElTT3RlY2ggc3VnZ2VzdHMgLS0+DQotPCFFTlRJVFkgZEFyciAgICAgIiYjODY1OTsiID48IS0tIGRvd253YXJkcyBkb3VibGUgYXJyb3csIFUrMjFEMyBJU09hbXNhIC0tPg0KLTwhRU5USVRZIGhBcnIgICAgICImIzg2NjA7IiA+PCEtLSBsZWZ0IHJpZ2h0IGRvdWJsZSBhcnJvdywgVSsyMUQ0IElTT2Ftc2EgLS0+DQotDQotPCEtLSBNYXRoZW1hdGljYWwgT3BlcmF0b3JzIC0tPg0KLTwhRU5USVRZIGZvcmFsbCAgICImIzg3MDQ7IiA+PCEtLSBmb3IgYWxsLCBVKzIyMDAgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBwYXJ0ICAgICAiJiM4NzA2OyIgPjwhLS0gcGFydGlhbCBkaWZmZXJlbnRpYWwsIFUrMjIwMiBJU090ZWNoICAtLT4NCi08IUVOVElUWSBleGlzdCAgICAiJiM4NzA3OyIgPjwhLS0gdGhlcmUgZXhpc3RzLCBVKzIyMDMgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBlbXB0eSAgICAiJiM4NzA5OyIgPjwhLS0gZW1wdHkgc2V0ID0gbnVsbCBzZXQgPSBkaWFtZXRlciwgVSsyMjA1IElTT2Ftc28gLS0+DQotPCFFTlRJVFkgbmFibGEgICAgIiYjODcxMTsiID48IS0tIG5hYmxhID0gYmFja3dhcmQgZGlmZmVyZW5jZSwgVSsyMjA3IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgaXNpbiAgICAgIiYjODcxMjsiID48IS0tIGVsZW1lbnQgb2YsIFUrMjIwOCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIG5vdGluICAgICImIzg3MTM7IiA+PCEtLSBub3QgYW4gZWxlbWVudCBvZiwgVSsyMjA5IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgbmkgICAgICAgIiYjODcxNTsiID48IS0tIGNvbnRhaW5zIGFzIG1lbWJlciwgVSsyMjBCIElTT3RlY2ggLS0+DQotPCEtLSBzaG91bGQgdGhlcmUgYmUgYSBtb3JlIG1lbW9yYWJsZSBuYW1lIHRoYW4gJ25pJz8gLS0+DQotPCFFTlRJVFkgcHJvZCAgICAgIiYjODcxOTsiID48IS0tIG4tYXJ5IHByb2R1Y3QgPSBwcm9kdWN0IHNpZ24sIFUrMjIwRiBJU09hbXNiIC0tPg0KLTwhLS0gcHJvZCBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIFUrMDNBMCAnZ3JlZWsgY2FwaXRhbCBsZXR0ZXIgcGknIHRob3VnaA0KLSAgICAgdGhlIHNhbWUgZ2x5cGggbWlnaHQgYmUgdXNlZCBmb3IgYm90aCAtLT4NCi08IUVOVElUWSBzdW0gICAgICAiJiM4NzIxOyIgPjwhLS0gbi1hcnkgc3VtYXRpb24sIFUrMjIxMSBJU09hbXNiIC0tPg0KLTwhLS0gc3VtIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgVSswM0EzICdncmVlayBjYXBpdGFsIGxldHRlciBzaWdtYScNCi0gICAgIHRob3VnaCB0aGUgc2FtZSBnbHlwaCBtaWdodCBiZSB1c2VkIGZvciBib3RoIC0tPg0KLTwhRU5USVRZIG1pbnVzICAgICImIzg3MjI7IiA+PCEtLSBtaW51cyBzaWduLCBVKzIyMTIgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBsb3dhc3QgICAiJiM4NzI3OyIgPjwhLS0gYXN0ZXJpc2sgb3BlcmF0b3IsIFUrMjIxNyBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHJhZGljICAgICImIzg3MzA7IiA+PCEtLSBzcXVhcmUgcm9vdCA9IHJhZGljYWwgc2lnbiwgVSsyMjFBIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgcHJvcCAgICAgIiYjODczMzsiID48IS0tIHByb3BvcnRpb25hbCB0bywgVSsyMjFEIElTT3RlY2ggLS0+DQotPCFFTlRJVFkgaW5maW4gICAgIiYjODczNDsiID48IS0tIGluZmluaXR5LCBVKzIyMUUgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBhbmcgICAgICAiJiM4NzM2OyIgPjwhLS0gYW5nbGUsIFUrMjIyMCBJU09hbXNvIC0tPg0KLTwhRU5USVRZIGFuZCAgICAgICImIzg3NDM7IiA+PCEtLSBsb2dpY2FsIGFuZCA9IHdlZGdlLCBVKzIyMjcgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBvciAgICAgICAiJiM4NzQ0OyIgPjwhLS0gbG9naWNhbCBvciA9IHZlZSwgVSsyMjI4IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgY2FwICAgICAgIiYjODc0NTsiID48IS0tIGludGVyc2VjdGlvbiA9IGNhcCwgVSsyMjI5IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgY3VwICAgICAgIiYjODc0NjsiID48IS0tIHVuaW9uID0gY3VwLCBVKzIyMkEgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBpbnQgICAgICAiJiM4NzQ3OyIgPjwhLS0gaW50ZWdyYWwsIFUrMjIyQiBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHRoZXJlNCAgICImIzg3NTY7IiA+PCEtLSB0aGVyZWZvcmUsIFUrMjIzNCBJU090ZWNoIC0tPg0KLTwhRU5USVRZIHNpbSAgICAgICImIzg3NjQ7IiA+PCEtLSB0aWxkZSBvcGVyYXRvciA9IHZhcmllcyB3aXRoID0gc2ltaWxhciB0bywgVSsyMjNDIElTT3RlY2ggLS0+DQotPCEtLSB0aWxkZSBvcGVyYXRvciBpcyBOT1QgdGhlIHNhbWUgY2hhcmFjdGVyIGFzIHRoZSB0aWxkZSwgVSswMDdFLA0KLSAgICAgYWx0aG91Z2ggdGhlIHNhbWUgZ2x5cGggbWlnaHQgYmUgdXNlZCB0byByZXByZXNlbnQgYm90aCAgLS0+DQotPCFFTlRJVFkgY29uZyAgICAgIiYjODc3MzsiID48IS0tIGFwcHJveGltYXRlbHkgZXF1YWwgdG8sIFUrMjI0NSBJU090ZWNoIC0tPg0KLTwhRU5USVRZIGFzeW1wICAgICImIzg3NzY7IiA+PCEtLSBhbG1vc3QgZXF1YWwgdG8gPSBhc3ltcHRvdGljIHRvLCBVKzIyNDggSVNPYW1zciAtLT4NCi08IUVOVElUWSBuZSAgICAgICAiJiM4ODAwOyIgPjwhLS0gbm90IGVxdWFsIHRvLCBVKzIyNjAgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBlcXVpdiAgICAiJiM4ODAxOyIgPjwhLS0gaWRlbnRpY2FsIHRvLCBVKzIyNjEgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBsZSAgICAgICAiJiM4ODA0OyIgPjwhLS0gbGVzcy10aGFuIG9yIGVxdWFsIHRvLCBVKzIyNjQgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBnZSAgICAgICAiJiM4ODA1OyIgPjwhLS0gZ3JlYXRlci10aGFuIG9yIGVxdWFsIHRvLCBVKzIyNjUgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzdWIgICAgICAiJiM4ODM0OyIgPjwhLS0gc3Vic2V0IG9mLCBVKzIyODIgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBzdXAgICAgICAiJiM4ODM1OyIgPjwhLS0gc3VwZXJzZXQgb2YsIFUrMjI4MyBJU090ZWNoIC0tPg0KLTwhLS0gbm90ZSB0aGF0IG5zdXAsICdub3QgYSBzdXBlcnNldCBvZiwgVSsyMjgzJyBpcyBub3QgY292ZXJlZCBieSB0aGUgU3ltYm9sDQotICAgICBmb250IGVuY29kaW5nIGFuZCBpcyBub3QgaW5jbHVkZWQuIFNob3VsZCBpdCBiZSwgZm9yIHN5bW1ldHJ5Pw0KLSAgICAgSXQgaXMgaW4gSVNPYW1zbiAgLS0+DQotPCFFTlRJVFkgbnN1YiAgICAgIiYjODgzNjsiID48IS0tIG5vdCBhIHN1YnNldCBvZiwgVSsyMjg0IElTT2Ftc24gLS0+DQotPCFFTlRJVFkgc3ViZSAgICAgIiYjODgzODsiID48IS0tIHN1YnNldCBvZiBvciBlcXVhbCB0bywgVSsyMjg2IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgc3VwZSAgICAgIiYjODgzOTsiID48IS0tIHN1cGVyc2V0IG9mIG9yIGVxdWFsIHRvLCBVKzIyODcgSVNPdGVjaCAtLT4NCi08IUVOVElUWSBvcGx1cyAgICAiJiM4ODUzOyIgPjwhLS0gY2lyY2xlZCBwbHVzID0gZGlyZWN0IHN1bSwgVSsyMjk1IElTT2Ftc2IgLS0+DQotPCFFTlRJVFkgb3RpbWVzICAgIiYjODg1NTsiID48IS0tIGNpcmNsZWQgdGltZXMgPSB2ZWN0b3IgcHJvZHVjdCwgVSsyMjk3IElTT2Ftc2IgLS0+DQotPCFFTlRJVFkgcGVycCAgICAgIiYjODg2OTsiID48IS0tIHVwIHRhY2sgPSBvcnRob2dvbmFsIHRvID0gcGVycGVuZGljdWxhciwgVSsyMkE1IElTT3RlY2ggLS0+DQotPCFFTlRJVFkgc2RvdCAgICAgIiYjODkwMTsiID48IS0tIGRvdCBvcGVyYXRvciwgVSsyMkM1IElTT2Ftc2IgLS0+DQotPCEtLSBkb3Qgb3BlcmF0b3IgaXMgTk9UIHRoZSBzYW1lIGNoYXJhY3RlciBhcyBVKzAwQjcgbWlkZGxlIGRvdCAtLT4NCi0NCi08IS0tIE1pc2NlbGxhbmVvdXMgVGVjaG5pY2FsIC0tPg0KLTwhRU5USVRZIGxjZWlsICAgICImIzg5Njg7IiA+PCEtLSBsZWZ0IGNlaWxpbmcgPSBhcGwgdXBzdGlsZSwgVSsyMzA4IElTT2Ftc2MgIC0tPg0KLTwhRU5USVRZIHJjZWlsICAgICImIzg5Njk7IiA+PCEtLSByaWdodCBjZWlsaW5nLCBVKzIzMDkgSVNPYW1zYyAgLS0+DQotPCFFTlRJVFkgbGZsb29yICAgIiYjODk3MDsiID48IS0tIGxlZnQgZmxvb3IgPSBhcGwgZG93bnN0aWxlLCBVKzIzMEEgSVNPYW1zYyAgLS0+DQotPCFFTlRJVFkgcmZsb29yICAgIiYjODk3MTsiID48IS0tIHJpZ2h0IGZsb29yLCBVKzIzMEIgSVNPYW1zYyAgLS0+DQotPCFFTlRJVFkgbGFuZyAgICAgIiYjOTAwMTsiID48IS0tIGxlZnQtcG9pbnRpbmcgYW5nbGUgYnJhY2tldCA9IGJyYSwgVSsyMzI5IElTT3RlY2ggLS0+DQotPCEtLSBsYW5nIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgVSswMDNDICdsZXNzIHRoYW4nDQotICAgICBvciBVKzIwMzkgJ3NpbmdsZSBsZWZ0LXBvaW50aW5nIGFuZ2xlIHF1b3RhdGlvbiBtYXJrJyAtLT4NCi08IUVOVElUWSByYW5nICAgICAiJiM5MDAyOyIgPjwhLS0gcmlnaHQtcG9pbnRpbmcgYW5nbGUgYnJhY2tldCA9IGtldCwgVSsyMzJBIElTT3RlY2ggLS0+DQotPCEtLSByYW5nIGlzIE5PVCB0aGUgc2FtZSBjaGFyYWN0ZXIgYXMgVSswMDNFICdncmVhdGVyIHRoYW4nDQotICAgICBvciBVKzIwM0EgJ3NpbmdsZSByaWdodC1wb2ludGluZyBhbmdsZSBxdW90YXRpb24gbWFyaycgLS0+DQotDQotPCEtLSBHZW9tZXRyaWMgU2hhcGVzIC0tPg0KLTwhRU5USVRZIGxveiAgICAgICImIzk2NzQ7IiA+PCEtLSBsb3plbmdlLCBVKzI1Q0EgSVNPcHViIC0tPg0KLQ0KLTwhLS0gTWlzY2VsbGFuZW91cyBTeW1ib2xzIC0tPg0KLTwhRU5USVRZIHNwYWRlcyAgICImIzk4MjQ7IiA+PCEtLSBibGFjayBzcGFkZSBzdWl0LCBVKzI2NjAgSVNPcHViIC0tPg0KLTwhLS0gYmxhY2sgaGVyZSBzZWVtcyB0byBtZWFuIGZpbGxlZCBhcyBvcHBvc2VkIHRvIGhvbGxvdyAtLT4NCi08IUVOVElUWSBjbHVicyAgICAiJiM5ODI3OyIgPjwhLS0gYmxhY2sgY2x1YiBzdWl0ID0gc2hhbXJvY2ssIFUrMjY2MyBJU09wdWIgLS0+DQotPCFFTlRJVFkgaGVhcnRzICAgIiYjOTgyOTsiID48IS0tIGJsYWNrIGhlYXJ0IHN1aXQgPSB2YWxlbnRpbmUsIFUrMjY2NSBJU09wdWIgLS0+DQotPCFFTlRJVFkgZGlhbXMgICAgIiYjOTgzMDsiID48IS0tIGJsYWNrIGRpYW1vbmQgc3VpdCwgVSsyNjY2IElTT3B1YiAtLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1zeW1ib2wuZW50IC0tPg0KLQ0KLQ0KLTwhRU5USVRZICUgeGh0bWwtc3BlY2lhbA0KLSAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgU3BlY2lhbCBmb3IgWEhUTUwvL0VOIg0KLSAgICAgICAgICAgInhodG1sLXNwZWNpYWwuZW50IiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWE1MLWNvbXBhdGlibGUgSVNPIFNwZWNpYWwgQ2hhcmFjdGVyIEVudGl0eSBTZXQgZm9yIFhIVE1MIC4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXNwZWNpYWwuZW50DQotDQotICAgICBUeXBpY2FsIGludm9jYXRpb246DQotDQotICAgICAgIDwhRU5USVRZICUgeGh0bWwtc3BlY2lhbA0KLSAgICAgICAgICAgUFVCTElDICItLy9XM0MvL0VOVElUSUVTIFNwZWNpYWwgZm9yIFhIVE1MLy9FTiINCi0gICAgICAgICAgICAgICAgICAieGh0bWwtc3BlY2lhbC5lbnQiID4NCi0gICAgICAgJXhodG1sLXNwZWNpYWw7DQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTlRJVElFUyBTcGVjaWFsIGZvciBYSFRNTC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXNwZWNpYWwuZW50Ig0KLQ0KLSAgICAgUmV2aXNpb246ICAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgUG9ydGlvbnMgKEMpIEludGVybmF0aW9uYWwgT3JnYW5pemF0aW9uIGZvciBTdGFuZGFyZGl6YXRpb24gMTk4NjoNCi0gICAgIFBlcm1pc3Npb24gdG8gY29weSBpbiBhbnkgZm9ybSBpcyBncmFudGVkIGZvciB1c2Ugd2l0aCBjb25mb3JtaW5nDQotICAgICBTR01MIHN5c3RlbXMgYW5kIGFwcGxpY2F0aW9ucyBhcyBkZWZpbmVkIGluIElTTyA4ODc5LCBwcm92aWRlZA0KLSAgICAgdGhpcyBub3RpY2UgaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcy4NCi0NCi0gICAgIFJldmlzaW9uczoNCi0yMDAwLTEwLTI4OiBhZGRlZCAmYXBvczsgYW5kIGFsdGVyZWQgWE1MIFByZWRlZmluZWQgRW50aXRpZXMgZm9yIGNvbXBhdGliaWxpdHkNCi0tLT4NCi0NCi08IS0tIFJlbGV2YW50IElTTyBlbnRpdHkgc2V0IGlzIGdpdmVuIHVubGVzcyBuYW1lcyBhcmUgbmV3bHkgaW50cm9kdWNlZC4NCi0gICAgIE5ldyBuYW1lcyAoaS5lLiwgbm90IGluIElTTyA4ODc5IFtTR01MXSBsaXN0KSBkbyBub3QgY2xhc2ggd2l0aA0KLSAgICAgYW55IGV4aXN0aW5nIElTTyA4ODc5IGVudGl0eSBuYW1lcy4gSVNPIDEwNjQ2IFtJU08xMDY0Nl0gY2hhcmFjdGVyDQotICAgICBudW1iZXJzIGFyZSBnaXZlbiBmb3IgZWFjaCBjaGFyYWN0ZXIsIGluIGhleC4gRW50aXR5IHZhbHVlcyBhcmUNCi0gICAgIGRlY2ltYWwgY29udmVyc2lvbnMgb2YgdGhlIElTTyAxMDY0NiB2YWx1ZXMgYW5kIHJlZmVyIHRvIHRoZQ0KLSAgICAgZG9jdW1lbnQgY2hhcmFjdGVyIHNldC4gTmFtZXMgYXJlIFVuaWNvZGUgW1VOSUNPREVdIG5hbWVzLg0KLS0tPg0KLQ0KLTwhLS0gQzAgQ29udHJvbHMgYW5kIEJhc2ljIExhdGluIC0tPg0KLTwhRU5USVRZIGx0ICAgICAgIiYjMzg7JiM2MDsiID48IS0tIGxlc3MtdGhhbiBzaWduLCBVKzAwM0MgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGd0ICAgICAgIiYjNjI7IiA+PCEtLSBncmVhdGVyLXRoYW4gc2lnbiwgVSswMDNFIElTT251bSAtLT4NCi08IUVOVElUWSBhbXAgICAgICImIzM4OyYjMzg7IiA+PCEtLSBhbXBlcnNhbmQsIFUrMDAyNiBJU09udW0gLS0+DQotPCFFTlRJVFkgYXBvcyAgICAiJiMzOTsiID48IS0tIGFwb3N0cm9waGUsIFUrMDAyNyBJU09udW0gLS0+DQotPCFFTlRJVFkgcXVvdCAgICAiJiMzNDsiID48IS0tIHF1b3RhdGlvbiBtYXJrID0gQVBMIHF1b3RlLCBVKzAwMjIgSVNPbnVtIC0tPg0KLQ0KLTwhLS0gTGF0aW4gRXh0ZW5kZWQtQSAtLT4NCi08IUVOVElUWSBPRWxpZyAgICImIzMzODsiID48IS0tIGxhdGluIGNhcGl0YWwgbGlnYXR1cmUgT0UsIFUrMDE1MiBJU09sYXQyIC0tPg0KLTwhRU5USVRZIG9lbGlnICAgIiYjMzM5OyIgPjwhLS0gbGF0aW4gc21hbGwgbGlnYXR1cmUgb2UsIFUrMDE1MyBJU09sYXQyIC0tPg0KLQ0KLTwhLS0gbGlnYXR1cmUgaXMgYSBtaXNub21lciwgdGhpcyBpcyBhIHNlcGFyYXRlIGNoYXJhY3RlciBpbiBzb21lIGxhbmd1YWdlcyAtLT4NCi08IUVOVElUWSBTY2Fyb24gICImIzM1MjsiID48IS0tIGxhdGluIGNhcGl0YWwgbGV0dGVyIFMgd2l0aCBjYXJvbiwgVSswMTYwIElTT2xhdDIgLS0+DQotPCFFTlRJVFkgc2Nhcm9uICAiJiMzNTM7IiA+PCEtLSBsYXRpbiBzbWFsbCBsZXR0ZXIgcyB3aXRoIGNhcm9uLCBVKzAxNjEgSVNPbGF0MiAtLT4NCi08IUVOVElUWSBZdW1sICAgICImIzM3NjsiID48IS0tIGxhdGluIGNhcGl0YWwgbGV0dGVyIFkgd2l0aCBkaWFlcmVzaXMsIFUrMDE3OCBJU09sYXQyIC0tPg0KLQ0KLTwhLS0gU3BhY2luZyBNb2RpZmllciBMZXR0ZXJzIC0tPg0KLTwhRU5USVRZIGNpcmMgICAgIiYjNzEwOyIgPjwhLS0gbW9kaWZpZXIgbGV0dGVyIGNpcmN1bWZsZXggYWNjZW50LCBVKzAyQzYgSVNPcHViIC0tPg0KLTwhRU5USVRZIHRpbGRlICAgIiYjNzMyOyIgPjwhLS0gc21hbGwgdGlsZGUsIFUrMDJEQyBJU09kaWEgLS0+DQotDQotPCEtLSBHZW5lcmFsIFB1bmN0dWF0aW9uIC0tPg0KLTwhRU5USVRZIGVuc3AgICAgIiYjODE5NDsiID48IS0tIGVuIHNwYWNlLCBVKzIwMDIgSVNPcHViIC0tPg0KLTwhRU5USVRZIGVtc3AgICAgIiYjODE5NTsiID48IS0tIGVtIHNwYWNlLCBVKzIwMDMgSVNPcHViIC0tPg0KLTwhRU5USVRZIHRoaW5zcCAgIiYjODIwMTsiID48IS0tIHRoaW4gc3BhY2UsIFUrMjAwOSBJU09wdWIgLS0+DQotPCFFTlRJVFkgenduaiAgICAiJiM4MjA0OyIgPjwhLS0gemVybyB3aWR0aCBub24tam9pbmVyLCBVKzIwMEMgTkVXIFJGQyAyMDcwIC0tPg0KLTwhRU5USVRZIHp3aiAgICAgIiYjODIwNTsiID48IS0tIHplcm8gd2lkdGggam9pbmVyLCBVKzIwMEQgTkVXIFJGQyAyMDcwIC0tPg0KLTwhRU5USVRZIGxybSAgICAgIiYjODIwNjsiID48IS0tIGxlZnQtdG8tcmlnaHQgbWFyaywgVSsyMDBFIE5FVyBSRkMgMjA3MCAtLT4NCi08IUVOVElUWSBybG0gICAgICImIzgyMDc7IiA+PCEtLSByaWdodC10by1sZWZ0IG1hcmssIFUrMjAwRiBORVcgUkZDIDIwNzAgLS0+DQotPCFFTlRJVFkgbmRhc2ggICAiJiM4MjExOyIgPjwhLS0gZW4gZGFzaCwgVSsyMDEzIElTT3B1YiAtLT4NCi08IUVOVElUWSBtZGFzaCAgICImIzgyMTI7IiA+PCEtLSBlbSBkYXNoLCBVKzIwMTQgSVNPcHViIC0tPg0KLTwhRU5USVRZIGxzcXVvICAgIiYjODIxNjsiID48IS0tIGxlZnQgc2luZ2xlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMTggSVNPbnVtIC0tPg0KLTwhRU5USVRZIHJzcXVvICAgIiYjODIxNzsiID48IS0tIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyaywgVSsyMDE5IElTT251bSAtLT4NCi08IUVOVElUWSBzYnF1byAgICImIzgyMTg7IiA+PCEtLSBzaW5nbGUgbG93LTkgcXVvdGF0aW9uIG1hcmssIFUrMjAxQSBORVcgLS0+DQotPCFFTlRJVFkgbGRxdW8gICAiJiM4MjIwOyIgPjwhLS0gbGVmdCBkb3VibGUgcXVvdGF0aW9uIG1hcmssIFUrMjAxQyBJU09udW0gLS0+DQotPCFFTlRJVFkgcmRxdW8gICAiJiM4MjIxOyIgPjwhLS0gcmlnaHQgZG91YmxlIHF1b3RhdGlvbiBtYXJrLCBVKzIwMUQgSVNPbnVtIC0tPg0KLTwhRU5USVRZIGJkcXVvICAgIiYjODIyMjsiID48IS0tIGRvdWJsZSBsb3ctOSBxdW90YXRpb24gbWFyaywgVSsyMDFFIE5FVyAtLT4NCi08IUVOVElUWSBkYWdnZXIgICImIzgyMjQ7IiA+PCEtLSBkYWdnZXIsIFUrMjAyMCBJU09wdWIgLS0+DQotPCFFTlRJVFkgRGFnZ2VyICAiJiM4MjI1OyIgPjwhLS0gZG91YmxlIGRhZ2dlciwgVSsyMDIxIElTT3B1YiAtLT4NCi08IUVOVElUWSBwZXJtaWwgICImIzgyNDA7IiA+PCEtLSBwZXIgbWlsbGUgc2lnbiwgVSsyMDMwIElTT3RlY2ggLS0+DQotDQotPCEtLSBsc2FxdW8gaXMgcHJvcG9zZWQgYnV0IG5vdCB5ZXQgSVNPIHN0YW5kYXJkaXplZCAtLT4NCi08IUVOVElUWSBsc2FxdW8gICImIzgyNDk7IiA+PCEtLSBzaW5nbGUgbGVmdC1wb2ludGluZyBhbmdsZSBxdW90YXRpb24gbWFyaywgVSsyMDM5IElTTyBwcm9wb3NlZCAtLT4NCi08IS0tIHJzYXF1byBpcyBwcm9wb3NlZCBidXQgbm90IHlldCBJU08gc3RhbmRhcmRpemVkIC0tPg0KLTwhRU5USVRZIHJzYXF1byAgIiYjODI1MDsiID48IS0tIHNpbmdsZSByaWdodC1wb2ludGluZyBhbmdsZSBxdW90YXRpb24gbWFyaywgVSsyMDNBIElTTyBwcm9wb3NlZCAtLT4NCi08IUVOVElUWSBldXJvICAgICImIzgzNjQ7IiA+PCEtLSBldXJvIHNpZ24sIFUrMjBBQyBORVcgLS0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtc3BlY2lhbC5lbnQgLS0+DQotDQotDQotPCEtLSBlbmQgb2YgeGh0bWwtY2hhcmVudC0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1mcmFtZXdvcmstMS5tb2QgLS0+DQotDQotDQotPCEtLSBYSFRNTCBDb3JlIE1vZHVsZXMgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHByZS5jb250ZW50DQotICAgICAiKCAjUENEQVRBDQotICAgICAgfCAlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7ICkqIg0KLT4NCi0NCi08IUVOVElUWSAlIHhodG1sLXRleHQubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgVGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtdGV4dC0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIFRleHQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC10ZXh0LTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBUZXh0IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXRleHQtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gVGV4dHVhbCBDb250ZW50DQotDQotICAgICBUaGUgVGV4dCBtb2R1bGUgaW5jbHVkZXMgZGVjbGFyYXRpb25zIGZvciBhbGwgY29yZQ0KLSAgICAgdGV4dCBjb250YWluZXIgZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMuDQotLS0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1pbmxzdHJ1Y3QubW9kdWxlICJJTkNMVURFIiA+DQotPCFbJXhodG1sLWlubHN0cnVjdC5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtaW5sc3RydWN0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBTdHJ1Y3R1cmFsIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWlubHN0cnVjdC0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIElubGluZSBTdHJ1Y3R1cmFsIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1pbmxzdHJ1Y3QtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBTdHJ1Y3R1cmFsIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHN0cnVjdC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBJbmxpbmUgU3RydWN0dXJhbA0KLQ0KLSAgICAgICAgYnIsIHNwYW4NCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcw0KLSAgICAgdXNlZCB0byBzdXBwb3J0IGlubGluZS1sZXZlbCBzdHJ1Y3R1cmFsIG1hcmt1cC4NCi0tLT4NCi0NCi08IS0tIGJyOiBmb3JjZWQgbGluZSBicmVhayAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGJyLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWJyLmVsZW1lbnQ7Ww0KLQ0KLTwhRU5USVRZICUgYnIuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBici5xbmFtZSAgImJyIiA+DQotPCFFTEVNRU5UICVici5xbmFtZTsgICVici5jb250ZW50OyA+DQotDQotPCEtLSBlbmQgb2YgYnIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWJyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYnIucW5hbWU7DQotICAgICAgJUNvcmUuYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBici5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gc3BhbjogZ2VuZXJpYyBpbmxpbmUgY29udGFpbmVyIC4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgc3Bhbi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzcGFuLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc3Bhbi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHNwYW4ucW5hbWUgICJzcGFuIiA+DQotPCFFTEVNRU5UICVzcGFuLnFuYW1lOyAgJXNwYW4uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHNwYW4uZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNwYW4uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3Bhbi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXNwYW4ucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHNwYW4uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1pbmxzdHJ1Y3QtMS5tb2QgLS0+DQotXV0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC1pbmxwaHJhcy5tb2R1bGUgIklOQ0xVREUiID4NCi08IVsleGh0bWwtaW5scGhyYXMubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWlubHBocmFzLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIElubGluZSBQaHJhc2FsIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWlubHBocmFzLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSW5saW5lIFBocmFzYWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWlubHBocmFzLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgUGhyYXNhbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxwaHJhcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBJbmxpbmUgUGhyYXNhbA0KLQ0KLSAgICAgICAgYWJiciwgYWNyb255bSwgY2l0ZSwgY29kZSwgZGZuLCBlbSwga2JkLCBxLCBzYW1wLCBzdHJvbmcsIHZhcg0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIHVzZWQgdG8NCi0gICAgIHN1cHBvcnQgaW5saW5lLWxldmVsIHBocmFzYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgYWJici5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVhYmJyLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYWJici5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGFiYnIucW5hbWUgICJhYmJyIiA+DQotPCFFTEVNRU5UICVhYmJyLnFuYW1lOyAgJWFiYnIuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGFiYnIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGFiYnIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYWJici5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWFiYnIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGFiYnIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGFjcm9ueW0uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYWNyb255bS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGFjcm9ueW0uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBhY3JvbnltLnFuYW1lICAiYWNyb255bSIgPg0KLTwhRUxFTUVOVCAlYWNyb255bS5xbmFtZTsgICVhY3JvbnltLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBhY3JvbnltLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBhY3JvbnltLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWFjcm9ueW0uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVhY3JvbnltLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBhY3JvbnltLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBjaXRlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWNpdGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBjaXRlLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgY2l0ZS5xbmFtZSAgImNpdGUiID4NCi08IUVMRU1FTlQgJWNpdGUucW5hbWU7ICAlY2l0ZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgY2l0ZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgY2l0ZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVjaXRlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlY2l0ZS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgY2l0ZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgY29kZS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVjb2RlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgY29kZS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGNvZGUucW5hbWUgICJjb2RlIiA+DQotPCFFTEVNRU5UICVjb2RlLnFuYW1lOyAgJWNvZGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGNvZGUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGNvZGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslY29kZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWNvZGUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGNvZGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRmbi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkZm4uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBkZm4uY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBkZm4ucW5hbWUgICJkZm4iID4NCi08IUVMRU1FTlQgJWRmbi5xbmFtZTsgICVkZm4uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGRmbi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZGZuLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWRmbi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWRmbi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgZGZuLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBlbS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVlbS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGVtLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgZW0ucW5hbWUgICJlbSIgPg0KLTwhRUxFTUVOVCAlZW0ucW5hbWU7ICAlZW0uY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGVtLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBlbS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVlbS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWVtLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBlbS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUga2JkLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWtiZC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGtiZC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGtiZC5xbmFtZSAgImtiZCIgPg0KLTwhRUxFTUVOVCAla2JkLnFuYW1lOyAgJWtiZC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Yga2JkLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBrYmQuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsla2JkLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAla2JkLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBrYmQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHEuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslcS5lbGVtZW50O1sNCi08IUVOVElUWSAlIHEuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBxLnFuYW1lICAicSIgPg0KLTwhRUxFTUVOVCAlcS5xbmFtZTsgICVxLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBxLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBxLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXEuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVxLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGNpdGUgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgcS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc2FtcC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzYW1wLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc2FtcC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHNhbXAucW5hbWUgICJzYW1wIiA+DQotPCFFTEVNRU5UICVzYW1wLnFuYW1lOyAgJXNhbXAuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHNhbXAuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHNhbXAuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc2FtcC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXNhbXAucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHNhbXAuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN0cm9uZy5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzdHJvbmcuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzdHJvbmcuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzdHJvbmcucW5hbWUgICJzdHJvbmciID4NCi08IUVMRU1FTlQgJXN0cm9uZy5xbmFtZTsgICVzdHJvbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHN0cm9uZy5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3Ryb25nLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXN0cm9uZy5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXN0cm9uZy5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc3Ryb25nLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB2YXIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldmFyLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdmFyLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgdmFyLnFuYW1lICAidmFyIiA+DQotPCFFTEVNRU5UICV2YXIucW5hbWU7ICAldmFyLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB2YXIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHZhci5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV2YXIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV2YXIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHZhci5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWlubHBocmFzLTEubW9kIC0tPg0KLV1dPg0KLQ0KLTwhRU5USVRZICUgeGh0bWwtYmxrc3RydWN0Lm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1ibGtzdHJ1Y3QubW9kdWxlO1sNCi08IUVOVElUWSAlIHhodG1sLWJsa3N0cnVjdC5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCbG9jayBTdHJ1Y3R1cmFsIDEuMC8vRU4iDQotICAgICAgICAgICAgInhodG1sLWJsa3N0cnVjdC0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEJsb2NrIFN0cnVjdHVyYWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1ibGtzdHJ1Y3QtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFN0cnVjdHVyYWwgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmxrc3RydWN0LTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJsb2NrIFN0cnVjdHVyYWwNCi0NCi0gICAgICAgIGRpdiwgcA0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIHVzZWQgdG8NCi0gICAgIHN1cHBvcnQgYmxvY2stbGV2ZWwgc3RydWN0dXJhbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBkaXYuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZGl2LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgZGl2LmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlRmxvdy5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGRpdi5xbmFtZSAgImRpdiIgPg0KLTwhRUxFTUVOVCAlZGl2LnFuYW1lOyAgJWRpdi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZGl2LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkaXYuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslZGl2LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZGl2LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBkaXYuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHAuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslcC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHAuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiIgPg0KLTwhRU5USVRZICUgcC5xbmFtZSAgInAiID4NCi08IUVMRU1FTlQgJXAucW5hbWU7ICAlcC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgcC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVwLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlcC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgcC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWJsa3N0cnVjdC0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IUVOVElUWSAlIHhodG1sLWJsa3BocmFzLm1vZHVsZSAiSU5DTFVERSIgPg0KLTwhWyV4aHRtbC1ibGtwaHJhcy5tb2R1bGU7Ww0KLTwhRU5USVRZICUgeGh0bWwtYmxrcGhyYXMubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUGhyYXNhbCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJ4aHRtbC1ibGtwaHJhcy0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIEJsb2NrIFBocmFzYWwgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1ibGtwaHJhcy0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmxvY2sgUGhyYXNhbCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwaHJhcy0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCbG9jayBQaHJhc2FsDQotDQotICAgICAgICBhZGRyZXNzLCBibG9ja3F1b3RlLCBwcmUsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyB1c2VkIHRvDQotICAgICBzdXBwb3J0IGJsb2NrLWxldmVsIHBocmFzYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgYWRkcmVzcy5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVhZGRyZXNzLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgYWRkcmVzcy5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIiA+DQotPCFFTlRJVFkgJSBhZGRyZXNzLnFuYW1lICAiYWRkcmVzcyIgPg0KLTwhRUxFTUVOVCAlYWRkcmVzcy5xbmFtZTsgICVhZGRyZXNzLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBhZGRyZXNzLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBhZGRyZXNzLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWFkZHJlc3MuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVhZGRyZXNzLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBhZGRyZXNzLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBibG9ja3F1b3RlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWJsb2NrcXVvdGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBibG9ja3F1b3RlLmNvbnRlbnQNCi0gICAgICIoICVCbG9jay5taXg7ICkrIg0KLT4NCi08IUVOVElUWSAlIGJsb2NrcXVvdGUucW5hbWUgICJibG9ja3F1b3RlIiA+DQotPCFFTEVNRU5UICVibG9ja3F1b3RlLnFuYW1lOyAgJWJsb2NrcXVvdGUuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGJsb2NrcXVvdGUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGJsb2NrcXVvdGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYmxvY2txdW90ZS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWJsb2NrcXVvdGUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgY2l0ZSAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBibG9ja3F1b3RlLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBwcmUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslcHJlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgcHJlLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEENCi0gICAgICB8ICVJbmxTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUlubFBocmFzLmNsYXNzOw0KLSAgICAgIHwgJXR0LnFuYW1lOyB8ICVpLnFuYW1lOyB8ICViLnFuYW1lOw0KLSAgICAgICVJMThuLmNsYXNzOw0KLSAgICAgICVBbmNob3IuY2xhc3M7DQotICAgICAgfCAlc2NyaXB0LnFuYW1lOyB8ICVtYXAucW5hbWU7DQotICAgICAgJUlubGluZS5leHRyYTsgKSoiDQotPg0KLTwhRU5USVRZICUgcHJlLnFuYW1lICAicHJlIiA+DQotPCFFTEVNRU5UICVwcmUucW5hbWU7ICAlcHJlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBwcmUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHByZS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVwcmUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVwcmUucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgeG1sOnNwYWNlICAgICggcHJlc2VydmUgKSAgICAgICAgICAgICAjRklYRUQgJ3ByZXNlcnZlJw0KLT4NCi08IS0tIGVuZCBvZiBwcmUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4gIEhlYWRpbmcgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBIZWFkaW5nLmNvbnRlbnQgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiID4NCi0NCi08IUVOVElUWSAlIGgxLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWgxLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDEucW5hbWUgICJoMSIgPg0KLTwhRUxFTUVOVCAlaDEucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDEuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGgxLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWgxLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDEucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGgxLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoMi5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoMi5lbGVtZW50O1sNCi08IUVOVElUWSAlIGgyLnFuYW1lICAiaDIiID4NCi08IUVMRU1FTlQgJWgyLnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGgyLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoMi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoMi5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWgyLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoMi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDMuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDMuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoMy5xbmFtZSAgImgzIiA+DQotPCFFTEVNRU5UICVoMy5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoMy5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDMuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDMuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoMy5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDMuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWg0LmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaDQucW5hbWUgICJoNCIgPg0KLTwhRUxFTUVOVCAlaDQucW5hbWU7ICAlSGVhZGluZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaDQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGg0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWg0LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaDQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGg0LmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNS5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVoNS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGg1LnFuYW1lICAiaDUiID4NCi08IUVMRU1FTlQgJWg1LnFuYW1lOyAgJUhlYWRpbmcuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGg1LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoNS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVoNS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWg1LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBoNS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDYuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaDYuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoNi5xbmFtZSAgImg2IiA+DQotPCFFTEVNRU5UICVoNi5xbmFtZTsgICVIZWFkaW5nLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoNi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaDYuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaDYuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoNi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaDYuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1ibGtwaHJhcy0xLm1vZCAtLT4NCi1dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC10ZXh0LTEubW9kIC0tPg0KLQ0KLQ0KLTwhRU5USVRZICUgeGh0bWwtaHlwZXJ0ZXh0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEh5cGVydGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaHlwZXJ0ZXh0LTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgSHlwZXJ0ZXh0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWh5cGVydGV4dC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSHlwZXJ0ZXh0IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWh5cGVydGV4dC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBIeXBlcnRleHQNCi0NCi0gICAgICAgIGENCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBhbmNob3IgKCdhJykgZWxlbWVudCB0eXBlLCB3aGljaA0KLSAgICAgZGVmaW5lcyB0aGUgc291cmNlIG9mIGEgaHlwZXJ0ZXh0IGxpbmsuIFRoZSBkZXN0aW5hdGlvbg0KLSAgICAgKG9yIGxpbmsgJ3RhcmdldCcpIGlzIGlkZW50aWZpZWQgdmlhIGl0cyAnaWQnIGF0dHJpYnV0ZQ0KLSAgICAgcmF0aGVyIHRoYW4gdGhlICduYW1lJyBhdHRyaWJ1dGUgYXMgd2FzIHVzZWQgaW4gSFRNTC4NCi0tLT4NCi0NCi08IS0tIC4uLi4uLi4uLi4uLiAgQW5jaG9yIEVsZW1lbnQgIC4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGEuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGEuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxOb0FuY2hvci5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGEucW5hbWUgICJhIiA+DQotPCFFTEVNRU5UICVhLnFuYW1lOyAgJWEuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGEuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGEuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYS5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWEucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgaHJlZiAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGNoYXJzZXQgICAgICAlQ2hhcnNldC5kYXRhdHlwZTsgICAgICAgI0lNUExJRUQNCi0gICAgICB0eXBlICAgICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotICAgICAgaHJlZmxhbmcgICAgICVMYW5ndWFnZUNvZGUuZGF0YXR5cGU7ICAjSU1QTElFRA0KLSAgICAgIHJlbCAgICAgICAgICAlTGlua1R5cGVzLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICByZXYgICAgICAgICAgJUxpbmtUeXBlcy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgYWNjZXNza2V5ICAgICVDaGFyYWN0ZXIuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLSAgICAgIHRhYmluZGV4ICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgYS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWh5cGVydGV4dC0xLm1vZCAtLT4NCi0NCi0NCi08IUVOVElUWSAlIHhodG1sLWxpc3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGlzdHMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpc3QtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBMaXN0cyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtbGlzdC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGlzdHMgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGlzdC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBMaXN0cw0KLQ0KLSAgICAgICAgZGwsIGR0LCBkZCwgb2wsIHVsLCBsaQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGxpc3Qtb3JpZW50ZWQgZWxlbWVudCB0eXBlcw0KLSAgICAgYW5kIHRoZWlyIGF0dHJpYnV0ZXMuDQotLS0+DQotDQotPCFFTlRJVFkgJSBkbC5xbmFtZSAgImRsIiA+DQotPCFFTlRJVFkgJSBkdC5xbmFtZSAgImR0IiA+DQotPCFFTlRJVFkgJSBkZC5xbmFtZSAgImRkIiA+DQotPCFFTlRJVFkgJSBvbC5xbmFtZSAgIm9sIiA+DQotPCFFTlRJVFkgJSB1bC5xbmFtZSAgInVsIiA+DQotPCFFTlRJVFkgJSBsaS5xbmFtZSAgImxpIiA+DQotDQotPCEtLSBkbDogRGVmaW5pdGlvbiBMaXN0IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBkbC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkbC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGRsLmNvbnRlbnQgICIoICVkdC5xbmFtZTsgfCAlZGQucW5hbWU7ICkrIiA+DQotPCFFTEVNRU5UICVkbC5xbmFtZTsgICVkbC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZGwuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRsLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWRsLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZGwucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGRsLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBkdDogRGVmaW5pdGlvbiBUZXJtIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBkdC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVkdC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGR0LmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAlZHQucW5hbWU7ICAlZHQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGR0LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBkdC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVkdC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWR0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBkdC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZGQ6IERlZmluaXRpb24gRGVzY3JpcHRpb24gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgZGQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZGQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBkZC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3cubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICVkZC5xbmFtZTsgICVkZC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZGQuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGRkLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWRkLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZGQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGRkLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBvbDogT3JkZXJlZCBMaXN0IChudW1iZXJlZCBzdHlsZXMpIC4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBvbC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVvbC5lbGVtZW50O1sNCi08IUVOVElUWSAlIG9sLmNvbnRlbnQgICIoICVsaS5xbmFtZTsgKSsiID4NCi08IUVMRU1FTlQgJW9sLnFuYW1lOyAgJW9sLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBvbC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgb2wuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslb2wuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVvbC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygb2wuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHVsOiBVbm9yZGVyZWQgTGlzdCAoYnVsbGV0IHN0eWxlcykgLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHVsLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXVsLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdWwuY29udGVudCAgIiggJWxpLnFuYW1lOyApKyIgPg0KLTwhRUxFTUVOVCAldWwucW5hbWU7ICAldWwuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHVsLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB1bC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV1bC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXVsLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB1bC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gbGk6IExpc3QgSXRlbSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgbGkuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslbGkuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBsaS5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3cubWl4OyApKiINCi0+DQotPCFFTEVNRU5UICVsaS5xbmFtZTsgICVsaS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgbGkuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGxpLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWxpLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlbGkucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGxpLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtbGlzdC0xLm1vZCAtLT4NCi0NCi08IS0tIEV4dGVuZCBsaXN0cyB3aXRoIHZhbHVlIGFuZCBzdGFydCBhdHRyaWJ1dGVzIC0tPiANCi08IUFUVExJU1QgJWxpLnFuYW1lOw0KLSAgICAgIHZhbHVlICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhQVRUTElTVCAlb2wucW5hbWU7DQotICAgICAgc3RhcnQgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi0NCi08IS0tIDo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6IC0tPg0KLQ0KLTwhLS0gSW1hZ2UgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWltYWdlLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEltYWdlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaW1hZ2UtMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBJbWFnZXMgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gZmlsZTogeGh0bWwtaW1hZ2UtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSb3Zpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEltYWdlcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbWFnZS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBJbWFnZXMNCi0NCi0gICAgICAgIGltZw0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgbWFya3VwIHRvIHN1cHBvcnQgYmFzaWMgaW1hZ2UgZW1iZWRkaW5nLg0KLS0tPg0KLQ0KLTwhLS0gVG8gYXZvaWQgcHJvYmxlbXMgd2l0aCB0ZXh0LW9ubHkgVUFzIGFzIHdlbGwgYXMgdG8gbWFrZQ0KLSAgICAgaW1hZ2UgY29udGVudCB1bmRlcnN0YW5kYWJsZSBhbmQgbmF2aWdhYmxlIHRvIHVzZXJzIG9mDQotICAgICBub24tdmlzdWFsIFVBcywgeW91IG5lZWQgdG8gcHJvdmlkZSBhIGRlc2NyaXB0aW9uIHdpdGgNCi0gICAgIHRoZSAnYWx0JyBhdHRyaWJ1dGUsIGFuZCBhdm9pZCBzZXJ2ZXItc2lkZSBpbWFnZSBtYXBzLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgaW1nLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWltZy5lbGVtZW50O1sNCi08IUVOVElUWSAlIGltZy5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIGltZy5xbmFtZSAgImltZyIgPg0KLTwhRUxFTUVOVCAlaW1nLnFuYW1lOyAgJWltZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgaW1nLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBpbWcuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaW1nLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlaW1nLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHNyYyAgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI1JFUVVJUkVEDQotICAgICAgYWx0ICAgICAgICAgICVUZXh0LmRhdGF0eXBlOyAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBsb25nZGVzYyAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgaGVpZ2h0ICAgICAgICVMZW5ndGguZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIHdpZHRoICAgICAgICAlTGVuZ3RoLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2YgaW1nLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtaW1hZ2UtMS5tb2QgLS0+DQotDQotDQotPCEtLSBUYWJsZXMgTW9kdWxlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtdGFibGUubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgVGFibGVzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy10YWJsZS0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBCYXNpYyBUYWJsZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJhc2ljLXRhYmxlLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MIEJhc2ljLCBhIHByb3BlciBzdWJzZXQgb2YgWEhUTUwuDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIFRhYmxlcyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy10YWJsZS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBCYXNpYyBUYWJsZXMNCi0NCi0gICAgICAgIHRhYmxlLCBjYXB0aW9uLCB0ciwgdGgsIHRkDQotDQotICAgICBUaGlzIHRhYmxlIG1vZHVsZSBkZWNsYXJlcyBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyBkZWZpbmluZw0KLSAgICAgYSB0YWJsZSBtb2RlbCBiYXNlZCBmdW5kYW1lbnRhbGx5IG9uIGZlYXR1cmVzIGZvdW5kIGluIHRoZQ0KLSAgICAgd2lkZWx5LWRlcGxveWVkIEhUTUwgMy4yIHRhYmxlIG1vZGVsLiAgV2hpbGUgdGhpcyBtb2R1bGUNCi0gICAgIG1pbWljcyB0aGUgY29udGVudCBtb2RlbCBhbmQgdGFibGUgYXR0cmlidXRlcyBvZiBIVE1MIDMuMg0KLSAgICAgdGFibGVzLCB0aGUgZWxlbWVudCB0eXBlcyBkZWNsYXJlZCBoZXJlaW4gYWxzbyBpbmNsdWRlcyBhbGwNCi0gICAgIEhUTUwgNCBjb21tb24gYW5kIG1vc3Qgb2YgdGhlIEhUTUwgNCB0YWJsZSBhdHRyaWJ1dGVzLg0KLS0tPg0KLQ0KLTwhLS0gZGVjbGFyZSBxdWFsaWZpZWQgZWxlbWVudCB0eXBlIG5hbWVzOg0KLS0tPg0KLTwhRU5USVRZICUgdGFibGUucW5hbWUgICJ0YWJsZSIgPg0KLTwhRU5USVRZICUgY2FwdGlvbi5xbmFtZSAgImNhcHRpb24iID4NCi08IUVOVElUWSAlIHRyLnFuYW1lICAidHIiID4NCi08IUVOVElUWSAlIHRoLnFuYW1lICAidGgiID4NCi08IUVOVElUWSAlIHRkLnFuYW1lICAidGQiID4NCi0NCi08IS0tIGhvcml6b250YWwgYWxpZ25tZW50IGF0dHJpYnV0ZXMgZm9yIGNlbGwgY29udGVudHMNCi0tLT4NCi08IUVOVElUWSAlIENlbGxIQWxpZ24uYXR0cmliDQotICAgICAiYWxpZ24gICAgICAgICggbGVmdA0KLSAgICAgICAgICAgICAgICAgICB8IGNlbnRlcg0KLSAgICAgICAgICAgICAgICAgICB8IHJpZ2h0ICkgICAgICAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhLS0gdmVydGljYWwgYWxpZ25tZW50IGF0dHJpYnV0ZXMgZm9yIGNlbGwgY29udGVudHMNCi0tLT4NCi08IUVOVElUWSAlIENlbGxWQWxpZ24uYXR0cmliDQotICAgICAidmFsaWduICAgICAgICggdG9wDQotICAgICAgICAgICAgICAgICAgIHwgbWlkZGxlDQotICAgICAgICAgICAgICAgICAgIHwgYm90dG9tICkgICAgICAgICAgICAgICAjSU1QTElFRCINCi0+DQotDQotPCEtLSBzY29wZSBpcyBzaW1wbGVyIHRoYW4gYXhlcyBhdHRyaWJ1dGUgZm9yIGNvbW1vbiB0YWJsZXMNCi0tLT4NCi08IUVOVElUWSAlIHNjb3BlLmF0dHJpYg0KLSAgICAgInNjb3BlICAgICAgICAoIHJvdyB8IGNvbCAgKSAgICAgICAgICAgI0lNUExJRUQiDQotPg0KLQ0KLTwhLS0gdGFibGU6IFRhYmxlIEVsZW1lbnQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgdGFibGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldGFibGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0YWJsZS5jb250ZW50DQotICAgICAiKCAlY2FwdGlvbi5xbmFtZTs/LCAldHIucW5hbWU7KyApIg0KLT4NCi08IUVMRU1FTlQgJXRhYmxlLnFuYW1lOyAgJXRhYmxlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0YWJsZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdGFibGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldGFibGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0YWJsZS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBzdW1tYXJ5ICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIHRhYmxlLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBjYXB0aW9uOiBUYWJsZSBDYXB0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBjYXB0aW9uLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWNhcHRpb24uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBjYXB0aW9uLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAlY2FwdGlvbi5xbmFtZTsgICVjYXB0aW9uLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBjYXB0aW9uLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBjYXB0aW9uLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWNhcHRpb24uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVjYXB0aW9uLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBjYXB0aW9uLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSB0cjogVGFibGUgUm93IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSB0ci5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0ci5lbGVtZW50O1sNCi08IUVOVElUWSAlIHRyLmNvbnRlbnQgICIoICV0aC5xbmFtZTsgfCAldGQucW5hbWU7ICkrIiA+DQotPCFFTEVNRU5UICV0ci5xbmFtZTsgICV0ci5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgdHIuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHRyLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXRyLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAldHIucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgJUNlbGxIQWxpZ24uYXR0cmliOw0KLSAgICAgICVDZWxsVkFsaWduLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdHIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIHRoOiBUYWJsZSBIZWFkZXIgQ2VsbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIHRoIGlzIGZvciBoZWFkZXIgY2VsbHMsIHRkIGZvciBkYXRhLA0KLSAgICAgYnV0IGZvciBjZWxscyBhY3RpbmcgYXMgYm90aCB1c2UgdGQNCi0tLT4NCi0NCi08IUVOVElUWSAlIHRoLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXRoLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgdGguY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVGbG93Tm9UYWJsZS5taXg7ICkqIg0KLT4NCi08IUVMRU1FTlQgJXRoLnFuYW1lOyAgJXRoLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0aC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdGguYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldGguYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0aC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBhYmJyICAgICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNJTVBMSUVEDQotICAgICAgYXhpcyAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGhlYWRlcnMgICAgICBJRFJFRlMgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICAlc2NvcGUuYXR0cmliOw0KLSAgICAgIHJvd3NwYW4gICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgJzEnDQotICAgICAgY29sc3BhbiAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAnMScNCi0gICAgICAlQ2VsbEhBbGlnbi5hdHRyaWI7DQotICAgICAgJUNlbGxWQWxpZ24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0aC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gdGQ6IFRhYmxlIERhdGEgQ2VsbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgdGQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldGQuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0ZC5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUZsb3dOb1RhYmxlLm1peDsgKSoiDQotPg0KLTwhRUxFTUVOVCAldGQucW5hbWU7ICAldGQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHRkLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0ZC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0ZC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXRkLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGFiYnIgICAgICAgICAlVGV4dC5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBheGlzICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgaGVhZGVycyAgICAgIElEUkVGUyAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgICVzY29wZS5hdHRyaWI7DQotICAgICAgcm93c3BhbiAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAnMScNCi0gICAgICBjb2xzcGFuICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICcxJw0KLSAgICAgICVDZWxsSEFsaWduLmF0dHJpYjsNCi0gICAgICAlQ2VsbFZBbGlnbi5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIHRkLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmFzaWMtdGFibGUtMS5tb2QgLS0+DQotDQotDQotPCEtLSBGb3JtcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIA0KLQlYSFRNTCBiYXNpYyBmb3JtcyBtb2R1bGUgZXh0ZW5kZWQgd2l0aCBvcHRncm91cCBhbmQgZmllbGRzZXQNCi0tLT4NCi08IUVMRU1FTlQgJW9wdGdyb3VwLnFuYW1lOyAoJW9wdGlvbi5xbmFtZTspKz4NCi08IUFUVExJU1QgJW9wdGdyb3VwLnFuYW1lOw0KLQklQ29tbW9uLmF0dHJpYjsgDQotCWxhYmVsICVUZXh0LmRhdGF0eXBlOyAjUkVRVUlSRUQNCi0+DQotPCFFTlRJVFkgJSBzZWxlY3QuY29udGVudCAiKCAlb3B0Z3JvdXAucW5hbWU7IHwgJW9wdGlvbi5xbmFtZTsgKSsiPg0KLTwhRUxFTUVOVCAlZmllbGRzZXQucW5hbWU7ICgjUENEQVRBIHwgJUZsb3cubWl4OykqPg0KLTwhQVRUTElTVCAlZmllbGRzZXQucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0+DQotPCFFTlRJVFkgJSBmb3JtLmNvbnRlbnQgIiggJUJsa05vRm9ybS5taXg7IHwgJWZpZWxkc2V0LnFuYW1lOyApKyI+DQotPCFFTlRJVFkgJSB4aHRtbC1mb3JtLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIEZvcm1zIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy1mb3JtLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgU2ltcGxpZmllZCBGb3JtcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJhc2ljLWZvcm0tMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwgQmFzaWMsIGEgcHJvcGVyIHN1YnNldCBvZiBYSFRNTC4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgRm9ybXMgMS4wLy9FTiIgIA0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy1mb3JtLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJhc2ljIEZvcm1zDQotDQotICAgICBUaGlzIGZvcm1zIG1vZHVsZSBpcyBiYXNlZCBvbiB0aGUgSFRNTCAzLjIgZm9ybXMgbW9kZWwsIHdpdGgNCi0gICAgIHRoZSBXQUktcmVxdWVzdGVkIGFkZGl0aW9uIG9mIHRoZSBsYWJlbCBlbGVtZW50LiBXaGlsZSB0aGlzIA0KLSAgICAgbW9kdWxlIGVzc2VudGlhbGx5IG1pbWljcyB0aGUgY29udGVudCBtb2RlbCBhbmQgYXR0cmlidXRlcyBvZiANCi0gICAgIEhUTUwgMy4yIGZvcm1zLCB0aGUgZWxlbWVudCB0eXBlcyBkZWNsYXJlZCBoZXJlaW4gYWxzbyBpbmNsdWRlDQotICAgICBhbGwgSFRNTCA0IGNvbW1vbiBhdHRyaWJ1dGVzLg0KLQ0KLSAgICAgICAgZm9ybSwgbGFiZWwsIGlucHV0LCBzZWxlY3QsIG9wdGlvbiwgdGV4dGFyZWENCi0tLT4NCi0NCi08IS0tIGRlY2xhcmUgcXVhbGlmaWVkIGVsZW1lbnQgdHlwZSBuYW1lczoNCi0tLT4NCi08IUVOVElUWSAlIGZvcm0ucW5hbWUgICJmb3JtIiA+DQotPCFFTlRJVFkgJSBsYWJlbC5xbmFtZSAgImxhYmVsIiA+DQotPCFFTlRJVFkgJSBpbnB1dC5xbmFtZSAgImlucHV0IiA+DQotPCFFTlRJVFkgJSBzZWxlY3QucW5hbWUgICJzZWxlY3QiID4NCi08IUVOVElUWSAlIG9wdGlvbi5xbmFtZSAgIm9wdGlvbiIgPg0KLTwhRU5USVRZICUgdGV4dGFyZWEucW5hbWUgICJ0ZXh0YXJlYSIgPg0KLQ0KLTwhLS0gJUJsa05vRm9ybS5taXg7IGluY2x1ZGVzIGFsbCBub24tZm9ybSBibG9jayBlbGVtZW50cywNCi0gICAgIHBsdXMgJU1pc2MuY2xhc3M7DQotLS0+DQotPCFFTlRJVFkgJSBCbGtOb0Zvcm0ubWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVCbGtQcmVzLmNsYXNzOw0KLSAgICAgIHwgJXRhYmxlLnFuYW1lOyANCi0gICAgICAlQmxvY2suZXh0cmE7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IS0tIGZvcm06IEZvcm0gRWxlbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGZvcm0uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslZm9ybS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGZvcm0uY29udGVudA0KLSAgICAgIiggJUJsa05vRm9ybS5taXg7ICkrIg0KLT4NCi08IUVMRU1FTlQgJWZvcm0ucW5hbWU7ICAlZm9ybS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgZm9ybS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgZm9ybS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVmb3JtLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlZm9ybS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBhY3Rpb24gICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIG1ldGhvZCAgICAgICAoIGdldCB8IHBvc3QgKSAgICAgICAgICAgJ2dldCcNCi0gICAgICBlbmN0eXBlICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnDQotPg0KLTwhLS0gZW5kIG9mIGZvcm0uYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGxhYmVsOiBGb3JtIEZpZWxkIExhYmVsIFRleHQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGxhYmVsLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWxhYmVsLmVsZW1lbnQ7Ww0KLTwhLS0gRWFjaCBsYWJlbCBtdXN0IG5vdCBjb250YWluIG1vcmUgdGhhbiBPTkUgZmllbGQNCi0tLT4NCi08IUVOVElUWSAlIGxhYmVsLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgDQotICAgICAgfCAlaW5wdXQucW5hbWU7IHwgJXNlbGVjdC5xbmFtZTsgfCAldGV4dGFyZWEucW5hbWU7DQotICAgICAgfCAlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlSTE4bi5jbGFzczsNCi0gICAgICAlSW5sUHJlcy5jbGFzczsNCi0gICAgICAlSW5sU3BlY2lhbC5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsgKSoiDQotPg0KLTwhRUxFTUVOVCAlbGFiZWwucW5hbWU7ICAlbGFiZWwuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGxhYmVsLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBsYWJlbC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVsYWJlbC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWxhYmVsLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGZvciAgICAgICAgICBJRFJFRiAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBhY2Nlc3NrZXkgICAgJUNoYXJhY3Rlci5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIGxhYmVsLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBpbnB1dDogRm9ybSBDb250cm9sIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBpbnB1dC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVpbnB1dC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGlucHV0LmNvbnRlbnQgICJFTVBUWSIgPg0KLTwhRUxFTUVOVCAlaW5wdXQucW5hbWU7ICAlaW5wdXQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGlucHV0LmVsZW1lbnQgLS0+XV0+DQotDQotPCEtLSBCYXNpYyBGb3JtcyByZW1vdmVzICdpbWFnZScgYW5kICdmaWxlJyBpbnB1dCB0eXBlcy4NCi0tLT4NCi08IUVOVElUWSAlIGlucHV0LmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWlucHV0LmF0dGxpc3Q7Ww0KLTwhRU5USVRZICUgSW5wdXRUeXBlLmNsYXNzDQotICAgICAiKCB0ZXh0IHwgcGFzc3dvcmQgfCBjaGVja2JveCB8IHJhZGlvIA0KLSAgICAgIHwgc3VibWl0IHwgcmVzZXQgfCBoaWRkZW4gKSINCi0+DQotPCEtLSBhdHRyaWJ1dGUgbmFtZSByZXF1aXJlZCBmb3IgYWxsIGJ1dCBzdWJtaXQgJiByZXNldA0KLS0tPg0KLTwhQVRUTElTVCAlaW5wdXQucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgdHlwZSAgICAgICAgICVJbnB1dFR5cGUuY2xhc3M7ICAgICAgICAndGV4dCcNCi0gICAgICBuYW1lICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdmFsdWUgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGNoZWNrZWQgICAgICAoIGNoZWNrZWQgKSAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBzaXplICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgbWF4bGVuZ3RoICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIHNyYyAgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB0YWJpbmRleCAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgYWNjZXNza2V5ICAgICVDaGFyYWN0ZXIuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBpbnB1dC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gc2VsZWN0OiBPcHRpb24gU2VsZWN0b3IgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgc2VsZWN0LmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXNlbGVjdC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHNlbGVjdC5jb250ZW50ICAiKCAlb3B0aW9uLnFuYW1lOyApKyIgPg0KLTwhRUxFTUVOVCAlc2VsZWN0LnFuYW1lOyAgJXNlbGVjdC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc2VsZWN0LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzZWxlY3QuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc2VsZWN0LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc2VsZWN0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIG5hbWUgICAgICAgICBDREFUQSAgICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBzaXplICAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotICAgICAgbXVsdGlwbGUgICAgICggbXVsdGlwbGUgKSAgICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIHRhYmluZGV4ICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotPCEtLSBlbmQgb2Ygc2VsZWN0LmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBvcHRpb246IFNlbGVjdGFibGUgQ2hvaWNlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBvcHRpb24uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslb3B0aW9uLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgb3B0aW9uLmNvbnRlbnQgICIoICNQQ0RBVEEgKSIgPg0KLTwhRUxFTUVOVCAlb3B0aW9uLnFuYW1lOyAgJW9wdGlvbi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygb3B0aW9uLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBvcHRpb24uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslb3B0aW9uLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlb3B0aW9uLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIHNlbGVjdGVkICAgICAoIHNlbGVjdGVkICkgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB2YWx1ZSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIG9wdGlvbi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gdGV4dGFyZWE6IE11bHRpLUxpbmUgVGV4dCBGaWVsZCAuLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgdGV4dGFyZWEuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldGV4dGFyZWEuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0ZXh0YXJlYS5jb250ZW50ICAiKCAjUENEQVRBICkiID4NCi08IUVMRU1FTlQgJXRleHRhcmVhLnFuYW1lOyAgJXRleHRhcmVhLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0ZXh0YXJlYS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdGV4dGFyZWEuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldGV4dGFyZWEuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0ZXh0YXJlYS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0gICAgICBuYW1lICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgcm93cyAgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBjb2xzICAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNSRVFVSVJFRA0KLSAgICAgIHRhYmluZGV4ICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICBhY2Nlc3NrZXkgICAgJUNoYXJhY3Rlci5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIHRleHRhcmVhLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmFzaWMtZm9ybS0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIExpbmsgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1saW5rLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpbmsgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGluay0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIExpbmsgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1saW5rLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaW5rIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGluay0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBMaW5rIGVsZW1lbnQNCi0NCi0gICAgICAgIGxpbmsNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBsaW5rIGVsZW1lbnQgdHlwZSBhbmQgaXRzIGF0dHJpYnV0ZXMsDQotICAgICB3aGljaCBjb3VsZCAoaW4gcHJpbmNpcGxlKSBiZSB1c2VkIHRvIGRlZmluZSBkb2N1bWVudC1sZXZlbCBsaW5rcw0KLSAgICAgdG8gZXh0ZXJuYWwgcmVzb3VyY2VzIHN1Y2ggYXM6DQotDQotICAgICBhKSBmb3IgZG9jdW1lbnQgc3BlY2lmaWMgdG9vbGJhcnMvbWVudXMsIGUuZy4gc3RhcnQsIGNvbnRlbnRzLA0KLSAgICAgICAgcHJldmlvdXMsIG5leHQsIGluZGV4LCBlbmQsIGhlbHANCi0gICAgIGIpIHRvIGxpbmsgdG8gYSBzZXBhcmF0ZSBzdHlsZSBzaGVldCAocmVsPSJzdHlsZXNoZWV0IikNCi0gICAgIGMpIHRvIG1ha2UgYSBsaW5rIHRvIGEgc2NyaXB0IChyZWw9InNjcmlwdCIpDQotICAgICBkKSBieSBzdHlsZSBzaGVldHMgdG8gY29udHJvbCBob3cgY29sbGVjdGlvbnMgb2YgaHRtbCBub2RlcyBhcmUNCi0gICAgICAgIHJlbmRlcmVkIGludG8gcHJpbnRlZCBkb2N1bWVudHMNCi0gICAgIGUpIHRvIG1ha2UgYSBsaW5rIHRvIGEgcHJpbnRhYmxlIHZlcnNpb24gb2YgdGhpcyBkb2N1bWVudA0KLSAgICAgICAgZS5nLiBhIHBvc3RzY3JpcHQgb3IgcGRmIHZlcnNpb24gKHJlbD0iYWx0ZXJuYXRlIiBtZWRpYT0icHJpbnQiKQ0KLS0tPg0KLQ0KLTwhLS0gbGluazogTWVkaWEtSW5kZXBlbmRlbnQgTGluayAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgbGluay5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVsaW5rLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgbGluay5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIGxpbmsucW5hbWUgICJsaW5rIiA+DQotPCFFTEVNRU5UICVsaW5rLnFuYW1lOyAgJWxpbmsuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIGxpbmsuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGxpbmsuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslbGluay5hdHRsaXN0O1sNCi08IUFUVExJU1QgJWxpbmsucW5hbWU7DQotICAgICAgJUNvbW1vbi5hdHRyaWI7DQotICAgICAgY2hhcnNldCAgICAgICVDaGFyc2V0LmRhdGF0eXBlOyAgICAgICAjSU1QTElFRA0KLSAgICAgIGhyZWYgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBocmVmbGFuZyAgICAgJUxhbmd1YWdlQ29kZS5kYXRhdHlwZTsgICNJTVBMSUVEDQotICAgICAgdHlwZSAgICAgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjSU1QTElFRA0KLSAgICAgIHJlbCAgICAgICAgICAlTGlua1R5cGVzLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICByZXYgICAgICAgICAgJUxpbmtUeXBlcy5kYXRhdHlwZTsgICAgICNJTVBMSUVEDQotICAgICAgbWVkaWEgICAgICAgICVNZWRpYURlc2MuZGF0YXR5cGU7ICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBsaW5rLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtbGluay0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIERvY3VtZW50IE1ldGFpbmZvcm1hdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1tZXRhLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIE1ldGFpbmZvcm1hdGlvbiAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbWV0YS0xLm1vZCIgPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIERvY3VtZW50IE1ldGFpbmZvcm1hdGlvbiBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1tZXRhLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBNZXRhaW5mb3JtYXRpb24gMS4wLy9FTiINCi0gICAgICAgU1lTVEVNICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbWV0YS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBNZXRhIEluZm9ybWF0aW9uDQotDQotICAgICAgICBtZXRhDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgbWV0YSBlbGVtZW50IHR5cGUgYW5kIGl0cyBhdHRyaWJ1dGVzLA0KLSAgICAgdXNlZCB0byBwcm92aWRlIGRlY2xhcmF0aXZlIGRvY3VtZW50IG1ldGFpbmZvcm1hdGlvbi4NCi0tLT4NCi0NCi08IS0tIG1ldGE6IEdlbmVyaWMgTWV0YWluZm9ybWF0aW9uIC4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIG1ldGEuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslbWV0YS5lbGVtZW50O1sNCi08IUVOVElUWSAlIG1ldGEuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBtZXRhLnFuYW1lICAibWV0YSIgPg0KLTwhRUxFTUVOVCAlbWV0YS5xbmFtZTsgICVtZXRhLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBtZXRhLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBtZXRhLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJW1ldGEuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVtZXRhLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJUkxOG4uYXR0cmliOw0KLSAgICAgIGh0dHAtZXF1aXYgICBOTVRPS0VOICAgICAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBuYW1lICAgICAgICAgTk1UT0tFTiAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY29udGVudCAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICBzY2hlbWUgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIG1ldGEuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1tZXRhLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gQmFzZSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWJhc2UubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzZSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNlLTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQmFzZSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJhc2UtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2UgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNlLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJhc2UgZWxlbWVudA0KLQ0KLSAgICAgICAgYmFzZQ0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGJhc2UgZWxlbWVudCB0eXBlIGFuZCBpdHMgYXR0cmlidXRlcywNCi0gICAgIHVzZWQgdG8gZGVmaW5lIGEgYmFzZSBVUkkgYWdhaW5zdCB3aGljaCByZWxhdGl2ZSBVUklzIGluIHRoZQ0KLSAgICAgZG9jdW1lbnQgd2lsbCBiZSByZXNvbHZlZC4NCi0NCi0gICAgIE5vdGUgdGhhdCB0aGlzIG1vZHVsZSBhbHNvIHJlZGVjbGFyZXMgdGhlIGNvbnRlbnQgbW9kZWwgZm9yDQotICAgICB0aGUgaGVhZCBlbGVtZW50IHRvIGluY2x1ZGUgdGhlIGJhc2UgZWxlbWVudC4NCi0tLT4NCi0NCi08IS0tIGJhc2U6IERvY3VtZW50IEJhc2UgVVJJIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGJhc2UuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYmFzZS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGJhc2UuY29udGVudCAgIkVNUFRZIiA+DQotPCFFTlRJVFkgJSBiYXNlLnFuYW1lICAiYmFzZSIgPg0KLTwhRUxFTUVOVCAlYmFzZS5xbmFtZTsgICViYXNlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBiYXNlLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBiYXNlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWJhc2UuYXR0bGlzdDtbDQotPCFBVFRMSVNUICViYXNlLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgaHJlZiAgICAgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjUkVRVUlSRUQNCi0+DQotPCEtLSBlbmQgb2YgYmFzZS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaGVhZC5jb250ZW50DQotICAgICIoICVIZWFkT3B0cy5taXg7LA0KLSAgICAgKCAoICV0aXRsZS5xbmFtZTssICVIZWFkT3B0cy5taXg7LCAoICViYXNlLnFuYW1lOywgJUhlYWRPcHRzLm1peDsgKT8gKQ0KLSAgICAgfCAoICViYXNlLnFuYW1lOywgJUhlYWRPcHRzLm1peDssICggJXRpdGxlLnFuYW1lOywgJUhlYWRPcHRzLm1peDsgKSkpKSINCi0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtYmFzZS0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIFN0eWxlc2hlZXRzIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHlsZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFN0eWxlIFNoZWV0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3R5bGUtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIERvY3VtZW50IFN0eWxlIFNoZWV0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1zdHlsZS0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIFN0eWxlIFNoZWV0cyAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHlsZS0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBTdHlsZSBTaGVldHMNCi0NCi0gICAgICAgIHN0eWxlDQotDQotICAgICBUaGlzIG1vZHVsZSBkZWNsYXJlcyB0aGUgc3R5bGUgZWxlbWVudCB0eXBlIGFuZCBpdHMgYXR0cmlidXRlcywNCi0gICAgIHVzZWQgdG8gZW1iZWQgc3R5bGUgc2hlZXQgaW5mb3JtYXRpb24gaW4gdGhlIGRvY3VtZW50IGhlYWQgZWxlbWVudC4NCi0tLT4NCi0NCi08IS0tIHN0eWxlOiBTdHlsZSBTaGVldCBJbmZvcm1hdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIHN0eWxlLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXN0eWxlLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgc3R5bGUuY29udGVudCAgIiggI1BDREFUQSApIiA+DQotPCFFTlRJVFkgJSBzdHlsZS5xbmFtZSAgInN0eWxlIiA+DQotPCFFTEVNRU5UICVzdHlsZS5xbmFtZTsgICVzdHlsZS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3R5bGUuZWxlbWVudCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN0eWxlLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXN0eWxlLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3R5bGUucW5hbWU7DQotICAgICAgJVhIVE1MLnhtbG5zLmF0dHJpYjsNCi0gICAgICAldGl0bGUuYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0gICAgICB0eXBlICAgICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNSRVFVSVJFRA0KLSAgICAgIG1lZGlhICAgICAgICAlTWVkaWFEZXNjLmRhdGF0eXBlOyAgICAgI0lNUExJRUQNCi0gICAgICB4bWw6c3BhY2UgICAgKCBwcmVzZXJ2ZSApICAgICAgICAgICAgICNGSVhFRCAncHJlc2VydmUnDQotPg0KLTwhLS0gZW5kIG9mIHN0eWxlLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtc3R5bGUtMS5tb2QgLS0+DQotDQotDQotPCEtLSBQYXJhbSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtcGFyYW0ubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgUGFyYW0gRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtcGFyYW0tMS5tb2QiID4NCi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBYSFRNTCBQYXJhbSBFbGVtZW50IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXBhcmFtLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBQYXJhbSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXBhcmFtLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIFBhcmFtZXRlcnMgZm9yIEphdmEgQXBwbGV0cyBhbmQgRW1iZWRkZWQgT2JqZWN0cw0KLQ0KLSAgICAgICAgcGFyYW0NCi0NCi0gICAgIFRoaXMgbW9kdWxlIHByb3ZpZGVzIGRlY2xhcmF0aW9ucyBmb3IgdGhlIHBhcmFtIGVsZW1lbnQsDQotICAgICB1c2VkIHRvIHByb3ZpZGUgbmFtZWQgcHJvcGVydHkgdmFsdWVzIGZvciB0aGUgYXBwbGV0DQotICAgICBhbmQgb2JqZWN0IGVsZW1lbnRzLg0KLS0tPg0KLQ0KLTwhLS0gcGFyYW06IE5hbWVkIFByb3BlcnR5IFZhbHVlIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgcGFyYW0uZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslcGFyYW0uZWxlbWVudDtbDQotPCFFTlRJVFkgJSBwYXJhbS5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIHBhcmFtLnFuYW1lICAicGFyYW0iID4NCi08IUVMRU1FTlQgJXBhcmFtLnFuYW1lOyAgJXBhcmFtLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBwYXJhbS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgcGFyYW0uYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslcGFyYW0uYXR0bGlzdDtbDQotPCFBVFRMSVNUICVwYXJhbS5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVpZC5hdHRyaWI7DQotICAgICAgbmFtZSAgICAgICAgIENEQVRBICAgICAgICAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gICAgICB2YWx1ZSAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdmFsdWV0eXBlICAgICggZGF0YSB8IHJlZiB8IG9iamVjdCApICAnZGF0YScNCi0gICAgICB0eXBlICAgICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotPg0KLTwhLS0gZW5kIG9mIHBhcmFtLmF0dGxpc3QgLS0+XV0+DQotDQotPCEtLSBlbmQgb2YgeGh0bWwtcGFyYW0tMS5tb2QgLS0+DQotDQotDQotPCEtLSBFbWJlZGRlZCBPYmplY3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtb2JqZWN0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEVtYmVkZGVkIE9iamVjdCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtb2JqZWN0LTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgRW1iZWRkZWQgT2JqZWN0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW9iamVjdC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRW1iZWRkZWQgT2JqZWN0IDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW9iamVjdC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBFbWJlZGRlZCBPYmplY3RzDQotDQotICAgICAgICBvYmplY3QNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBvYmplY3QgZWxlbWVudCB0eXBlIGFuZCBpdHMgYXR0cmlidXRlcywgdXNlZA0KLSAgICAgdG8gZW1iZWQgZXh0ZXJuYWwgb2JqZWN0cyBhcyBwYXJ0IG9mIFhIVE1MIHBhZ2VzLiBJbiB0aGUgZG9jdW1lbnQsDQotICAgICBwbGFjZSBwYXJhbSBlbGVtZW50cyBwcmlvciB0byBvdGhlciBjb250ZW50IHdpdGhpbiB0aGUgb2JqZWN0IGVsZW1lbnQuDQotDQotICAgICBOb3RlIHRoYXQgdXNlIG9mIHRoaXMgbW9kdWxlIHJlcXVpcmVzIGluc3RhbnRpYXRpb24gb2YgdGhlIFBhcmFtDQotICAgICBFbGVtZW50IE1vZHVsZS4NCi0tLT4NCi0NCi08IS0tIG9iamVjdDogR2VuZXJpYyBFbWJlZGRlZCBPYmplY3QgLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIG9iamVjdC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVvYmplY3QuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBvYmplY3QuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVGbG93Lm1peDsgfCAlcGFyYW0ucW5hbWU7ICkqIg0KLT4NCi08IUVOVElUWSAlIG9iamVjdC5xbmFtZSAgIm9iamVjdCIgPg0KLTwhRUxFTUVOVCAlb2JqZWN0LnFuYW1lOyAgJW9iamVjdC5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygb2JqZWN0LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBvYmplY3QuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslb2JqZWN0LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlb2JqZWN0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLSAgICAgIGRlY2xhcmUgICAgICAoIGRlY2xhcmUgKSAgICAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBjbGFzc2lkICAgICAgJVVSSS5kYXRhdHlwZTsgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgY29kZWJhc2UgICAgICVVUkkuZGF0YXR5cGU7ICAgICAgICAgICAjSU1QTElFRA0KLSAgICAgIGRhdGEgICAgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgI0lNUExJRUQNCi0gICAgICB0eXBlICAgICAgICAgJUNvbnRlbnRUeXBlLmRhdGF0eXBlOyAgICNJTVBMSUVEDQotICAgICAgY29kZXR5cGUgICAgICVDb250ZW50VHlwZS5kYXRhdHlwZTsgICAjSU1QTElFRA0KLSAgICAgIGFyY2hpdmUgICAgICAlVVJJcy5kYXRhdHlwZTsgICAgICAgICAgI0lNUExJRUQNCi0gICAgICBzdGFuZGJ5ICAgICAgJVRleHQuZGF0YXR5cGU7ICAgICAgICAgICNJTVBMSUVEDQotICAgICAgaGVpZ2h0ICAgICAgICVMZW5ndGguZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLSAgICAgIHdpZHRoICAgICAgICAlTGVuZ3RoLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0gICAgICBuYW1lICAgICAgICAgQ0RBVEEgICAgICAgICAgICAgICAgICAgICNJTVBMSUVEDQotICAgICAgdGFiaW5kZXggICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAjSU1QTElFRA0KLT4NCi08IS0tIGVuZCBvZiBvYmplY3QuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1vYmplY3QtMS5tb2QgLS0+DQotDQotDQotPCEtLSBEb2N1bWVudCBTdHJ1Y3R1cmUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtc3RydWN0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIERvY3VtZW50IFN0cnVjdHVyZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3RydWN0LTEubW9kIiA+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgU3RydWN0dXJlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLXN0cnVjdC0xLm1vZA0KLQ0KLSAgICAgVGhpcyBpcyBYSFRNTCwgYSByZWZvcm11bGF0aW9uIG9mIEhUTUwgYXMgYSBtb2R1bGFyIFhNTCBhcHBsaWNhdGlvbi4NCi0gICAgIENvcHlyaWdodCAxOTk4LTIwMDEgVzNDIChNSVQsIElOUklBLCBLZWlvKSwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4NCi0gICAgIFJldmlzaW9uOiAkSWQ6IHhodG1sLW1vYmlsZTEwLWZsYXQuZHRkLHYgMS4xIDIwMDQvMDMvMTcgMDQ6MjM6NTcgcGF2ZXJ5IEV4cCAkIFNNSQ0KLQ0KLSAgICAgVGhpcyBEVEQgbW9kdWxlIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRG9jdW1lbnQgU3RydWN0dXJlIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0cnVjdC0xLm1vZCINCi0NCi0gICAgIFJldmlzaW9uczoNCi0gICAgIChub25lKQ0KLSAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBEb2N1bWVudCBTdHJ1Y3R1cmUNCi0NCi0gICAgICAgIHRpdGxlLCBoZWFkLCBib2R5LCBodG1sDQotDQotICAgICBUaGUgU3RydWN0dXJlIE1vZHVsZSBkZWZpbmVzIHRoZSBtYWpvciBzdHJ1Y3R1cmFsIGVsZW1lbnRzIGFuZA0KLSAgICAgdGhlaXIgYXR0cmlidXRlcy4NCi0NCi0gICAgIE5vdGUgdGhhdCB0aGUgY29udGVudCBtb2RlbCBvZiB0aGUgaGVhZCBlbGVtZW50IHR5cGUgaXMgcmVkZWNsYXJlZA0KLSAgICAgd2hlbiB0aGUgQmFzZSBNb2R1bGUgaXMgaW5jbHVkZWQgaW4gdGhlIERURC4NCi0NCi0gICAgIFRoZSBwYXJhbWV0ZXIgZW50aXR5IGNvbnRhaW5pbmcgdGhlIFhNTCBuYW1lc3BhY2UgVVJJIHZhbHVlIHVzZWQNCi0gICAgIGZvciBYSFRNTCBpcyAnJVhIVE1MLnhtbG5zOycsIGRlZmluZWQgaW4gdGhlIFF1YWxpZmllZCBOYW1lcyBtb2R1bGUuDQotLS0+DQotDQotPCEtLSB0aXRsZTogRG9jdW1lbnQgVGl0bGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCEtLSBUaGUgdGl0bGUgZWxlbWVudCBpcyBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBmbG93IG9mIHRleHQuDQotICAgICBJdCBzaG91bGQgYmUgZGlzcGxheWVkLCBmb3IgZXhhbXBsZSBhcyB0aGUgcGFnZSBoZWFkZXIgb3INCi0gICAgIHdpbmRvdyB0aXRsZS4gRXhhY3RseSBvbmUgdGl0bGUgaXMgcmVxdWlyZWQgcGVyIGRvY3VtZW50Lg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgdGl0bGUuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVsldGl0bGUuZWxlbWVudDtbDQotPCFFTlRJVFkgJSB0aXRsZS5jb250ZW50ICAiKCAjUENEQVRBICkiID4NCi08IUVOVElUWSAlIHRpdGxlLnFuYW1lICAidGl0bGUiID4NCi08IUVMRU1FTlQgJXRpdGxlLnFuYW1lOyAgJXRpdGxlLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiB0aXRsZS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgdGl0bGUuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVsldGl0bGUuYXR0bGlzdDtbDQotPCFBVFRMSVNUICV0aXRsZS5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgdGl0bGUuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGhlYWQ6IERvY3VtZW50IEhlYWQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGhlYWQuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaGVhZC5lbGVtZW50O1sNCi08IUVOVElUWSAlIGhlYWQuY29udGVudA0KLSAgICAiKCAlSGVhZE9wdHMubWl4OywgJXRpdGxlLnFuYW1lOywgJUhlYWRPcHRzLm1peDsgKSINCi0+DQotPCFFTlRJVFkgJSBoZWFkLnFuYW1lICAiaGVhZCIgPg0KLTwhRUxFTUVOVCAlaGVhZC5xbmFtZTsgICVoZWFkLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoZWFkLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBoZWFkLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWhlYWQuYXR0bGlzdDtbDQotPCEtLSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSB3aXRoIGRvY3VtZW50IHByb2ZpbGVzDQotLS0+DQotPCFFTlRJVFkgJSBwcm9maWxlLmF0dHJpYg0KLSAgICAgInByb2ZpbGUgICAgICAlVVJJLmRhdGF0eXBlOyAgICAgICAgICAgJyVYSFRNTC5wcm9maWxlOyciDQotPg0KLQ0KLTwhQVRUTElTVCAlaGVhZC5xbmFtZTsNCi0gICAgICAlWEhUTUwueG1sbnMuYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0gICAgICAlcHJvZmlsZS5hdHRyaWI7DQotPg0KLTwhLS0gZW5kIG9mIGhlYWQuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGJvZHk6IERvY3VtZW50IEJvZHkgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIGJvZHkuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslYm9keS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGJvZHkuY29udGVudA0KLSAgICAgIiggJUJsb2NrLm1peDsgKSsiDQotPg0KLTwhRU5USVRZICUgYm9keS5xbmFtZSAgImJvZHkiID4NCi08IUVMRU1FTlQgJWJvZHkucW5hbWU7ICAlYm9keS5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYm9keS5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYm9keS5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVib2R5LmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYm9keS5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYm9keS5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gaHRtbDogWEhUTUwgRG9jdW1lbnQgRWxlbWVudCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgaHRtbC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVodG1sLmVsZW1lbnQ7Ww0KLTwhRU5USVRZICUgaHRtbC5jb250ZW50ICAiKCAlaGVhZC5xbmFtZTssICVib2R5LnFuYW1lOyApIiA+DQotPCFFTlRJVFkgJSBodG1sLnFuYW1lICAiaHRtbCIgPg0KLTwhRUxFTUVOVCAlaHRtbC5xbmFtZTsgICVodG1sLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBodG1sLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBodG1sLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWh0bWwuYXR0bGlzdDtbDQotPCEtLSB2ZXJzaW9uIGF0dHJpYnV0ZSB2YWx1ZSBkZWZpbmVkIGluIGRyaXZlcg0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwudmVyc2lvbi5hdHRyaWINCi0gICAgICJ2ZXJzaW9uICAgICAgJUZQSS5kYXRhdHlwZTsgICAgICAgICAgICNGSVhFRCAnJVhIVE1MLnZlcnNpb247JyINCi0+DQotDQotPCEtLSBzZWUgdGhlIFF1YWxpZmllZCBOYW1lcyBtb2R1bGUgZm9yIGluZm9ybWF0aW9uDQotICAgICBvbiBob3cgdG8gZXh0ZW5kIFhIVE1MIHVzaW5nIFhNTCBuYW1lc3BhY2VzDQotLS0+DQotPCFBVFRMSVNUICVodG1sLnFuYW1lOw0KLSAgICAgICVYSFRNTC54bWxucy5hdHRyaWI7DQotICAgICAgJVhIVE1MLnZlcnNpb24uYXR0cmliOw0KLSAgICAgICVJMThuLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaHRtbC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLXN0cnVjdC0xLm1vZCAtLT4NCi0NCi0NCi08IS0tIEJsb2NrIFByZXNlbnRhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtYmxrcHJlcy5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFByZXNlbnRhdGlvbiAxLjAvL0VOIg0KLSAJCSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmxrcHJlcy0xLm1vZCI+DQotPCEtLSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgQmxvY2sgUHJlc2VudGF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLWJsa3ByZXMtMS5tb2QNCi0NCi0gICAgIFRoaXMgaXMgWEhUTUwsIGEgcmVmb3JtdWxhdGlvbiBvZiBIVE1MIGFzIGEgbW9kdWxhciBYTUwgYXBwbGljYXRpb24uDQotICAgICBDb3B5cmlnaHQgMTk5OC0yMDAxIFczQyAoTUlULCBJTlJJQSwgS2VpbyksIEFsbCBSaWdodHMgUmVzZXJ2ZWQuDQotICAgICBSZXZpc2lvbjogJElkOiB4aHRtbC1tb2JpbGUxMC1mbGF0LmR0ZCx2IDEuMSAyMDA0LzAzLzE3IDA0OjIzOjU3IHBhdmVyeSBFeHAgJCBTTUkNCi0NCi0gICAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFByZXNlbnRhdGlvbiAxLjAvL0VOIg0KLSAgICAgICBTWVNURU0gImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1ibGtwcmVzLTEubW9kIg0KLQ0KLSAgICAgUmV2aXNpb25zOg0KLSAgICAgKG5vbmUpDQotICAgICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IS0tIEJsb2NrIFByZXNlbnRhdGlvbmFsIEVsZW1lbnRzDQotDQotICAgICAgICBocg0KLQ0KLSAgICAgVGhpcyBtb2R1bGUgZGVjbGFyZXMgdGhlIGVsZW1lbnRzIGFuZCB0aGVpciBhdHRyaWJ1dGVzIHVzZWQgdG8NCi0gICAgIHN1cHBvcnQgYmxvY2stbGV2ZWwgcHJlc2VudGF0aW9uYWwgbWFya3VwLg0KLS0tPg0KLQ0KLTwhRU5USVRZICUgaHIuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaHIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBoci5jb250ZW50ICAiRU1QVFkiID4NCi08IUVOVElUWSAlIGhyLnFuYW1lICAiaHIiID4NCi08IUVMRU1FTlQgJWhyLnFuYW1lOyAgJWhyLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBoci5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgaHIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslaHIuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVoci5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgaHIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1ibGtwcmVzLTEubW9kIC0tPg0KLQ0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCUlubGluZSBQcmVzZW50YXRpb246IGIsIGJpZywgaSwgc21hbGwJCQ0KLS0tPg0KLTwhRU5USVRZICUgc3ViLmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdWIuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1cC5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3VwLmF0dGxpc3QgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB0dC5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgdHQuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHhodG1sLWlubHByZXMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotCQkiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHByZXMtMS5tb2QiPg0KLTwhLS0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIFhIVE1MIElubGluZSBQcmVzZW50YXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB4aHRtbC1pbmxwcmVzLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MLCBhIHJlZm9ybXVsYXRpb24gb2YgSFRNTCBhcyBhIG1vZHVsYXIgWE1MIGFwcGxpY2F0aW9uLg0KLSAgICAgQ29weXJpZ2h0IDE5OTgtMjAwMSBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLCBBbGwgUmlnaHRzIFJlc2VydmVkLg0KLSAgICAgUmV2aXNpb246ICRJZDogeGh0bWwtbW9iaWxlMTAtZmxhdC5kdGQsdiAxLjEgMjAwNC8wMy8xNyAwNDoyMzo1NyBwYXZlcnkgRXhwICQgU01JDQotDQotICAgICBUaGlzIERURCBtb2R1bGUgaXMgaWRlbnRpZmllZCBieSB0aGUgUFVCTElDIGFuZCBTWVNURU0gaWRlbnRpZmllcnM6DQotDQotICAgICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotICAgICAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHByZXMtMS5tb2QiDQotDQotICAgICBSZXZpc2lvbnM6DQotICAgICAobm9uZSkNCi0gICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gSW5saW5lIFByZXNlbnRhdGlvbmFsIEVsZW1lbnRzDQotDQotICAgICAgICBiLCBiaWcsIGksIHNtYWxsLCBzdWIsIHN1cCwgdHQNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlY2xhcmVzIHRoZSBlbGVtZW50cyBhbmQgdGhlaXIgYXR0cmlidXRlcyB1c2VkIHRvDQotICAgICBzdXBwb3J0IGlubGluZS1sZXZlbCBwcmVzZW50YXRpb25hbCBtYXJrdXAuDQotLS0+DQotDQotPCFFTlRJVFkgJSBiLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWIuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBiLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgYi5xbmFtZSAgImIiID4NCi08IUVMRU1FTlQgJWIucW5hbWU7ICAlYi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYi5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYi5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyViLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYi5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2YgYi5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgYmlnLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJWJpZy5lbGVtZW50O1sNCi08IUVOVElUWSAlIGJpZy5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIGJpZy5xbmFtZSAgImJpZyIgPg0KLTwhRUxFTUVOVCAlYmlnLnFuYW1lOyAgJWJpZy5jb250ZW50OyA+DQotPCEtLSBlbmQgb2YgYmlnLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBiaWcuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslYmlnLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlYmlnLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBiaWcuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIGkuZWxlbWVudCAgIklOQ0xVREUiID4NCi08IVslaS5lbGVtZW50O1sNCi08IUVOVElUWSAlIGkuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBpLnFuYW1lICAiaSIgPg0KLTwhRUxFTUVOVCAlaS5xbmFtZTsgICVpLmNvbnRlbnQ7ID4NCi08IS0tIGVuZCBvZiBpLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBpLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJWkuYXR0bGlzdDtbDQotPCFBVFRMSVNUICVpLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBpLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzbWFsbC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzbWFsbC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHNtYWxsLmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgc21hbGwucW5hbWUgICJzbWFsbCIgPg0KLTwhRUxFTUVOVCAlc21hbGwucW5hbWU7ICAlc21hbGwuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHNtYWxsLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzbWFsbC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyVzbWFsbC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXNtYWxsLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzbWFsbC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3ViLmVsZW1lbnQgICJJTkNMVURFIiA+DQotPCFbJXN1Yi5lbGVtZW50O1sNCi08IUVOVElUWSAlIHN1Yi5jb250ZW50DQotICAgICAiKCAjUENEQVRBIHwgJUlubGluZS5taXg7ICkqIg0KLT4NCi08IUVOVElUWSAlIHN1Yi5xbmFtZSAgInN1YiIgPg0KLTwhRUxFTUVOVCAlc3ViLnFuYW1lOyAgJXN1Yi5jb250ZW50OyA+DQotPCEtLSBlbmQgb2Ygc3ViLmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSBzdWIuYXR0bGlzdCAgIklOQ0xVREUiID4NCi08IVslc3ViLmF0dGxpc3Q7Ww0KLTwhQVRUTElTVCAlc3ViLnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiBzdWIuYXR0bGlzdCAtLT5dXT4NCi0NCi08IUVOVElUWSAlIHN1cC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyVzdXAuZWxlbWVudDtbDQotPCFFTlRJVFkgJSBzdXAuY29udGVudA0KLSAgICAgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyApKiINCi0+DQotPCFFTlRJVFkgJSBzdXAucW5hbWUgICJzdXAiID4NCi08IUVMRU1FTlQgJXN1cC5xbmFtZTsgICVzdXAuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHN1cC5lbGVtZW50IC0tPl1dPg0KLQ0KLTwhRU5USVRZICUgc3VwLmF0dGxpc3QgICJJTkNMVURFIiA+DQotPCFbJXN1cC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXN1cC5xbmFtZTsNCi0gICAgICAlQ29tbW9uLmF0dHJpYjsNCi0+DQotPCEtLSBlbmQgb2Ygc3VwLmF0dGxpc3QgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0dC5lbGVtZW50ICAiSU5DTFVERSIgPg0KLTwhWyV0dC5lbGVtZW50O1sNCi08IUVOVElUWSAlIHR0LmNvbnRlbnQNCi0gICAgICIoICNQQ0RBVEEgfCAlSW5saW5lLm1peDsgKSoiDQotPg0KLTwhRU5USVRZICUgdHQucW5hbWUgICJ0dCIgPg0KLTwhRUxFTUVOVCAldHQucW5hbWU7ICAldHQuY29udGVudDsgPg0KLTwhLS0gZW5kIG9mIHR0LmVsZW1lbnQgLS0+XV0+DQotDQotPCFFTlRJVFkgJSB0dC5hdHRsaXN0ICAiSU5DTFVERSIgPg0KLTwhWyV0dC5hdHRsaXN0O1sNCi08IUFUVExJU1QgJXR0LnFuYW1lOw0KLSAgICAgICVDb21tb24uYXR0cmliOw0KLT4NCi08IS0tIGVuZCBvZiB0dC5hdHRsaXN0IC0tPl1dPg0KLQ0KLTwhLS0gZW5kIG9mIHhodG1sLWlubHByZXMtMS5tb2QgLS0+DQotDQotDQotPCEtLSBlbmQgb2YgWEhUTUwgTW9iaWxlIDEuMCBEVEQgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAveGh0bWwtbW9iaWxlMTAtbW9kZWwtMS5tb2QgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC94aHRtbC1tb2JpbGUxMC1tb2RlbC0xLm1vZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzgwZTI1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC94aHRtbC1tb2JpbGUxMC1tb2RlbC0xLm1vZAorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi08IS0tIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhLS0gWEhUTUwgTW9iaWxlIDEuMCBEb2N1bWVudCBNb2RlbCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW1vYmlsZTEwLW1vZGVsLTEubW9kDQotDQotICAgICBUaGlzIGlzIFhIVE1MIE1vYmlsZSwgYSBwcm9wZXIgc3Vic2V0IG9mIFhIVE1MLg0KLSAgICAgCUBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSwgTHRkLiAyMDAxLg0KLQ0KLQlUZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UgYXJlIGF2YWlsYWJsZSBmcm9tIHRoZSBXaXJlbGVzcyBBcHBsaWNhdGlvbiBQcm90b2NvbCBGb3J1bSBMdGQuIA0KLQlXZWIgc2l0ZSAoaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvd2hhdC9jb3B5cmlnaHQuaHRtKS4NCi0gICAgDQotLS0+DQotPCEtLSBYSFRNTCBNb2JpbGUgRG9jdW1lbnQgTW9kZWwNCi0NCi0gICAgIFRoaXMgbW9kdWxlIGRlc2NyaWJlcyB0aGUgZ3JvdXBpbmdzIG9mIGVsZW1lbnRzIHRoYXQgbWFrZSB1cA0KLSAgICAgY29tbW9uIGNvbnRlbnQgbW9kZWxzIGZvciBYSFRNTCBlbGVtZW50cy4NCi0tLT4NCi0NCi08IS0tIE9wdGlvbmFsIEVsZW1lbnRzIGluIGhlYWQgIC4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgSGVhZE9wdHMubWl4DQotICAgICAiKCAlbWV0YS5xbmFtZTsgfCAlbGluay5xbmFtZTsgfCAlb2JqZWN0LnFuYW1lOyB8ICVzdHlsZS5xbmFtZTsgKSoiID4NCi0NCi08IS0tIE1pc2NlbGxhbmVvdXMgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhRU5USVRZICUgTWlzYy5jbGFzcyAiIiA+DQotDQotPCEtLSBJbmxpbmUgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi0NCi08IUVOVElUWSAlIElubFN0cnVjdC5jbGFzcyAiJWJyLnFuYW1lOyB8ICVzcGFuLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgSW5sUGhyYXMuY2xhc3MNCi0gICAgICJ8ICVlbS5xbmFtZTsgfCAlc3Ryb25nLnFuYW1lOyB8ICVkZm4ucW5hbWU7IHwgJWNvZGUucW5hbWU7DQotICAgICAgfCAlc2FtcC5xbmFtZTsgfCAla2JkLnFuYW1lOyB8ICV2YXIucW5hbWU7IHwgJWNpdGUucW5hbWU7DQotICAgICAgfCAlYWJici5xbmFtZTsgfCAlYWNyb255bS5xbmFtZTsgfCAlcS5xbmFtZTsiID4NCi0NCi08IUVOVElUWSAlIElubFByZXMuY2xhc3MNCi0gICAgICJ8ICVpLnFuYW1lOyB8ICViLnFuYW1lOyB8ICViaWcucW5hbWU7IHwgJXNtYWxsLnFuYW1lOyAiID4NCi0NCi0NCi08IUVOVElUWSAlIEkxOG4uY2xhc3MgIiIgPg0KLQ0KLTwhRU5USVRZICUgQW5jaG9yLmNsYXNzICJ8ICVhLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgSW5sU3BlY2lhbC5jbGFzcyAifCAlaW1nLnFuYW1lOyB8ICVvYmplY3QucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBJbmxGb3JtLmNsYXNzDQotICAgICAifCAlaW5wdXQucW5hbWU7IHwgJXNlbGVjdC5xbmFtZTsgfCAldGV4dGFyZWEucW5hbWU7DQotICAgICAgfCAlbGFiZWwucW5hbWU7Ig0KLT4NCi0NCi08IUVOVElUWSAlIElubGluZS5leHRyYSAiIiA+DQotDQotPCFFTlRJVFkgJSBJbmxpbmUuY2xhc3MNCi0gICAgICIlSW5sU3RydWN0LmNsYXNzOw0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgICVJbmxTcGVjaWFsLmNsYXNzOw0KLSAgICAgICVJbmxGb3JtLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7Ig0KLT4NCi0NCi08IUVOVElUWSAlIElubE5vQW5jaG9yLmNsYXNzDQotICAgICAiJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUlubFNwZWNpYWwuY2xhc3M7DQotICAgICAgJUlubEZvcm0uY2xhc3M7DQotICAgICAgJUlubGluZS5leHRyYTsiDQotPg0KLQ0KLTwhRU5USVRZICUgSW5sTm9BbmNob3IubWl4DQotICAgICAiJUlubE5vQW5jaG9yLmNsYXNzOw0KLSAgICAgICVNaXNjLmNsYXNzOyINCi0+DQotDQotPCFFTlRJVFkgJSBJbmxpbmUubWl4DQotICAgICAiJUlubGluZS5jbGFzczsNCi0gICAgICAlTWlzYy5jbGFzczsiDQotPg0KLQ0KLTwhLS0gQmxvY2sgRWxlbWVudHMgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotDQotPCFFTlRJVFkgJSBIZWFkaW5nLmNsYXNzDQotICAgICAiJWgxLnFuYW1lOyB8ICVoMi5xbmFtZTsgfCAlaDMucW5hbWU7DQotICAgICAgfCAlaDQucW5hbWU7IHwgJWg1LnFuYW1lOyB8ICVoNi5xbmFtZTsiDQotPg0KLTwhRU5USVRZICUgTGlzdC5jbGFzcyAgIiV1bC5xbmFtZTsgfCAlb2wucW5hbWU7IHwgJWRsLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgVGFibGUuY2xhc3MgInwgJXRhYmxlLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgRm9ybS5jbGFzcyAgInwgJWZvcm0ucW5hbWU7IiA+DQotDQotPCFFTlRJVFkgJSBGaWVsZHNldC5jbGFzcyAgInwgJWZpZWxkc2V0LnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgQmxrU3RydWN0LmNsYXNzICIlcC5xbmFtZTsgfCAlZGl2LnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgQmxrUGhyYXMuY2xhc3MNCi0gICAgICJ8ICVwcmUucW5hbWU7IHwgJWJsb2NrcXVvdGUucW5hbWU7IHwgJWFkZHJlc3MucW5hbWU7Ig0KLT4NCi0NCi08IUVOVElUWSAlIEJsa1ByZXMuY2xhc3MgInwgJWhyLnFuYW1lOyIgPg0KLQ0KLTwhRU5USVRZICUgQmxrU3BlY2lhbC5jbGFzcw0KLSAgICAgIiVUYWJsZS5jbGFzczsNCi0gICAgICAlRm9ybS5jbGFzczsNCi0gICAgICAlRmllbGRzZXQuY2xhc3M7Ig0KLT4NCi0NCi08IUVOVElUWSAlIEJsb2NrLmV4dHJhICIiID4NCi0NCi08IUVOVElUWSAlIEJsb2NrLmNsYXNzDQotICAgICAiJUJsa1N0cnVjdC5jbGFzczsNCi0gICAgICAlQmxrUGhyYXMuY2xhc3M7DQotICAgICAgJUJsa1ByZXMuY2xhc3M7DQotICAgICAgJUJsa1NwZWNpYWwuY2xhc3M7DQotICAgICAgJUJsb2NrLmV4dHJhOyINCi0+DQotDQotPCFFTlRJVFkgJSBCbGtOb0Zvcm0ubWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVCbGtQcmVzLmNsYXNzOw0KLSAgICAgICVUYWJsZS5jbGFzczsNCi0gICAgICAlQmxvY2suZXh0cmE7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IUVOVElUWSAlIEJsb2NrLm1peA0KLSAgICAgIiVIZWFkaW5nLmNsYXNzOw0KLSAgICAgIHwgJUxpc3QuY2xhc3M7DQotICAgICAgfCAlQmxvY2suY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IS0tIEFsbCBDb250ZW50IEVsZW1lbnRzICAuLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLQ0KLTwhLS0gZGVjbGFyZXMgYWxsIGNvbnRlbnQgZXhjZXB0IHRhYmxlcw0KLS0tPg0KLTwhRU5USVRZICUgRmxvd05vVGFibGUubWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbGtTdHJ1Y3QuY2xhc3M7DQotICAgICAgJUJsa1BocmFzLmNsYXNzOw0KLSAgICAgICVGb3JtLmNsYXNzOw0KLSAgICAgICVCbG9jay5leHRyYTsNCi0gICAgICB8ICVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi0NCi08IUVOVElUWSAlIEZsb3cubWl4DQotICAgICAiJUhlYWRpbmcuY2xhc3M7DQotICAgICAgfCAlTGlzdC5jbGFzczsNCi0gICAgICB8ICVCbG9jay5jbGFzczsNCi0gICAgICB8ICVJbmxpbmUuY2xhc3M7DQotICAgICAgJU1pc2MuY2xhc3M7Ig0KLT4NCi0NCi08IS0tIGVuZCBvZiB4aHRtbC1tb2JpbGUxMC1tb2RlbC0xLm1vZCAtLT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC94aHRtbC1tb2JpbGUxMC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dhcERURHMvV0FQLTItMC94aHRtbC1tb2JpbGUxMC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlYjZiMmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvRFREcy93YXBEVERzL1dBUC0yLTAveGh0bWwtbW9iaWxlMTAuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLTwhLS0gWEhUTUwgTW9iaWxlIDEuMCBEVEQgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IS0tIGZpbGU6IHhodG1sLW1vYmlsZTEwLmR0ZCAtLT4NCi08IS0tIA0KLSAgICAgVGhpcyBpcyBYSFRNTCBNb2JpbGUgcHJvZmlsZSwgYSBwcm9wZXIgc3Vic2V0IG9mIFhIVE1MLg0KLSAgICAgDQotICAgICAJQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLSAgICANCi0tLT4NCi08IS0tIFRoaXMgaXMgdGhlIGRyaXZlciBmaWxlIGZvciB2ZXJzaW9uIDEuMCBvZiB0aGUgWEhUTUwgTW9iaWxlIERURC4NCi0NCi0gICAgIFRoaXMgRFREIGlzIGlkZW50aWZpZWQgYnkgdGhlIFBVQkxJQyBhbmQgU1lTVEVNIGlkZW50aWZpZXJzOg0KLQ0KLSAgICAgUFVCTElDOiAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiINCi0gICAgIFNZU1RFTTogImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC5kdGQiDQotLS0+DQotPCFFTlRJVFkgJSBYSFRNTC52ZXJzaW9uICAiLS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIgPg0KLQ0KLTwhLS0gVXNlIHRoaXMgVVJJIHRvIGlkZW50aWZ5IHRoZSBkZWZhdWx0IG5hbWVzcGFjZToNCi0NCi0gICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCINCi0NCi0gICAgIFNlZSB0aGUgUXVhbGlmaWVkIE5hbWVzIG1vZHVsZSBmb3IgaW5mb3JtYXRpb24NCi0gICAgIG9uIHRoZSB1c2Ugb2YgbmFtZXNwYWNlIHByZWZpeGVzIGluIHRoZSBEVEQuDQotLS0+DQotPCFFTlRJVFkgJSBOUy5wcmVmaXhlZCAiSUdOT1JFIiA+DQotPCFFTlRJVFkgJSBYSFRNTC5wcmVmaXggICIiID4NCi0NCi08IS0tIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHVzaW5nIFhIVE1MIE1vYmlsZSAxLjAgZGlyZWN0bHksIHVzZQ0KLSAgICAgdGhlIEZQSSBpbiB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbiwgd2l0aCB0aGUgeG1sbnMgYXR0cmlidXRlDQotICAgICBvbiB0aGUgZG9jdW1lbnQgZWxlbWVudCB0byBpZGVudGlmeSB0aGUgZGVmYXVsdCBuYW1lc3BhY2U6DQotDQotICAgICAgICAgPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotICAgICAgICAgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3hodG1sLW1vYmlsZTEwLmR0ZCIgPg0KLSAgICAgICAgIDxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIg0KLSAgICAgICAgICAgICAgIHhtbDpsYW5nPSJlbiIgPg0KLSAgICAgICAgIC4uLg0KLSAgICAgICAgIDwvaHRtbD4NCi0tLT4NCi0NCi08IS0tIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIHdpdGggZG9jdW1lbnQgcHJvZmlsZXMgLS0+DQotPCFFTlRJVFkgJSBYSFRNTC5wcm9maWxlICAiIiA+DQotDQotPCEtLSBJbmxpbmUgU3R5bGUgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtaW5sc3R5bGUubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW5saW5lIFN0eWxlIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbmxzdHlsZS0xLm1vZCIgPg0KLSV4aHRtbC1pbmxzdHlsZS5tb2Q7DQotDQotPCEtLSBEb2N1bWVudCBNb2RlbCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbW9kZWwubW9kDQotICAgICBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBYSFRNTCBNb2JpbGUgMS4wIERvY3VtZW50IE1vZGVsIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC94aHRtbC1tb2JpbGUxMC1tb2RlbC0xLm1vZCIgPg0KLQ0KLTwhLS0gWEhUTUwgRnJhbWV3b3JrIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSBYSFRNTC5iaWRpICAiSUdOT1JFIiA+DQotPCFFTlRJVFkgJSB4aHRtbC1mcmFtZXdvcmsubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRU5USVRJRVMgWEhUTUwgTW9kdWxhciBGcmFtZXdvcmsgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWZyYW1ld29yay0xLm1vZCIgPg0KLSV4aHRtbC1mcmFtZXdvcmsubW9kOw0KLQ0KLTwhLS0gWEhUTUwgQ29yZSBNb2R1bGVzIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSBwcmUuY29udGVudA0KLSAgICAgIiggI1BDREFUQQ0KLSAgICAgIHwgJUlubFN0cnVjdC5jbGFzczsNCi0gICAgICAlSW5sUGhyYXMuY2xhc3M7DQotICAgICAgJUFuY2hvci5jbGFzczsNCi0gICAgICAlSW5saW5lLmV4dHJhOyApKiINCi0+DQotDQotPCFFTlRJVFkgJSB4aHRtbC10ZXh0Lm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFRleHQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXRleHQtMS5tb2QiID4NCi0leGh0bWwtdGV4dC5tb2Q7DQotDQotPCFFTlRJVFkgJSB4aHRtbC1oeXBlcnRleHQubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSHlwZXJ0ZXh0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1oeXBlcnRleHQtMS5tb2QiID4NCi0leGh0bWwtaHlwZXJ0ZXh0Lm1vZDsNCi0NCi08IUVOVElUWSAlIHhodG1sLWxpc3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgTGlzdHMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpc3QtMS5tb2QiID4NCi0leGh0bWwtbGlzdC5tb2Q7DQotPCEtLSBFeHRlbmQgbGlzdHMgd2l0aCB2YWx1ZSBhbmQgc3RhcnQgYXR0cmlidXRlcyAtLT4gDQotPCFBVFRMSVNUICVsaS5xbmFtZTsNCi0gICAgICB2YWx1ZSAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICAjSU1QTElFRA0KLT4NCi08IUFUVExJU1QgJW9sLnFuYW1lOw0KLSAgICAgIHN0YXJ0ICAgICAgICAlTnVtYmVyLmRhdGF0eXBlOyAgICAgICAgI0lNUExJRUQNCi0+DQotDQotPCEtLSA6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OiAtLT4NCi0NCi08IS0tIEltYWdlIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1pbWFnZS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbWFnZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWltYWdlLTEubW9kIiA+DQotJXhodG1sLWltYWdlLm1vZDsNCi0NCi08IS0tIFRhYmxlcyBNb2R1bGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC10YWJsZS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNpYyBUYWJsZXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLXRhYmxlLTEubW9kIiA+DQotJXhodG1sLXRhYmxlLm1vZDsNCi0NCi08IS0tIEZvcm1zIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gDQotCVhIVE1MIGJhc2ljIGZvcm1zIG1vZHVsZSBleHRlbmRlZCB3aXRoIG9wdGdyb3VwIGFuZCBmaWVsZHNldA0KLS0tPg0KLTwhRUxFTUVOVCAlb3B0Z3JvdXAucW5hbWU7ICglb3B0aW9uLnFuYW1lOykrPg0KLTwhQVRUTElTVCAlb3B0Z3JvdXAucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyANCi0JbGFiZWwgJVRleHQuZGF0YXR5cGU7ICNSRVFVSVJFRA0KLT4NCi08IUVOVElUWSAlIHNlbGVjdC5jb250ZW50ICIoICVvcHRncm91cC5xbmFtZTsgfCAlb3B0aW9uLnFuYW1lOyApKyI+DQotPCFFTEVNRU5UICVmaWVsZHNldC5xbmFtZTsgKCNQQ0RBVEEgfCAlRmxvdy5taXg7KSo+DQotPCFBVFRMSVNUICVmaWVsZHNldC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLT4NCi08IUVOVElUWSAlIGZvcm0uY29udGVudCAiKCAlQmxrTm9Gb3JtLm1peDsgfCAlZmllbGRzZXQucW5hbWU7ICkrIj4NCi08IUVOVElUWSAlIHhodG1sLWZvcm0ubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzaWMgRm9ybXMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2ljLWZvcm0tMS5tb2QiID4NCi0leGh0bWwtZm9ybS5tb2Q7DQotDQotPCEtLSBMaW5rIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbGluay5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaW5rIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWxpbmstMS5tb2QiID4NCi0leGh0bWwtbGluay5tb2Q7DQotDQotPCEtLSBEb2N1bWVudCBNZXRhaW5mb3JtYXRpb24gTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbWV0YS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBNZXRhaW5mb3JtYXRpb24gMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW1ldGEtMS5tb2QiID4NCi0leGh0bWwtbWV0YS5tb2Q7DQotDQotPCEtLSBCYXNlIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtYmFzZS5tb2QNCi0gICAgIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBCYXNlIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWJhc2UtMS5tb2QiID4NCi0leGh0bWwtYmFzZS5tb2Q7DQotDQotPCEtLSBTdHlsZXNoZWV0cyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtc3R5bGUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBTdHlsZSBTaGVldHMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0eWxlLTEubW9kIj4NCi0leGh0bWwtc3R5bGUubW9kOw0KLQ0KLTwhLS0gUGFyYW0gRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLXBhcmFtLm1vZA0KLSAgICAgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFBhcmFtIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXBhcmFtLTEubW9kIiA+DQotJXhodG1sLXBhcmFtLm1vZDsNCi0NCi08IS0tIEVtYmVkZGVkIE9iamVjdCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1vYmplY3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRW1iZWRkZWQgT2JqZWN0IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1vYmplY3QtMS5tb2QiID4NCi0leGh0bWwtb2JqZWN0Lm1vZDsNCi0NCi08IS0tIERvY3VtZW50IFN0cnVjdHVyZSBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1zdHJ1Y3QubW9kDQotICAgICBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgRG9jdW1lbnQgU3RydWN0dXJlIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1zdHJ1Y3QtMS5tb2QiID4NCi0leGh0bWwtc3RydWN0Lm1vZDsNCi0NCi08IS0tIEJsb2NrIFByZXNlbnRhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtYmxrcHJlcy5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFByZXNlbnRhdGlvbiAxLjAvL0VOIg0KLSAJCSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmxrcHJlcy0xLm1vZCI+DQotJXhodG1sLWJsa3ByZXMubW9kOw0KLQ0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0gDQotCUlubGluZSBQcmVzZW50YXRpb246IGIsIGJpZywgaSwgc21hbGwJCQ0KLS0tPg0KLTwhRU5USVRZICUgc3ViLmVsZW1lbnQgIklHTk9SRSI+DQotPCFFTlRJVFkgJSBzdWIuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHN1cC5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgc3VwLmF0dGxpc3QgIklHTk9SRSI+DQotPCFFTlRJVFkgJSB0dC5lbGVtZW50ICJJR05PUkUiPg0KLTwhRU5USVRZICUgdHQuYXR0bGlzdCAiSUdOT1JFIj4NCi08IUVOVElUWSAlIHhodG1sLWlubHByZXMubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBJbmxpbmUgUHJlc2VudGF0aW9uIDEuMC8vRU4iDQotCQkiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLWlubHByZXMtMS5tb2QiPg0KLSV4aHRtbC1pbmxwcmVzLm1vZDsNCi0NCi08IS0tIGVuZCBvZiBYSFRNTCBNb2JpbGUgMS4wIERURCAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9EVERzL3dtbDIwX2R0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd21sMjBfZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTdlOTU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL0RURHMvd21sMjBfZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAgVHJhbnNpdGlvbmFsLy9FTiI+DQotPCEtLSBzYXZlZCBmcm9tIHVybD0oMDAzNylodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sMjAuZHRkIC0tPg0KLTxIVE1MPjxIRUFEPg0KLTxNRVRBIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD13aW5kb3dzLTEyNTIiPg0KLTxNRVRBIGNvbnRlbnQ9Ik1TSFRNTCA1LjUwLjQ5MTIuMzAwIiBuYW1lPUdFTkVSQVRPUj48L0hFQUQ+DQotPEJPRFk+PFhNUD48IS0tIFdNTCAyLjAgRFREICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCEtLSBmaWxlOiB3bWwyMC5kdGQgLS0+DQotPCEtLSANCi0gICAgQFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtLCBMdGQuIDIwMDEuDQotDQotCVRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIFdpcmVsZXNzIEFwcGxpY2F0aW9uIFByb3RvY29sIEZvcnVtIEx0ZC4gDQotCVdlYiBzaXRlIChodHRwOi8vd3d3LndhcGZvcnVtLm9yZy93aGF0L2NvcHlyaWdodC5odG0pLg0KLS0tPg0KLTwhLS0NCi0JVGhpcyBpcyB0aGUgV01MIDIuMCBEVEQgZHJpdmVyIGZpbGUuIFBsZWFzZSB1c2UgdGhpcyBmb3JtYWwgcHVibGljIGlkZW50aWZpZXIgdG8gaWRlbnRpZnkgaXQ6DQotDQotICAgICAgICAgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDIuMC8vRU4iDQotICAgICAgICAgICAgICAgICAgIAkgICAgICAgICAgDQotICAgICBGb3IgZXhhbXBsZSwgaWYgeW91IGFyZSB1c2luZyBXTUwgMi4wIGRpcmVjdGx5LCB1c2UNCi0gICAgIHRoZSBGUEkgaW4gdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24sIHdpdGggdGhlIHhtbG5zIGF0dHJpYnV0ZQ0KLSAgICAgb24gdGhlIGRvY3VtZW50IGVsZW1lbnQgdG8gaWRlbnRpZnkgdGhlIGRlZmF1bHQgbmFtZXNwYWNlOg0KLQ0KLSAgICAgICAgIDw/eG1sIHZlcnNpb249IjEuMCI/Pg0KLSAgICAgICAgIDwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMi4wLy9FTiINCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL2R0ZC93bWwyMC5kdGQiID4NCi0gICAgICAgICA8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCINCi0gICAgICAgICAgICAgICAgICAgeG1sbnM6d21sPSJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy8yMDAxL3dtbCI+DQotICAgICAgICAgLi4uDQotICAgICAgICAgPC9odG1sPg0KLQ0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJVmVyc2lvbiwgWE1MIE5hbWVzcGFjZXMsIGFuZCBwcm9maWxlIGluZm9ybWF0aW9uIA0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQlWYWx1ZSBvZiBYSFRNTCB2ZXJzaW9uIGF0dHJpYnV0ZSANCi0tLT4NCi08IUVOVElUWSAlIFhIVE1MLnZlcnNpb24gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDIuMC8vRU4iPg0KLTwhLS0gDQotCVZhbHVlIG9mIFhIVE1MIHByb2ZpbGUgYXR0cmlidXRlDQotCQ0KLQlSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSB3aXRoIGRvY3VtZW50IHByb2ZpbGVzIA0KLS0tPg0KLTwhRU5USVRZICUgWEhUTUwucHJvZmlsZSAiIj4NCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JCU1vZHVsYXJpc2F0aW9uIGZyYW1ld29yayBzZXR1cA0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCFFTlRJVFkgJSB3bWwtZnJhbWV3b3JrLm1vZCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9FTlRJVElFUyBXTUwgTW9kdWxhciBGcmFtZXdvcmsgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbC1mcmFtZXdvcmstMS5tb2QiPg0KLSV3bWwtZnJhbWV3b3JrLm1vZDsNCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPg0KLTwhLS0NCi0JCVhIVE1MIG1vZHVsZXMgDQotLS0+DQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAtLT4NCi08IS0tIFRleHQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHByZS5jb250ZW50ICIoICNQQ0RBVEENCi0gICAgICB8ICVJbmxTdHJ1Y3QuY2xhc3M7IHwgJWkucW5hbWU7IHwgJWIucW5hbWU7IA0KLSAgICAgICVJbmxQaHJhcy5jbGFzczsNCi0gICAgICAlQW5jaG9yLmNsYXNzOw0KLSAgICAgICVJbmxpbmUuZXh0cmE7IA0KLQl8ICVnZXR2YXIucW5hbWU7DQotCXwgJWlucHV0LnFuYW1lO3wgJXNlbGVjdC5xbmFtZTspKiI+DQotPCFFTlRJVFkgJSBwLmNvbnRlbnQgIiggI1BDREFUQSB8ICVJbmxpbmUubWl4OyB8ICV0YWJsZS5xbmFtZTsgfCAlZmllbGRzZXQucW5hbWU7KSoiPg0KLTwhRU5USVRZICUgeGh0bWwtdGV4dC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFRleHQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXRleHQtMS5tb2QiPg0KLSV4aHRtbC10ZXh0Lm1vZDsNCi08IUVOVElUWSAlIHhodG1sLWh5cGVydGV4dC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEh5cGVydGV4dCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtaHlwZXJ0ZXh0LTEubW9kIj4NCi0leGh0bWwtaHlwZXJ0ZXh0Lm1vZDsNCi08IS0tIExpc3QgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWxpc3QubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBMaXN0cyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGlzdC0xLm1vZCI+DQotJXhodG1sLWxpc3QubW9kOw0KLTwhLS0gRXh0ZW5kIGxpc3RzIHdpdGggdmFsdWUgYW5kIHN0YXJ0IGF0dHJpYnV0ZXMgLS0+IA0KLTwhQVRUTElTVCAlbGkucW5hbWU7DQotICAgICAgdmFsdWUgICAgICAgICVOdW1iZXIuZGF0YXR5cGU7ICAgICAgICAgI0lNUExJRUQNCi0+DQotPCFBVFRMSVNUICVvbC5xbmFtZTsNCi0gICAgICBzdGFydCAgICAgICAgJU51bWJlci5kYXRhdHlwZTsgICAgICAgICNJTVBMSUVEDQotPg0KLTwhLS0gSW1hZ2UgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLWltYWdlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgSW1hZ2VzIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1pbWFnZS0xLm1vZCI+DQotJXhodG1sLWltYWdlLm1vZDsNCi08IS0tIFBhcmFtIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1wYXJhbS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIFBhcmFtIEVsZW1lbnQgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXBhcmFtLTEubW9kIj4NCi0leGh0bWwtcGFyYW0ubW9kOw0KLTwhLS0gRW1iZWRkZWQgT2JqZWN0IE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW9iamVjdC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEVtYmVkZGVkIE9iamVjdCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtb2JqZWN0LTEubW9kIj4NCi0leGh0bWwtb2JqZWN0Lm1vZDsNCi08IS0tIFRhYmxlcyBNb2R1bGUgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC10YWJsZS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIFRhYmxlcyAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmFzaWMtdGFibGUtMS5tb2QiPg0KLSV4aHRtbC10YWJsZS5tb2Q7DQotPCEtLSBGb3JtcyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRUxFTUVOVCAlb3B0Z3JvdXAucW5hbWU7ICglb3B0aW9uLnFuYW1lOykrPg0KLTwhQVRUTElTVCAlb3B0Z3JvdXAucW5hbWU7DQotCSVDb21tb24uYXR0cmliOyAJDQotCWxhYmVsICVUZXh0LmRhdGF0eXBlOyAjUkVRVUlSRUQNCi0+DQotPCFFTlRJVFkgJSBvcHRpb24uY29udGVudCAiKCAjUENEQVRBIHwgJW9uZXZlbnQucW5hbWU7fCAlZ2V0dmFyLnFuYW1lOykqIj4NCi08IUVOVElUWSAlIHNlbGVjdC5jb250ZW50ICIoICVvcHRncm91cC5xbmFtZTsgfCAlb3B0aW9uLnFuYW1lOyApKyI+DQotPCFFTEVNRU5UICVmaWVsZHNldC5xbmFtZTsgKCNQQ0RBVEEgfCAlRmxvdy5taXg7KSo+DQotPCFBVFRMSVNUICVmaWVsZHNldC5xbmFtZTsNCi0JJUNvbW1vbi5hdHRyaWI7IA0KLT4NCi08IUVOVElUWSAlIHRleHRhcmVhLmNvbnRlbnQgIiggI1BDREFUQSB8ICVnZXR2YXIucW5hbWU7ICkqIj4NCi08IUVOVElUWSAlIGZvcm0uY29udGVudCAiKCAlQmxrTm9Gb3JtLm1peDsNCi0gICAgICB8ICVmaWVsZHNldC5xbmFtZTsgKSsiPg0KLTwhRU5USVRZICUgeGh0bWwtYmFzaWMtZm9ybS5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJhc2ljIEZvcm1zIDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNpYy1mb3JtLTEubW9kIj4NCi0leGh0bWwtYmFzaWMtZm9ybS5tb2Q7DQotPCEtLSBMaW5rIEVsZW1lbnQgTW9kdWxlICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtbGluay5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIExpbmsgRWxlbWVudCAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtbGluay0xLm1vZCI+DQotJXhodG1sLWxpbmsubW9kOw0KLTwhLS0gRG9jdW1lbnQgTWV0YWluZm9ybWF0aW9uIE1vZHVsZSAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIHhodG1sLW1ldGEubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBNZXRhaW5mb3JtYXRpb24gMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLW1ldGEtMS5tb2QiPg0KLSV4aHRtbC1tZXRhLm1vZDsNCi08IS0tIEJhc2UgRWxlbWVudCBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB4aHRtbC1iYXNlLm1vZCBQVUJMSUMgIi0vL1czQy8vRUxFTUVOVFMgWEhUTUwgQmFzZSBFbGVtZW50IDEuMC8vRU4iDQotICAgICAgICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sLW1vZHVsYXJpemF0aW9uL0RURC94aHRtbC1iYXNlLTEubW9kIj4NCi0leGh0bWwtYmFzZS5tb2Q7DQotPCEtLSBTdHlsZXNoZWV0cyBNb2R1bGUgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtc3R5bGUubW9kIFBVQkxJQyAiLS8vVzNDLy9FTEVNRU5UUyBYSFRNTCBTdHlsZSBTaGVldHMgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwtbW9kdWxhcml6YXRpb24vRFREL3hodG1sLXN0eWxlLTEubW9kIj4NCi0leGh0bWwtc3R5bGUubW9kOw0KLTwhLS0gRG9jdW1lbnQgU3RydWN0dXJlIE1vZHVsZSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAtLT4NCi08IUVOVElUWSAlIGh0bWwuY29udGVudCAiKCAlaGVhZC5xbmFtZTssICVUZW1wbGF0ZS5taXg7LCAoJWJvZHkucW5hbWU7IHwgKCVjYXJkLnFuYW1lOyspKSkiPg0KLTwhRU5USVRZICUgYm9keS5jb250ZW50ICIoJUNhcmRCb2R5Lm1peDspIj4NCi08IUVOVElUWSAlIHhodG1sLXN0cnVjdC5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIERvY3VtZW50IFN0cnVjdHVyZSAxLjAvL0VOIg0KLSAgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtc3RydWN0LTEubW9kIj4NCi0leGh0bWwtc3RydWN0Lm1vZDsNCi08IS0tIEJsb2NrIFByZXNlbnRhdGlvbiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgeGh0bWwtYmxrcHJlcy5tb2QgUFVCTElDICItLy9XM0MvL0VMRU1FTlRTIFhIVE1MIEJsb2NrIFByZXNlbnRhdGlvbiAxLjAvL0VOIg0KLSAJCSJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbC1tb2R1bGFyaXphdGlvbi9EVEQveGh0bWwtYmxrcHJlcy0xLm1vZCI+DQotJXhodG1sLWJsa3ByZXMubW9kOw0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLQ0KLQkJV01MIERlY2xhcmF0aW9ucw0KLS0tPg0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gLS0+DQotPCEtLSBTcGVjaWFsIFdNTCBlbGVtZW50cy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPCFFTlRJVFkgJSB3bWwtc3BlY2lhbC5tb2QgUFVCTElDICItLy9XQVBGT1JVTS8vRUxFTUVOVFMgV01MIFNwZWNpYWwgMS4wLy9FTiINCi0gICAgICAgICAgICAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbC1zcGVjaWFsLTEubW9kIj4NCi0ld21sLXNwZWNpYWwubW9kOw0KLTwhLS0gRGVwcmVjYXRlZCBXTUwgZWxlbWVudHMuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC0tPg0KLTwhRU5USVRZICUgd21sLWRlcHJlY2F0ZWQubW9kIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0VMRU1FTlRTIFdNTCBEZXByZWNhdGVkIDEuMC8vRU4iDQotICAgICAgICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sLWRlcHJlY2F0ZWQtMS5tb2QiPg0KLSV3bWwtZGVwcmVjYXRlZC5tb2Q7DQotPCEtLSBlbmQgb2YgV01MIDIuMCBEVEQgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLS0+DQotPC9YTVA+PC9CT0RZPjwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9YSFRNTC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL1hIVE1ML3hodG1sMS10cmFuc2l0aW9uYWwuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzMyMWM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL1hIVE1ML3hodG1sMS10cmFuc2l0aW9uYWwuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMTE5NiArMCwwIEBACi08IS0tDQotICAgRXh0ZW5zaWJsZSBIVE1MIHZlcnNpb24gMS4wIFRyYW5zaXRpb25hbCBEVEQNCi0NCi0gICBUaGlzIGlzIHRoZSBzYW1lIGFzIEhUTUwgNC4wIFRyYW5zaXRpb25hbCBleGNlcHQgZm9yDQotICAgY2hhbmdlcyBkdWUgdG8gdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gWE1MIGFuZCBTR01MLg0KLQ0KLSAgIE5hbWVzcGFjZSA9IGh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwNCi0NCi0gICBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgc2VlOiBodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDENCi0NCi0gICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMCBXM0MgKE1JVCwgSU5SSUEsIEtlaW8pLA0KLSAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuIA0KLQ0KLSAgIFRoaXMgRFREIG1vZHVsZSBpcyBpZGVudGlmaWVkIGJ5IHRoZSBQVUJMSUMgYW5kIFNZU1RFTSBpZGVudGlmaWVyczoNCi0NCi0gICBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIg0KLSAgIFNZU1RFTSAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCINCi0NCi0gICAkUmV2aXNpb246IDEuMSAkDQotICAgJERhdGU6IDIwMDAvMDEvMjYgMTQ6MDg6NTYgJA0KLQ0KLS0tPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IENoYXJhY3RlciBtbmVtb25pYyBlbnRpdGllcyA9PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTlRJVFkgJSBIVE1MbGF0MSBQVUJMSUMNCi0gICAiLS8vVzNDLy9FTlRJVElFUyBMYXRpbiAxIGZvciBYSFRNTC8vRU4iDQotICAgInhodG1sLWxhdDEuZW50Ij4NCi0lSFRNTGxhdDE7DQotDQotPCFFTlRJVFkgJSBIVE1Mc3ltYm9sIFBVQkxJQw0KLSAgICItLy9XM0MvL0VOVElUSUVTIFN5bWJvbHMgZm9yIFhIVE1MLy9FTiINCi0gICAieGh0bWwtc3ltYm9sLmVudCI+DQotJUhUTUxzeW1ib2w7DQotDQotPCFFTlRJVFkgJSBIVE1Mc3BlY2lhbCBQVUJMSUMNCi0gICAiLS8vVzNDLy9FTlRJVElFUyBTcGVjaWFsIGZvciBYSFRNTC8vRU4iDQotICAgInhodG1sLXNwZWNpYWwuZW50Ij4NCi0lSFRNTHNwZWNpYWw7DQotDQotPCEtLT09PT09PT09PT09PT09PT09PSBJbXBvcnRlZCBOYW1lcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVOVElUWSAlIENvbnRlbnRUeXBlICJDREFUQSI+DQotICAgIDwhLS0gbWVkaWEgdHlwZSwgYXMgcGVyIFtSRkMyMDQ1XSAtLT4NCi0NCi08IUVOVElUWSAlIENvbnRlbnRUeXBlcyAiQ0RBVEEiPg0KLSAgICA8IS0tIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIHR5cGVzLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLQ0KLTwhRU5USVRZICUgQ2hhcnNldCAiQ0RBVEEiPg0KLSAgICA8IS0tIGEgY2hhcmFjdGVyIGVuY29kaW5nLCBhcyBwZXIgW1JGQzIwNDVdIC0tPg0KLQ0KLTwhRU5USVRZICUgQ2hhcnNldHMgIkNEQVRBIj4NCi0gICAgPCEtLSBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNoYXJhY3RlciBlbmNvZGluZ3MsIGFzIHBlciBbUkZDMjA0NV0gLS0+DQotDQotPCFFTlRJVFkgJSBMYW5ndWFnZUNvZGUgIk5NVE9LRU4iPg0KLSAgICA8IS0tIGEgbGFuZ3VhZ2UgY29kZSwgYXMgcGVyIFtSRkMxNzY2XSAtLT4NCi0NCi08IUVOVElUWSAlIENoYXJhY3RlciAiQ0RBVEEiPg0KLSAgICA8IS0tIGEgc2luZ2xlIGNoYXJhY3RlciBmcm9tIFtJU08xMDY0Nl0gLS0+DQotDQotPCFFTlRJVFkgJSBOdW1iZXIgIkNEQVRBIj4NCi0gICAgPCEtLSBvbmUgb3IgbW9yZSBkaWdpdHMgLS0+DQotDQotPCFFTlRJVFkgJSBMaW5rVHlwZXMgIkNEQVRBIj4NCi0gICAgPCEtLSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBsaW5rIHR5cGVzIC0tPg0KLQ0KLTwhRU5USVRZICUgTWVkaWFEZXNjICJDREFUQSI+DQotICAgIDwhLS0gc2luZ2xlIG9yIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIG1lZGlhIGRlc2NyaXB0b3JzIC0tPg0KLQ0KLTwhRU5USVRZICUgVVJJICJDREFUQSI+DQotICAgIDwhLS0gYSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIHNlZSBbUkZDMjM5Nl0gLS0+DQotDQotPCFFTlRJVFkgJSBVcmlMaXN0ICJDREFUQSI+DQotICAgIDwhLS0gYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXJzIC0tPg0KLQ0KLTwhRU5USVRZICUgRGF0ZXRpbWUgIkNEQVRBIj4NCi0gICAgPCEtLSBkYXRlIGFuZCB0aW1lIGluZm9ybWF0aW9uLiBJU08gZGF0ZSBmb3JtYXQgLS0+DQotDQotPCFFTlRJVFkgJSBTY3JpcHQgIkNEQVRBIj4NCi0gICAgPCEtLSBzY3JpcHQgZXhwcmVzc2lvbiAtLT4NCi0NCi08IUVOVElUWSAlIFN0eWxlU2hlZXQgIkNEQVRBIj4NCi0gICAgPCEtLSBzdHlsZSBzaGVldCBkYXRhIC0tPg0KLQ0KLTwhRU5USVRZICUgVGV4dCAiQ0RBVEEiPg0KLSAgICA8IS0tIHVzZWQgZm9yIHRpdGxlcyBldGMuIC0tPg0KLQ0KLTwhRU5USVRZICUgRnJhbWVUYXJnZXQgIk5NVE9LRU4iPg0KLSAgICA8IS0tIHJlbmRlciBpbiB0aGlzIGZyYW1lIC0tPg0KLQ0KLTwhRU5USVRZICUgTGVuZ3RoICJDREFUQSI+DQotICAgIDwhLS0gbm4gZm9yIHBpeGVscyBvciBubiUgZm9yIHBlcmNlbnRhZ2UgbGVuZ3RoIC0tPg0KLQ0KLTwhRU5USVRZICUgTXVsdGlMZW5ndGggIkNEQVRBIj4NCi0gICAgPCEtLSBwaXhlbCwgcGVyY2VudGFnZSwgb3IgcmVsYXRpdmUgLS0+DQotDQotPCFFTlRJVFkgJSBNdWx0aUxlbmd0aHMgIkNEQVRBIj4NCi0gICAgPCEtLSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBNdWx0aUxlbmd0aCAtLT4NCi0NCi08IUVOVElUWSAlIFBpeGVscyAiQ0RBVEEiPg0KLSAgICA8IS0tIGludGVnZXIgcmVwcmVzZW50aW5nIGxlbmd0aCBpbiBwaXhlbHMgLS0+DQotDQotPCEtLSB0aGVzZSBhcmUgdXNlZCBmb3IgaW1hZ2UgbWFwcyAtLT4NCi0NCi08IUVOVElUWSAlIFNoYXBlICIocmVjdHxjaXJjbGV8cG9seXxkZWZhdWx0KSI+DQotDQotPCFFTlRJVFkgJSBDb29yZHMgIkNEQVRBIj4NCi0gICAgPCEtLSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBsZW5ndGhzIC0tPg0KLQ0KLTwhLS0gdXNlZCBmb3Igb2JqZWN0LCBhcHBsZXQsIGltZywgaW5wdXQgYW5kIGlmcmFtZSAtLT4NCi08IUVOVElUWSAlIEltZ0FsaWduICIodG9wfG1pZGRsZXxib3R0b218bGVmdHxyaWdodCkiPg0KLQ0KLTwhLS0gYSBjb2xvciB1c2luZyBzUkdCOiAjUlJHR0JCIGFzIEhleCB2YWx1ZXMgLS0+DQotPCFFTlRJVFkgJSBDb2xvciAiQ0RBVEEiPg0KLQ0KLTwhLS0gVGhlcmUgYXJlIGFsc28gMTYgd2lkZWx5IGtub3duIGNvbG9yIG5hbWVzIHdpdGggdGhlaXIgc1JHQiB2YWx1ZXM6DQotDQotICAgIEJsYWNrICA9ICMwMDAwMDAgICAgR3JlZW4gID0gIzAwODAwMA0KLSAgICBTaWx2ZXIgPSAjQzBDMEMwICAgIExpbWUgICA9ICMwMEZGMDANCi0gICAgR3JheSAgID0gIzgwODA4MCAgICBPbGl2ZSAgPSAjODA4MDAwDQotICAgIFdoaXRlICA9ICNGRkZGRkYgICAgWWVsbG93ID0gI0ZGRkYwMA0KLSAgICBNYXJvb24gPSAjODAwMDAwICAgIE5hdnkgICA9ICMwMDAwODANCi0gICAgUmVkICAgID0gI0ZGMDAwMCAgICBCbHVlICAgPSAjMDAwMEZGDQotICAgIFB1cnBsZSA9ICM4MDAwODAgICAgVGVhbCAgID0gIzAwODA4MA0KLSAgICBGdWNoc2lhPSAjRkYwMEZGICAgIEFxdWEgICA9ICMwMEZGRkYNCi0tLT4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBHZW5lcmljIEF0dHJpYnV0ZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gY29yZSBhdHRyaWJ1dGVzIGNvbW1vbiB0byBtb3N0IGVsZW1lbnRzDQotICBpZCAgICAgICBkb2N1bWVudC13aWRlIHVuaXF1ZSBpZA0KLSAgY2xhc3MgICAgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3Nlcw0KLSAgc3R5bGUgICAgYXNzb2NpYXRlZCBzdHlsZSBpbmZvDQotICB0aXRsZSAgICBhZHZpc29yeSB0aXRsZS9hbXBsaWZpY2F0aW9uDQotLS0+DQotPCFFTlRJVFkgJSBjb3JlYXR0cnMNCi0gImlkICAgICAgICAgIElEICAgICAgICAgICAgICNJTVBMSUVEDQotICBjbGFzcyAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgc3R5bGUgICAgICAgJVN0eWxlU2hlZXQ7ICAgI0lNUExJRUQNCi0gIHRpdGxlICAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEIg0KLSAgPg0KLQ0KLTwhLS0gaW50ZXJuYXRpb25hbGl6YXRpb24gYXR0cmlidXRlcw0KLSAgbGFuZyAgICAgICAgbGFuZ3VhZ2UgY29kZSAoYmFja3dhcmRzIGNvbXBhdGlibGUpDQotICB4bWw6bGFuZyAgICBsYW5ndWFnZSBjb2RlIChhcyBwZXIgWE1MIDEuMCBzcGVjKQ0KLSAgZGlyICAgICAgICAgZGlyZWN0aW9uIGZvciB3ZWFrL25ldXRyYWwgdGV4dA0KLS0tPg0KLTwhRU5USVRZICUgaTE4bg0KLSAibGFuZyAgICAgICAgJUxhbmd1YWdlQ29kZTsgI0lNUExJRUQNCi0gIHhtbDpsYW5nICAgICVMYW5ndWFnZUNvZGU7ICNJTVBMSUVEDQotICBkaXIgICAgICAgICAobHRyfHJ0bCkgICAgICAjSU1QTElFRCINCi0gID4NCi0NCi08IS0tIGF0dHJpYnV0ZXMgZm9yIGNvbW1vbiBVSSBldmVudHMNCi0gIG9uY2xpY2sgICAgIGEgcG9pbnRlciBidXR0b24gd2FzIGNsaWNrZWQNCi0gIG9uZGJsY2xpY2sgIGEgcG9pbnRlciBidXR0b24gd2FzIGRvdWJsZSBjbGlja2VkDQotICBvbm1vdXNlZG93biBhIHBvaW50ZXIgYnV0dG9uIHdhcyBwcmVzc2VkIGRvd24NCi0gIG9ubW91c2V1cCAgIGEgcG9pbnRlciBidXR0b24gd2FzIHJlbGVhc2VkDQotICBvbm1vdXNlbW92ZSBhIHBvaW50ZXIgd2FzIG1vdmVkIG9udG8gdGhlIGVsZW1lbnQNCi0gIG9ubW91c2VvdXQgIGEgcG9pbnRlciB3YXMgbW92ZWQgYXdheSBmcm9tIHRoZSBlbGVtZW50DQotICBvbmtleXByZXNzICBhIGtleSB3YXMgcHJlc3NlZCBhbmQgcmVsZWFzZWQNCi0gIG9ua2V5ZG93biAgIGEga2V5IHdhcyBwcmVzc2VkIGRvd24NCi0gIG9ua2V5dXAgICAgIGEga2V5IHdhcyByZWxlYXNlZA0KLS0tPg0KLTwhRU5USVRZICUgZXZlbnRzDQotICJvbmNsaWNrICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25kYmxjbGljayAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ubW91c2Vkb3duICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbm1vdXNldXAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25tb3VzZW92ZXIgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ubW91c2Vtb3ZlICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbm1vdXNlb3V0ICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25rZXlwcmVzcyAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9ua2V5ZG93biAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmtleXVwICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRCINCi0gID4NCi0NCi08IS0tIGF0dHJpYnV0ZXMgZm9yIGVsZW1lbnRzIHRoYXQgY2FuIGdldCB0aGUgZm9jdXMNCi0gIGFjY2Vzc2tleSAgIGFjY2Vzc2liaWxpdHkga2V5IGNoYXJhY3Rlcg0KLSAgdGFiaW5kZXggICAgcG9zaXRpb24gaW4gdGFiYmluZyBvcmRlcg0KLSAgb25mb2N1cyAgICAgdGhlIGVsZW1lbnQgZ290IHRoZSBmb2N1cw0KLSAgb25ibHVyICAgICAgdGhlIGVsZW1lbnQgbG9zdCB0aGUgZm9jdXMNCi0tLT4NCi08IUVOVElUWSAlIGZvY3VzDQotICJhY2Nlc3NrZXkgICAlQ2hhcmFjdGVyOyAgICAjSU1QTElFRA0KLSAgdGFiaW5kZXggICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIG9uZm9jdXMgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmJsdXIgICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRCINCi0gID4NCi0NCi08IUVOVElUWSAlIGF0dHJzICIlY29yZWF0dHJzOyAlaTE4bjsgJWV2ZW50czsiPg0KLQ0KLTwhLS0gdGV4dCBhbGlnbm1lbnQgZm9yIHAsIGRpdiwgaDEtaDYuIFRoZSBkZWZhdWx0IGlzDQotICAgICBhbGlnbj0ibGVmdCIgZm9yIGx0ciBoZWFkaW5ncywgInJpZ2h0IiBmb3IgcnRsIC0tPg0KLQ0KLTwhRU5USVRZICUgVGV4dEFsaWduICJhbGlnbiAobGVmdHxjZW50ZXJ8cmlnaHQpICNJTVBMSUVEIj4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBUZXh0IEVsZW1lbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRU5USVRZICUgc3BlY2lhbA0KLSAgICJiciB8IHNwYW4gfCBiZG8gfCBvYmplY3QgfCBhcHBsZXQgfCBpbWcgfCBtYXAgfCBpZnJhbWUiPg0KLQ0KLTwhRU5USVRZICUgZm9udHN0eWxlICJ0dCB8IGkgfCBiIHwgYmlnIHwgc21hbGwgfCB1DQotICAgICAgICAgICAgICAgICAgICAgIHwgcyB8IHN0cmlrZSB8Zm9udCB8IGJhc2Vmb250Ij4NCi0NCi08IUVOVElUWSAlIHBocmFzZSAiZW0gfCBzdHJvbmcgfCBkZm4gfCBjb2RlIHwgcSB8IHN1YiB8IHN1cCB8DQotICAgICAgICAgICAgICAgICAgIHNhbXAgfCBrYmQgfCB2YXIgfCBjaXRlIHwgYWJiciB8IGFjcm9ueW0iPg0KLQ0KLTwhRU5USVRZICUgaW5saW5lLmZvcm1zICJpbnB1dCB8IHNlbGVjdCB8IHRleHRhcmVhIHwgbGFiZWwgfCBidXR0b24iPg0KLQ0KLTwhLS0gdGhlc2UgY2FuIG9jY3VyIGF0IGJsb2NrIG9yIGlubGluZSBsZXZlbCAtLT4NCi08IUVOVElUWSAlIG1pc2MgImlucyB8IGRlbCB8IHNjcmlwdCB8IG5vc2NyaXB0Ij4NCi0NCi08IUVOVElUWSAlIGlubGluZSAiYSB8ICVzcGVjaWFsOyB8ICVmb250c3R5bGU7IHwgJXBocmFzZTsgfCAlaW5saW5lLmZvcm1zOyI+DQotDQotPCEtLSAlSW5saW5lOyBjb3ZlcnMgaW5saW5lIG9yICJ0ZXh0LWxldmVsIiBlbGVtZW50cyAtLT4NCi08IUVOVElUWSAlIElubGluZSAiKCNQQ0RBVEEgfCAlaW5saW5lOyB8ICVtaXNjOykqIj4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IEJsb2NrIGxldmVsIGVsZW1lbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRU5USVRZICUgaGVhZGluZyAiaDF8aDJ8aDN8aDR8aDV8aDYiPg0KLTwhRU5USVRZICUgbGlzdHMgInVsIHwgb2wgfCBkbCB8IG1lbnUgfCBkaXIiPg0KLTwhRU5USVRZICUgYmxvY2t0ZXh0ICJwcmUgfCBociB8IGJsb2NrcXVvdGUgfCBhZGRyZXNzIHwgY2VudGVyIHwgbm9mcmFtZXMiPg0KLQ0KLTwhRU5USVRZICUgYmxvY2sNCi0gICAgInAgfCAlaGVhZGluZzsgfCBkaXYgfCAlbGlzdHM7IHwgJWJsb2NrdGV4dDsgfCBpc2luZGV4IHxmaWVsZHNldCB8IHRhYmxlIj4NCi0NCi08IUVOVElUWSAlIEJsb2NrICIoJWJsb2NrOyB8IGZvcm0gfCAlbWlzYzspKiI+DQotDQotPCEtLSAlRmxvdzsgbWl4ZXMgQmxvY2sgYW5kIElubGluZSBhbmQgaXMgdXNlZCBmb3IgbGlzdCBpdGVtcyBldGMuIC0tPg0KLTwhRU5USVRZICUgRmxvdyAiKCNQQ0RBVEEgfCAlYmxvY2s7IHwgZm9ybSB8ICVpbmxpbmU7IHwgJW1pc2M7KSoiPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT0gQ29udGVudCBtb2RlbHMgZm9yIGV4Y2x1c2lvbnMgPT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBhIGVsZW1lbnRzIHVzZSAlSW5saW5lOyBleGNsdWRpbmcgYSAtLT4NCi0NCi08IUVOVElUWSAlIGEuY29udGVudA0KLSAgICIoI1BDREFUQSB8ICVzcGVjaWFsOyB8ICVmb250c3R5bGU7IHwgJXBocmFzZTsgfCAlaW5saW5lLmZvcm1zOyB8ICVtaXNjOykqIj4NCi0NCi08IS0tIHByZSB1c2VzICVJbmxpbmUgZXhjbHVkaW5nIGltZywgb2JqZWN0LCBhcHBsZXQsIGJpZywgc21hbGwsDQotICAgICBzdWIsIHN1cCwgZm9udCwgb3IgYmFzZWZvbnQgLS0+DQotDQotPCFFTlRJVFkgJSBwcmUuY29udGVudA0KLSAgICIoI1BDREFUQSB8IGEgfCBiciB8IHNwYW4gfCBiZG8gfCBtYXAgfCB0dCB8IGkgfCBiIHwgdSB8IHMgfA0KLSAgICAgICVwaHJhc2U7IHwgJWlubGluZS5mb3JtczspKiI+DQotDQotPCEtLSBmb3JtIHVzZXMgJUZsb3c7IGV4Y2x1ZGluZyBmb3JtIC0tPg0KLQ0KLTwhRU5USVRZICUgZm9ybS5jb250ZW50ICIoI1BDREFUQSB8ICVibG9jazsgfCAlaW5saW5lOyB8ICVtaXNjOykqIj4NCi0NCi08IS0tIGJ1dHRvbiB1c2VzICVGbG93OyBidXQgZXhjbHVkZXMgYSwgZm9ybSwgZm9ybSBjb250cm9scywgaWZyYW1lIC0tPg0KLQ0KLTwhRU5USVRZICUgYnV0dG9uLmNvbnRlbnQNCi0gICAiKCNQQ0RBVEEgfCBwIHwgJWhlYWRpbmc7IHwgZGl2IHwgJWxpc3RzOyB8ICVibG9ja3RleHQ7IHwNCi0gICAgICB0YWJsZSB8IGJyIHwgc3BhbiB8IGJkbyB8IG9iamVjdCB8IGFwcGxldCB8IGltZyB8IG1hcCB8DQotICAgICAgJWZvbnRzdHlsZTsgfCAlcGhyYXNlOyB8ICVtaXNjOykqIj4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBEb2N1bWVudCBTdHJ1Y3R1cmUgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gdGhlIG5hbWVzcGFjZSBVUkkgZGVzaWduYXRlcyB0aGUgZG9jdW1lbnQgcHJvZmlsZSAtLT4NCi0NCi08IUVMRU1FTlQgaHRtbCAoaGVhZCwgYm9keSk+DQotPCFBVFRMSVNUIGh0bWwNCi0gICVpMThuOw0KLSAgeG1sbnMgICAgICAgJVVSSTsgICAgICAgICAgI0ZJWEVEICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09IERvY3VtZW50IEhlYWQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTlRJVFkgJSBoZWFkLm1pc2MgIihzY3JpcHR8c3R5bGV8bWV0YXxsaW5rfG9iamVjdHxpc2luZGV4KSoiPg0KLQ0KLTwhLS0gY29udGVudCBtb2RlbCBpcyAlaGVhZC5taXNjOyBjb21iaW5lZCB3aXRoIGEgc2luZ2xlDQotICAgICB0aXRsZSBhbmQgYW4gb3B0aW9uYWwgYmFzZSBlbGVtZW50IGluIGFueSBvcmRlciAtLT4NCi0NCi08IUVMRU1FTlQgaGVhZCAoJWhlYWQubWlzYzssDQotICAgICAoKHRpdGxlLCAlaGVhZC5taXNjOywgKGJhc2UsICVoZWFkLm1pc2M7KT8pIHwNCi0gICAgICAoYmFzZSwgJWhlYWQubWlzYzssICh0aXRsZSwgJWhlYWQubWlzYzspKSkpPg0KLQ0KLTwhQVRUTElTVCBoZWFkDQotICAlaTE4bjsNCi0gIHByb2ZpbGUgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBUaGUgdGl0bGUgZWxlbWVudCBpcyBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBmbG93IG9mIHRleHQuDQotICAgICAgIEl0IHNob3VsZCBiZSBkaXNwbGF5ZWQsIGZvciBleGFtcGxlIGFzIHRoZSBwYWdlIGhlYWRlciBvcg0KLSAgICAgICB3aW5kb3cgdGl0bGUuIEV4YWN0bHkgb25lIHRpdGxlIGlzIHJlcXVpcmVkIHBlciBkb2N1bWVudC4NCi0gICAgLS0+DQotPCFFTEVNRU5UIHRpdGxlICgjUENEQVRBKT4NCi08IUFUVExJU1QgdGl0bGUgJWkxOG47Pg0KLQ0KLTwhLS0gZG9jdW1lbnQgYmFzZSBVUkkgLS0+DQotDQotPCFFTEVNRU5UIGJhc2UgRU1QVFk+DQotPCFBVFRMSVNUIGJhc2UNCi0gIGhyZWYgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICB0YXJnZXQgICAgICAlRnJhbWVUYXJnZXQ7ICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gZ2VuZXJpYyBtZXRhaW5mb3JtYXRpb24gLS0+DQotPCFFTEVNRU5UIG1ldGEgRU1QVFk+DQotPCFBVFRMSVNUIG1ldGENCi0gICVpMThuOw0KLSAgaHR0cC1lcXVpdiAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIG5hbWUgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBjb250ZW50ICAgICBDREFUQSAgICAgICAgICAjUkVRVUlSRUQNCi0gIHNjaGVtZSAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLQ0KLSAgUmVsYXRpb25zaGlwIHZhbHVlcyBjYW4gYmUgdXNlZCBpbiBwcmluY2lwbGU6DQotDQotICAgYSkgZm9yIGRvY3VtZW50IHNwZWNpZmljIHRvb2xiYXJzL21lbnVzIHdoZW4gdXNlZA0KLSAgICAgIHdpdGggdGhlIGxpbmsgZWxlbWVudCBpbiBkb2N1bWVudCBoZWFkIGUuZy4NCi0gICAgICAgIHN0YXJ0LCBjb250ZW50cywgcHJldmlvdXMsIG5leHQsIGluZGV4LCBlbmQsIGhlbHANCi0gICBiKSB0byBsaW5rIHRvIGEgc2VwYXJhdGUgc3R5bGUgc2hlZXQgKHJlbD0ic3R5bGVzaGVldCIpDQotICAgYykgdG8gbWFrZSBhIGxpbmsgdG8gYSBzY3JpcHQgKHJlbD0ic2NyaXB0IikNCi0gICBkKSBieSBzdHlsZXNoZWV0cyB0byBjb250cm9sIGhvdyBjb2xsZWN0aW9ucyBvZg0KLSAgICAgIGh0bWwgbm9kZXMgYXJlIHJlbmRlcmVkIGludG8gcHJpbnRlZCBkb2N1bWVudHMNCi0gICBlKSB0byBtYWtlIGEgbGluayB0byBhIHByaW50YWJsZSB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQNCi0gICAgICBlLmcuIGEgUG9zdFNjcmlwdCBvciBQREYgdmVyc2lvbiAocmVsPSJhbHRlcm5hdGUiIG1lZGlhPSJwcmludCIpDQotLS0+DQotDQotPCFFTEVNRU5UIGxpbmsgRU1QVFk+DQotPCFBVFRMSVNUIGxpbmsNCi0gICVhdHRyczsNCi0gIGNoYXJzZXQgICAgICVDaGFyc2V0OyAgICAgICNJTVBMSUVEDQotICBocmVmICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgaHJlZmxhbmcgICAgJUxhbmd1YWdlQ29kZTsgI0lNUExJRUQNCi0gIHR5cGUgICAgICAgICVDb250ZW50VHlwZTsgICNJTVBMSUVEDQotICByZWwgICAgICAgICAlTGlua1R5cGVzOyAgICAjSU1QTElFRA0KLSAgcmV2ICAgICAgICAgJUxpbmtUeXBlczsgICAgI0lNUExJRUQNCi0gIG1lZGlhICAgICAgICVNZWRpYURlc2M7ICAgICNJTVBMSUVEDQotICB0YXJnZXQgICAgICAlRnJhbWVUYXJnZXQ7ICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gc3R5bGUgaW5mbywgd2hpY2ggbWF5IGluY2x1ZGUgQ0RBVEEgc2VjdGlvbnMgLS0+DQotPCFFTEVNRU5UIHN0eWxlICgjUENEQVRBKT4NCi08IUFUVExJU1Qgc3R5bGUNCi0gICVpMThuOw0KLSAgdHlwZSAgICAgICAgJUNvbnRlbnRUeXBlOyAgI1JFUVVJUkVEDQotICBtZWRpYSAgICAgICAlTWVkaWFEZXNjOyAgICAjSU1QTElFRA0KLSAgdGl0bGUgICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gIHhtbDpzcGFjZSAgIChwcmVzZXJ2ZSkgICAgICNGSVhFRCAncHJlc2VydmUnDQotICA+DQotDQotPCEtLSBzY3JpcHQgc3RhdGVtZW50cywgd2hpY2ggbWF5IGluY2x1ZGUgQ0RBVEEgc2VjdGlvbnMgLS0+DQotPCFFTEVNRU5UIHNjcmlwdCAoI1BDREFUQSk+DQotPCFBVFRMSVNUIHNjcmlwdA0KLSAgY2hhcnNldCAgICAgJUNoYXJzZXQ7ICAgICAgI0lNUExJRUQNCi0gIHR5cGUgICAgICAgICVDb250ZW50VHlwZTsgICNSRVFVSVJFRA0KLSAgbGFuZ3VhZ2UgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHNyYyAgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBkZWZlciAgICAgICAoZGVmZXIpICAgICAgICAjSU1QTElFRA0KLSAgeG1sOnNwYWNlICAgKHByZXNlcnZlKSAgICAgI0ZJWEVEICdwcmVzZXJ2ZScNCi0gID4NCi0NCi08IS0tIGFsdGVybmF0ZSBjb250ZW50IGNvbnRhaW5lciBmb3Igbm9uIHNjcmlwdC1iYXNlZCByZW5kZXJpbmcgLS0+DQotDQotPCFFTEVNRU5UIG5vc2NyaXB0ICVGbG93Oz4NCi08IUFUVExJU1Qgbm9zY3JpcHQNCi0gICVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09PT0gRnJhbWVzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gaW5saW5lIHN1YndpbmRvdyAtLT4NCi0NCi08IUVMRU1FTlQgaWZyYW1lICVGbG93Oz4NCi08IUFUVExJU1QgaWZyYW1lDQotICAlY29yZWF0dHJzOw0KLSAgbG9uZ2Rlc2MgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIG5hbWUgICAgICAgIE5NVE9LRU4gICAgICAgICNJTVBMSUVEDQotICBzcmMgICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgZnJhbWVib3JkZXIgKDF8MCkgICAgICAgICAgIjEiDQotICBtYXJnaW53aWR0aCAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgbWFyZ2luaGVpZ2h0ICVQaXhlbHM7ICAgICAgI0lNUExJRUQNCi0gIHNjcm9sbGluZyAgICh5ZXN8bm98YXV0bykgICJhdXRvIg0KLSAgYWxpZ24gICAgICAgJUltZ0FsaWduOyAgICAgI0lNUExJRUQNCi0gIGhlaWdodCAgICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gYWx0ZXJuYXRlIGNvbnRlbnQgY29udGFpbmVyIGZvciBub24gZnJhbWUtYmFzZWQgcmVuZGVyaW5nIC0tPg0KLQ0KLTwhRUxFTUVOVCBub2ZyYW1lcyAlRmxvdzs+DQotPCFBVFRMSVNUIG5vZnJhbWVzDQotICAlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gRG9jdW1lbnQgQm9keSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgYm9keSAlRmxvdzs+DQotPCFBVFRMSVNUIGJvZHkNCi0gICVhdHRyczsNCi0gIG9ubG9hZCAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbnVubG9hZCAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgYmFja2dyb3VuZCAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGJnY29sb3IgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICB0ZXh0ICAgICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgbGluayAgICAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIHZsaW5rICAgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICBhbGluayAgICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBkaXYgJUZsb3c7PiAgPCEtLSBnZW5lcmljIGxhbmd1YWdlL3N0eWxlIGNvbnRhaW5lciAtLT4NCi08IUFUVExJU1QgZGl2DQotICAlYXR0cnM7DQotICAlVGV4dEFsaWduOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IFBhcmFncmFwaHMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCFFTEVNRU5UIHAgJUlubGluZTs+DQotPCFBVFRMSVNUIHANCi0gICVhdHRyczsNCi0gICVUZXh0QWxpZ247DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gSGVhZGluZ3MgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tDQotICBUaGVyZSBhcmUgc2l4IGxldmVscyBvZiBoZWFkaW5ncyBmcm9tIGgxICh0aGUgbW9zdCBpbXBvcnRhbnQpDQotICB0byBoNiAodGhlIGxlYXN0IGltcG9ydGFudCkuDQotLS0+DQotDQotPCFFTEVNRU5UIGgxICAlSW5saW5lOz4NCi08IUFUVExJU1QgaDENCi0gICVhdHRyczsNCi0gICVUZXh0QWxpZ247DQotICA+DQotDQotPCFFTEVNRU5UIGgyICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBoMg0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IUVMRU1FTlQgaDMgJUlubGluZTs+DQotPCFBVFRMSVNUIGgzDQotICAlYXR0cnM7DQotICAlVGV4dEFsaWduOw0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBoNCAlSW5saW5lOz4NCi08IUFUVExJU1QgaDQNCi0gICVhdHRyczsNCi0gICVUZXh0QWxpZ247DQotICA+DQotDQotPCFFTEVNRU5UIGg1ICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBoNQ0KLSAgJWF0dHJzOw0KLSAgJVRleHRBbGlnbjsNCi0gID4NCi0NCi08IUVMRU1FTlQgaDYgJUlubGluZTs+DQotPCFBVFRMSVNUIGg2DQotICAlYXR0cnM7DQotICAlVGV4dEFsaWduOw0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IExpc3RzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBVbm9yZGVyZWQgbGlzdCBidWxsZXQgc3R5bGVzIC0tPg0KLQ0KLTwhRU5USVRZICUgVUxTdHlsZSAiKGRpc2N8c3F1YXJlfGNpcmNsZSkiPg0KLQ0KLTwhLS0gVW5vcmRlcmVkIGxpc3QgLS0+DQotDQotPCFFTEVNRU5UIHVsIChsaSkrPg0KLTwhQVRUTElTVCB1bA0KLSAgJWF0dHJzOw0KLSAgdHlwZSAgICAgICAgJVVMU3R5bGU7ICAgICAjSU1QTElFRA0KLSAgY29tcGFjdCAgICAgKGNvbXBhY3QpICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gT3JkZXJlZCBsaXN0IG51bWJlcmluZyBzdHlsZQ0KLQ0KLSAgICAxICAgYXJhYmljIG51bWJlcnMgICAgICAxLCAyLCAzLCAuLi4NCi0gICAgYSAgIGxvd2VyIGFscGhhICAgICAgICAgYSwgYiwgYywgLi4uDQotICAgIEEgICB1cHBlciBhbHBoYSAgICAgICAgIEEsIEIsIEMsIC4uLg0KLSAgICBpICAgbG93ZXIgcm9tYW4gICAgICAgICBpLCBpaSwgaWlpLCAuLi4NCi0gICAgSSAgIHVwcGVyIHJvbWFuICAgICAgICAgSSwgSUksIElJSSwgLi4uDQotDQotICAgIFRoZSBzdHlsZSBpcyBhcHBsaWVkIHRvIHRoZSBzZXF1ZW5jZSBudW1iZXIgd2hpY2ggYnkgZGVmYXVsdA0KLSAgICBpcyByZXNldCB0byAxIGZvciB0aGUgZmlyc3QgbGlzdCBpdGVtIGluIGFuIG9yZGVyZWQgbGlzdC4NCi0tLT4NCi08IUVOVElUWSAlIE9MU3R5bGUgIkNEQVRBIj4NCi0NCi08IS0tIE9yZGVyZWQgKG51bWJlcmVkKSBsaXN0IC0tPg0KLQ0KLTwhRUxFTUVOVCBvbCAobGkpKz4NCi08IUFUVExJU1Qgb2wNCi0gICVhdHRyczsNCi0gIHR5cGUgICAgICAgICVPTFN0eWxlOyAgICAgICNJTVBMSUVEDQotICBjb21wYWN0ICAgICAoY29tcGFjdCkgICAgICAjSU1QTElFRA0KLSAgc3RhcnQgICAgICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tIHNpbmdsZSBjb2x1bW4gbGlzdCAoREVQUkVDQVRFRCkgLS0+IA0KLTwhRUxFTUVOVCBtZW51IChsaSkrPg0KLTwhQVRUTElTVCBtZW51DQotICAlYXR0cnM7DQotICBjb21wYWN0ICAgICAoY29tcGFjdCkgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBtdWx0aXBsZSBjb2x1bW4gbGlzdCAoREVQUkVDQVRFRCkgLS0+IA0KLTwhRUxFTUVOVCBkaXIgKGxpKSs+DQotPCFBVFRMSVNUIGRpcg0KLSAgJWF0dHJzOw0KLSAgY29tcGFjdCAgICAgKGNvbXBhY3QpICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gTElTdHlsZSBpcyBjb25zdHJhaW5lZCB0bzogIiglVUxTdHlsZTt8JU9MU3R5bGU7KSIgLS0+DQotPCFFTlRJVFkgJSBMSVN0eWxlICJDREFUQSI+DQotDQotPCEtLSBsaXN0IGl0ZW0gLS0+DQotDQotPCFFTEVNRU5UIGxpICVGbG93Oz4NCi08IUFUVExJU1QgbGkNCi0gICVhdHRyczsNCi0gIHR5cGUgICAgICAgICVMSVN0eWxlOyAgICAgICNJTVBMSUVEDQotICB2YWx1ZSAgICAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gZGVmaW5pdGlvbiBsaXN0cyAtIGR0IGZvciB0ZXJtLCBkZCBmb3IgaXRzIGRlZmluaXRpb24gLS0+DQotDQotPCFFTEVNRU5UIGRsIChkdHxkZCkrPg0KLTwhQVRUTElTVCBkbA0KLSAgJWF0dHJzOw0KLSAgY29tcGFjdCAgICAgKGNvbXBhY3QpICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgZHQgJUlubGluZTs+DQotPCFBVFRMSVNUIGR0DQotICAlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIGRkICVGbG93Oz4NCi08IUFUVExJU1QgZGQNCi0gICVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBBZGRyZXNzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gaW5mb3JtYXRpb24gb24gYXV0aG9yIC0tPg0KLQ0KLTwhRUxFTUVOVCBhZGRyZXNzICVJbmxpbmU7Pg0KLTwhQVRUTElTVCBhZGRyZXNzDQotICAlYXR0cnM7DQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gSG9yaXpvbnRhbCBSdWxlID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgaHIgRU1QVFk+DQotPCFBVFRMSVNUIGhyDQotICAlYXR0cnM7DQotICBhbGlnbiAgICAgICAobGVmdHxjZW50ZXJ8cmlnaHQpICNJTVBMSUVEDQotICBub3NoYWRlICAgICAobm9zaGFkZSkgICAgICAjSU1QTElFRA0KLSAgc2l6ZSAgICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIHdpZHRoICAgICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gUHJlZm9ybWF0dGVkIFRleHQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIGNvbnRlbnQgaXMgJUlubGluZTsgZXhjbHVkaW5nIA0KLSAgICAgICAgImltZ3xvYmplY3R8YXBwbGV0fGJpZ3xzbWFsbHxzdWJ8c3VwfGZvbnR8YmFzZWZvbnQiIC0tPg0KLQ0KLTwhRUxFTUVOVCBwcmUgJXByZS5jb250ZW50Oz4NCi08IUFUVExJU1QgcHJlDQotICAlYXR0cnM7DQotICB3aWR0aCAgICAgICAlTnVtYmVyOyAgICAgICNJTVBMSUVEDQotICB4bWw6c3BhY2UgICAocHJlc2VydmUpICAgICNGSVhFRCAncHJlc2VydmUnDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gQmxvY2stbGlrZSBRdW90ZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IUVMRU1FTlQgYmxvY2txdW90ZSAlRmxvdzs+DQotPCFBVFRMSVNUIGJsb2NrcXVvdGUNCi0gICVhdHRyczsNCi0gIGNpdGUgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLT09PT09PT09PT09PT09PT09PT0gVGV4dCBhbGlnbm1lbnQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi0NCi08IS0tIGNlbnRlciBjb250ZW50IC0tPg0KLTwhRUxFTUVOVCBjZW50ZXIgJUZsb3c7Pg0KLTwhQVRUTElTVCBjZW50ZXINCi0gICVhdHRyczsNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBJbnNlcnRlZC9EZWxldGVkIFRleHQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0NCi0gIGlucy9kZWwgYXJlIGFsbG93ZWQgaW4gYmxvY2sgYW5kIGlubGluZSBjb250ZW50LCBidXQgaXRzDQotICBpbmFwcHJvcHJpYXRlIHRvIGluY2x1ZGUgYmxvY2sgY29udGVudCB3aXRoaW4gYW4gaW5zIGVsZW1lbnQNCi0gIG9jY3VycmluZyBpbiBpbmxpbmUgY29udGVudC4NCi0tLT4NCi08IUVMRU1FTlQgaW5zICVGbG93Oz4NCi08IUFUVExJU1QgaW5zDQotICAlYXR0cnM7DQotICBjaXRlICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgZGF0ZXRpbWUgICAgJURhdGV0aW1lOyAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgZGVsICVGbG93Oz4NCi08IUFUVExJU1QgZGVsDQotICAlYXR0cnM7DQotICBjaXRlICAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgZGF0ZXRpbWUgICAgJURhdGV0aW1lOyAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09IFRoZSBBbmNob3IgRWxlbWVudCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhLS0gY29udGVudCBpcyAlSW5saW5lOyBleGNlcHQgdGhhdCBhbmNob3JzIHNob3VsZG4ndCBiZSBuZXN0ZWQgLS0+DQotDQotPCFFTEVNRU5UIGEgJWEuY29udGVudDs+DQotPCFBVFRMSVNUIGENCi0gICVhdHRyczsNCi0gIGNoYXJzZXQgICAgICVDaGFyc2V0OyAgICAgICNJTVBMSUVEDQotICB0eXBlICAgICAgICAlQ29udGVudFR5cGU7ICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgTk1UT0tFTiAgICAgICAgI0lNUExJRUQNCi0gIGhyZWYgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBocmVmbGFuZyAgICAlTGFuZ3VhZ2VDb2RlOyAjSU1QTElFRA0KLSAgcmVsICAgICAgICAgJUxpbmtUeXBlczsgICAgI0lNUExJRUQNCi0gIHJldiAgICAgICAgICVMaW5rVHlwZXM7ICAgICNJTVBMSUVEDQotICBhY2Nlc3NrZXkgICAlQ2hhcmFjdGVyOyAgICAjSU1QTElFRA0KLSAgc2hhcGUgICAgICAgJVNoYXBlOyAgICAgICAgInJlY3QiDQotICBjb29yZHMgICAgICAlQ29vcmRzOyAgICAgICAjSU1QTElFRA0KLSAgdGFiaW5kZXggICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIG9uZm9jdXMgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmJsdXIgICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgdGFyZ2V0ICAgICAgJUZyYW1lVGFyZ2V0OyAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PT09IElubGluZSBFbGVtZW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBzcGFuICVJbmxpbmU7PiA8IS0tIGdlbmVyaWMgbGFuZ3VhZ2Uvc3R5bGUgY29udGFpbmVyIC0tPg0KLTwhQVRUTElTVCBzcGFuDQotICAlYXR0cnM7DQotICA+DQotDQotPCFFTEVNRU5UIGJkbyAlSW5saW5lOz4gIDwhLS0gSTE4TiBCaURpIG92ZXItcmlkZSAtLT4NCi08IUFUVExJU1QgYmRvDQotICAlY29yZWF0dHJzOw0KLSAgJWV2ZW50czsNCi0gIGxhbmcgICAgICAgICVMYW5ndWFnZUNvZGU7ICNJTVBMSUVEDQotICB4bWw6bGFuZyAgICAlTGFuZ3VhZ2VDb2RlOyAjSU1QTElFRA0KLSAgZGlyICAgICAgICAgKGx0cnxydGwpICAgICAgI1JFUVVJUkVEDQotICA+DQotDQotPCFFTEVNRU5UIGJyIEVNUFRZPiAgIDwhLS0gZm9yY2VkIGxpbmUgYnJlYWsgLS0+DQotPCFBVFRMSVNUIGJyDQotICAlY29yZWF0dHJzOw0KLSAgY2xlYXIgICAgICAgKGxlZnR8YWxsfHJpZ2h0fG5vbmUpICJub25lIg0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBlbSAlSW5saW5lOz4gICA8IS0tIGVtcGhhc2lzIC0tPg0KLTwhQVRUTElTVCBlbSAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBzdHJvbmcgJUlubGluZTs+ICAgPCEtLSBzdHJvbmcgZW1waGFzaXMgLS0+DQotPCFBVFRMSVNUIHN0cm9uZyAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBkZm4gJUlubGluZTs+ICAgPCEtLSBkZWZpbml0aW9uYWwgLS0+DQotPCFBVFRMSVNUIGRmbiAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBjb2RlICVJbmxpbmU7PiAgIDwhLS0gcHJvZ3JhbSBjb2RlIC0tPg0KLTwhQVRUTElTVCBjb2RlICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHNhbXAgJUlubGluZTs+ICAgPCEtLSBzYW1wbGUgLS0+DQotPCFBVFRMSVNUIHNhbXAgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQga2JkICVJbmxpbmU7PiAgPCEtLSBzb21ldGhpbmcgdXNlciB3b3VsZCB0eXBlIC0tPg0KLTwhQVRUTElTVCBrYmQgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgdmFyICVJbmxpbmU7PiAgIDwhLS0gdmFyaWFibGUgLS0+DQotPCFBVFRMSVNUIHZhciAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBjaXRlICVJbmxpbmU7PiAgIDwhLS0gY2l0YXRpb24gLS0+DQotPCFBVFRMSVNUIGNpdGUgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgYWJiciAlSW5saW5lOz4gICA8IS0tIGFiYnJldmlhdGlvbiAtLT4NCi08IUFUVExJU1QgYWJiciAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBhY3JvbnltICVJbmxpbmU7PiAgIDwhLS0gYWNyb255bSAtLT4NCi08IUFUVExJU1QgYWNyb255bSAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBxICVJbmxpbmU7PiAgIDwhLS0gaW5saW5lZCBxdW90ZSAtLT4NCi08IUFUVExJU1QgcQ0KLSAgJWF0dHJzOw0KLSAgY2l0ZSAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgc3ViICVJbmxpbmU7PiA8IS0tIHN1YnNjcmlwdCAtLT4NCi08IUFUVExJU1Qgc3ViICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHN1cCAlSW5saW5lOz4gPCEtLSBzdXBlcnNjcmlwdCAtLT4NCi08IUFUVExJU1Qgc3VwICVhdHRyczs+DQotDQotPCFFTEVNRU5UIHR0ICVJbmxpbmU7PiAgIDwhLS0gZml4ZWQgcGl0Y2ggZm9udCAtLT4NCi08IUFUVExJU1QgdHQgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgaSAlSW5saW5lOz4gICA8IS0tIGl0YWxpYyBmb250IC0tPg0KLTwhQVRUTElTVCBpICVhdHRyczs+DQotDQotPCFFTEVNRU5UIGIgJUlubGluZTs+ICAgPCEtLSBib2xkIGZvbnQgLS0+DQotPCFBVFRMSVNUIGIgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgYmlnICVJbmxpbmU7PiAgIDwhLS0gYmlnZ2VyIGZvbnQgLS0+DQotPCFBVFRMSVNUIGJpZyAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBzbWFsbCAlSW5saW5lOz4gICA8IS0tIHNtYWxsZXIgZm9udCAtLT4NCi08IUFUVExJU1Qgc21hbGwgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgdSAlSW5saW5lOz4gICA8IS0tIHVuZGVybGluZSAtLT4NCi08IUFUVExJU1QgdSAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBzICVJbmxpbmU7PiAgIDwhLS0gc3RyaWtlLXRocm91Z2ggLS0+DQotPCFBVFRMSVNUIHMgJWF0dHJzOz4NCi0NCi08IUVMRU1FTlQgc3RyaWtlICVJbmxpbmU7PiAgIDwhLS0gc3RyaWtlLXRocm91Z2ggLS0+DQotPCFBVFRMSVNUIHN0cmlrZSAlYXR0cnM7Pg0KLQ0KLTwhRUxFTUVOVCBiYXNlZm9udCBFTVBUWT4gIDwhLS0gYmFzZSBmb250IHNpemUgLS0+DQotPCFBVFRMSVNUIGJhc2Vmb250DQotICBpZCAgICAgICAgICBJRCAgICAgICAgICAgICAjSU1QTElFRA0KLSAgc2l6ZSAgICAgICAgQ0RBVEEgICAgICAgICAgI1JFUVVJUkVEDQotICBjb2xvciAgICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgZmFjZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgZm9udCAlSW5saW5lOz4gPCEtLSBsb2NhbCBjaGFuZ2UgdG8gZm9udCAtLT4NCi08IUFUVExJU1QgZm9udA0KLSAgJWNvcmVhdHRyczsNCi0gICVpMThuOw0KLSAgc2l6ZSAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIGNvbG9yICAgICAgICVDb2xvcjsgICAgICAgICNJTVBMSUVEDQotICBmYWNlICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PSBPYmplY3QgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tLT4NCi08IS0tDQotICBvYmplY3QgaXMgdXNlZCB0byBlbWJlZCBvYmplY3RzIGFzIHBhcnQgb2YgSFRNTCBwYWdlcy4NCi0gIHBhcmFtIGVsZW1lbnRzIHNob3VsZCBwcmVjZWRlIG90aGVyIGNvbnRlbnQuIFBhcmFtZXRlcnMNCi0gIGNhbiBhbHNvIGJlIGV4cHJlc3NlZCBhcyBhdHRyaWJ1dGUvdmFsdWUgcGFpcnMgb24gdGhlDQotICBvYmplY3QgZWxlbWVudCBpdHNlbGYgd2hlbiBicmV2aXR5IGlzIGRlc2lyZWQuDQotLS0+DQotDQotPCFFTEVNRU5UIG9iamVjdCAoI1BDREFUQSB8IHBhcmFtIHwgJWJsb2NrOyB8IGZvcm0gfCAlaW5saW5lOyB8ICVtaXNjOykqPg0KLTwhQVRUTElTVCBvYmplY3QNCi0gICVhdHRyczsNCi0gIGRlY2xhcmUgICAgIChkZWNsYXJlKSAgICAgICNJTVBMSUVEDQotICBjbGFzc2lkICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgY29kZWJhc2UgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGRhdGEgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICB0eXBlICAgICAgICAlQ29udGVudFR5cGU7ICAjSU1QTElFRA0KLSAgY29kZXR5cGUgICAgJUNvbnRlbnRUeXBlOyAgI0lNUExJRUQNCi0gIGFyY2hpdmUgICAgICVVcmlMaXN0OyAgICAgICNJTVBMSUVEDQotICBzdGFuZGJ5ICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgaGVpZ2h0ICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIHdpZHRoICAgICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICB1c2VtYXAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgbmFtZSAgICAgICAgTk1UT0tFTiAgICAgICAgI0lNUExJRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBhbGlnbiAgICAgICAlSW1nQWxpZ247ICAgICAjSU1QTElFRA0KLSAgYm9yZGVyICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIGhzcGFjZSAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICB2c3BhY2UgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0NCi0gIHBhcmFtIGlzIHVzZWQgdG8gc3VwcGx5IGEgbmFtZWQgcHJvcGVydHkgdmFsdWUuDQotICBJbiBYTUwgaXQgd291bGQgc2VlbSBuYXR1cmFsIHRvIGZvbGxvdyBSREYgYW5kIHN1cHBvcnQgYW4NCi0gIGFiYnJldmlhdGVkIHN5bnRheCB3aGVyZSB0aGUgcGFyYW0gZWxlbWVudHMgYXJlIHJlcGxhY2VkDQotICBieSBhdHRyaWJ1dGUgdmFsdWUgcGFpcnMgb24gdGhlIG9iamVjdCBzdGFydCB0YWcuDQotLS0+DQotPCFFTEVNRU5UIHBhcmFtIEVNUFRZPg0KLTwhQVRUTElTVCBwYXJhbQ0KLSAgaWQgICAgICAgICAgSUQgICAgICAgICAgICAgI0lNUExJRUQNCi0gIG5hbWUgICAgICAgIENEQVRBICAgICAgICAgICNSRVFVSVJFRA0KLSAgdmFsdWUgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHZhbHVldHlwZSAgIChkYXRhfHJlZnxvYmplY3QpICJkYXRhIg0KLSAgdHlwZSAgICAgICAgJUNvbnRlbnRUeXBlOyAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PT09PSBKYXZhIGFwcGxldCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotPCEtLQ0KLSAgT25lIG9mIGNvZGUgb3Igb2JqZWN0IGF0dHJpYnV0ZXMgbXVzdCBiZSBwcmVzZW50Lg0KLSAgUGxhY2UgcGFyYW0gZWxlbWVudHMgYmVmb3JlIG90aGVyIGNvbnRlbnQuDQotLS0+DQotPCFFTEVNRU5UIGFwcGxldCAoI1BDREFUQSB8IHBhcmFtIHwgJWJsb2NrOyB8IGZvcm0gfCAlaW5saW5lOyB8ICVtaXNjOykqPg0KLTwhQVRUTElTVCBhcHBsZXQNCi0gICVjb3JlYXR0cnM7DQotICBjb2RlYmFzZSAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgYXJjaGl2ZSAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIGNvZGUgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBvYmplY3QgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgYWx0ICAgICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gIG5hbWUgICAgICAgIE5NVE9LRU4gICAgICAgICNJTVBMSUVEDQotICB3aWR0aCAgICAgICAlTGVuZ3RoOyAgICAgICAjUkVRVUlSRUQNCi0gIGhlaWdodCAgICAgICVMZW5ndGg7ICAgICAgICNSRVFVSVJFRA0KLSAgYWxpZ24gICAgICAgJUltZ0FsaWduOyAgICAgI0lNUExJRUQNCi0gIGhzcGFjZSAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICB2c3BhY2UgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09IEltYWdlcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLQ0KLSAgIFRvIGF2b2lkIGFjY2Vzc2liaWxpdHkgcHJvYmxlbXMgZm9yIHBlb3BsZSB3aG8gYXJlbid0DQotICAgYWJsZSB0byBzZWUgdGhlIGltYWdlLCB5b3Ugc2hvdWxkIHByb3ZpZGUgYSB0ZXh0DQotICAgZGVzY3JpcHRpb24gdXNpbmcgdGhlIGFsdCBhbmQgbG9uZ2Rlc2MgYXR0cmlidXRlcy4NCi0gICBJbiBhZGRpdGlvbiwgYXZvaWQgdGhlIHVzZSBvZiBzZXJ2ZXItc2lkZSBpbWFnZSBtYXBzLg0KLS0tPg0KLQ0KLTwhRUxFTUVOVCBpbWcgRU1QVFk+DQotPCFBVFRMSVNUIGltZw0KLSAgJWF0dHJzOw0KLSAgc3JjICAgICAgICAgJVVSSTsgICAgICAgICAgI1JFUVVJUkVEDQotICBhbHQgICAgICAgICAlVGV4dDsgICAgICAgICAjUkVRVUlSRUQNCi0gIG5hbWUgICAgICAgIE5NVE9LRU4gICAgICAgICNJTVBMSUVEDQotICBsb25nZGVzYyAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgaGVpZ2h0ICAgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIHdpZHRoICAgICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICB1c2VtYXAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgaXNtYXAgICAgICAgKGlzbWFwKSAgICAgICAgI0lNUExJRUQNCi0gIGFsaWduICAgICAgICVJbWdBbGlnbjsgICAgICNJTVBMSUVEDQotICBib3JkZXIgICAgICAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgaHNwYWNlICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIHZzcGFjZSAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSB1c2VtYXAgcG9pbnRzIHRvIGEgbWFwIGVsZW1lbnQgd2hpY2ggbWF5IGJlIGluIHRoaXMgZG9jdW1lbnQNCi0gIG9yIGFuIGV4dGVybmFsIGRvY3VtZW50LCBhbHRob3VnaCB0aGUgbGF0dGVyIGlzIG5vdCB3aWRlbHkgc3VwcG9ydGVkIC0tPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT0gQ2xpZW50LXNpZGUgaW1hZ2UgbWFwcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBUaGVzZSBjYW4gYmUgcGxhY2VkIGluIHRoZSBzYW1lIGRvY3VtZW50IG9yIGdyb3VwZWQgaW4gYQ0KLSAgICAgc2VwYXJhdGUgZG9jdW1lbnQgYWx0aG91Z2ggdGhpcyBpc24ndCB5ZXQgd2lkZWx5IHN1cHBvcnRlZCAtLT4NCi0NCi08IUVMRU1FTlQgbWFwICgoJWJsb2NrOyB8IGZvcm0gfCAlbWlzYzspKyB8IGFyZWErKT4NCi08IUFUVExJU1QgbWFwDQotICAlaTE4bjsNCi0gICVldmVudHM7DQotICBpZCAgICAgICAgICBJRCAgICAgICAgICAgICAjUkVRVUlSRUQNCi0gIGNsYXNzICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBzdHlsZSAgICAgICAlU3R5bGVTaGVldDsgICAjSU1QTElFRA0KLSAgdGl0bGUgICAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gIG5hbWUgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIGFyZWEgRU1QVFk+DQotPCFBVFRMSVNUIGFyZWENCi0gICVhdHRyczsNCi0gIHNoYXBlICAgICAgICVTaGFwZTsgICAgICAgICJyZWN0Ig0KLSAgY29vcmRzICAgICAgJUNvb3JkczsgICAgICAgI0lNUExJRUQNCi0gIGhyZWYgICAgICAgICVVUkk7ICAgICAgICAgICNJTVBMSUVEDQotICBub2hyZWYgICAgICAobm9ocmVmKSAgICAgICAjSU1QTElFRA0KLSAgYWx0ICAgICAgICAgJVRleHQ7ICAgICAgICAgI1JFUVVJUkVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgYWNjZXNza2V5ICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gIG9uZm9jdXMgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmJsdXIgICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgdGFyZ2V0ICAgICAgJUZyYW1lVGFyZ2V0OyAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tPT09PT09PT09PT09PT09PSBGb3JtcyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPg0KLQ0KLTwhRUxFTUVOVCBmb3JtICVmb3JtLmNvbnRlbnQ7PiAgIDwhLS0gZm9ybXMgc2hvdWxkbid0IGJlIG5lc3RlZCAtLT4NCi0NCi08IUFUVExJU1QgZm9ybQ0KLSAgJWF0dHJzOw0KLSAgYWN0aW9uICAgICAgJVVSSTsgICAgICAgICAgI1JFUVVJUkVEDQotICBtZXRob2QgICAgICAoZ2V0fHBvc3QpICAgICAiZ2V0Ig0KLSAgbmFtZSAgICAgICAgTk1UT0tFTiAgICAgICAgI0lNUExJRUQNCi0gIGVuY3R5cGUgICAgICVDb250ZW50VHlwZTsgICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiDQotICBvbnN1Ym1pdCAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25yZXNldCAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIGFjY2VwdCAgICAgICVDb250ZW50VHlwZXM7ICNJTVBMSUVEDQotICBhY2NlcHQtY2hhcnNldCAlQ2hhcnNldHM7ICAjSU1QTElFRA0KLSAgdGFyZ2V0ICAgICAgJUZyYW1lVGFyZ2V0OyAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tDQotICBFYWNoIGxhYmVsIG11c3Qgbm90IGNvbnRhaW4gbW9yZSB0aGFuIE9ORSBmaWVsZA0KLSAgTGFiZWwgZWxlbWVudHMgc2hvdWxkbid0IGJlIG5lc3RlZC4NCi0tLT4NCi08IUVMRU1FTlQgbGFiZWwgJUlubGluZTs+DQotPCFBVFRMSVNUIGxhYmVsDQotICAlYXR0cnM7DQotICBmb3IgICAgICAgICBJRFJFRiAgICAgICAgICAjSU1QTElFRA0KLSAgYWNjZXNza2V5ICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gIG9uZm9jdXMgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmJsdXIgICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRU5USVRZICUgSW5wdXRUeXBlDQotICAiKHRleHQgfCBwYXNzd29yZCB8IGNoZWNrYm94IHwNCi0gICAgcmFkaW8gfCBzdWJtaXQgfCByZXNldCB8DQotICAgIGZpbGUgfCBoaWRkZW4gfCBpbWFnZSB8IGJ1dHRvbikiDQotICAgPg0KLQ0KLTwhLS0gdGhlIG5hbWUgYXR0cmlidXRlIGlzIHJlcXVpcmVkIGZvciBhbGwgYnV0IHN1Ym1pdCAmIHJlc2V0IC0tPg0KLQ0KLTwhRUxFTUVOVCBpbnB1dCBFTVBUWT4gICAgIDwhLS0gZm9ybSBjb250cm9sIC0tPg0KLTwhQVRUTElTVCBpbnB1dA0KLSAgJWF0dHJzOw0KLSAgdHlwZSAgICAgICAgJUlucHV0VHlwZTsgICAgInRleHQiDQotICBuYW1lICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgdmFsdWUgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIGNoZWNrZWQgICAgIChjaGVja2VkKSAgICAgICNJTVBMSUVEDQotICBkaXNhYmxlZCAgICAoZGlzYWJsZWQpICAgICAjSU1QTElFRA0KLSAgcmVhZG9ubHkgICAgKHJlYWRvbmx5KSAgICAgI0lNUExJRUQNCi0gIHNpemUgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICBtYXhsZW5ndGggICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgc3JjICAgICAgICAgJVVSSTsgICAgICAgICAgI0lNUExJRUQNCi0gIGFsdCAgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICB1c2VtYXAgICAgICAlVVJJOyAgICAgICAgICAjSU1QTElFRA0KLSAgdGFiaW5kZXggICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIGFjY2Vzc2tleSAgICVDaGFyYWN0ZXI7ICAgICNJTVBMSUVEDQotICBvbmZvY3VzICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25ibHVyICAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uc2VsZWN0ICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmNoYW5nZSAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgYWNjZXB0ICAgICAgJUNvbnRlbnRUeXBlczsgI0lNUExJRUQNCi0gIGFsaWduICAgICAgICVJbWdBbGlnbjsgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFFTEVNRU5UIHNlbGVjdCAob3B0Z3JvdXB8b3B0aW9uKSs+ICA8IS0tIG9wdGlvbiBzZWxlY3RvciAtLT4NCi08IUFUVExJU1Qgc2VsZWN0DQotICAlYXR0cnM7DQotICBuYW1lICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgc2l6ZSAgICAgICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIG11bHRpcGxlICAgIChtdWx0aXBsZSkgICAgICNJTVBMSUVEDQotICBkaXNhYmxlZCAgICAoZGlzYWJsZWQpICAgICAjSU1QTElFRA0KLSAgdGFiaW5kZXggICAgJU51bWJlcjsgICAgICAgI0lNUExJRUQNCi0gIG9uZm9jdXMgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmJsdXIgICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25jaGFuZ2UgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IUVMRU1FTlQgb3B0Z3JvdXAgKG9wdGlvbikrPiAgIDwhLS0gb3B0aW9uIGdyb3VwIC0tPg0KLTwhQVRUTElTVCBvcHRncm91cA0KLSAgJWF0dHJzOw0KLSAgZGlzYWJsZWQgICAgKGRpc2FibGVkKSAgICAgI0lNUExJRUQNCi0gIGxhYmVsICAgICAgICVUZXh0OyAgICAgICAgICNSRVFVSVJFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCBvcHRpb24gKCNQQ0RBVEEpPiAgICAgPCEtLSBzZWxlY3RhYmxlIGNob2ljZSAtLT4NCi08IUFUVExJU1Qgb3B0aW9uDQotICAlYXR0cnM7DQotICBzZWxlY3RlZCAgICAoc2VsZWN0ZWQpICAgICAjSU1QTElFRA0KLSAgZGlzYWJsZWQgICAgKGRpc2FibGVkKSAgICAgI0lNUExJRUQNCi0gIGxhYmVsICAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICB2YWx1ZSAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRUxFTUVOVCB0ZXh0YXJlYSAoI1BDREFUQSk+ICAgICA8IS0tIG11bHRpLWxpbmUgdGV4dCBmaWVsZCAtLT4NCi08IUFUVExJU1QgdGV4dGFyZWENCi0gICVhdHRyczsNCi0gIG5hbWUgICAgICAgIENEQVRBICAgICAgICAgICNJTVBMSUVEDQotICByb3dzICAgICAgICAlTnVtYmVyOyAgICAgICAjUkVRVUlSRUQNCi0gIGNvbHMgICAgICAgICVOdW1iZXI7ICAgICAgICNSRVFVSVJFRA0KLSAgZGlzYWJsZWQgICAgKGRpc2FibGVkKSAgICAgI0lNUExJRUQNCi0gIHJlYWRvbmx5ICAgIChyZWFkb25seSkgICAgICNJTVBMSUVEDQotICB0YWJpbmRleCAgICAlTnVtYmVyOyAgICAgICAjSU1QTElFRA0KLSAgYWNjZXNza2V5ICAgJUNoYXJhY3RlcjsgICAgI0lNUExJRUQNCi0gIG9uZm9jdXMgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICBvbmJsdXIgICAgICAlU2NyaXB0OyAgICAgICAjSU1QTElFRA0KLSAgb25zZWxlY3QgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uY2hhbmdlICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLQ0KLSAgVGhlIGZpZWxkc2V0IGVsZW1lbnQgaXMgdXNlZCB0byBncm91cCBmb3JtIGZpZWxkcy4NCi0gIE9ubHkgb25lIGxlZ2VuZCBlbGVtZW50IHNob3VsZCBvY2N1ciBpbiB0aGUgY29udGVudA0KLSAgYW5kIGlmIHByZXNlbnQgc2hvdWxkIG9ubHkgYmUgcHJlY2VkZWQgYnkgd2hpdGVzcGFjZS4NCi0tLT4NCi08IUVMRU1FTlQgZmllbGRzZXQgKCNQQ0RBVEEgfCBsZWdlbmQgfCAlYmxvY2s7IHwgZm9ybSB8ICVpbmxpbmU7IHwgJW1pc2M7KSo+DQotPCFBVFRMSVNUIGZpZWxkc2V0DQotICAlYXR0cnM7DQotICA+DQotDQotPCFFTlRJVFkgJSBMQWxpZ24gIih0b3B8Ym90dG9tfGxlZnR8cmlnaHQpIj4NCi0NCi08IUVMRU1FTlQgbGVnZW5kICVJbmxpbmU7PiAgICAgPCEtLSBmaWVsZHNldCBsYWJlbCAtLT4NCi08IUFUVExJU1QgbGVnZW5kDQotICAlYXR0cnM7DQotICBhY2Nlc3NrZXkgICAlQ2hhcmFjdGVyOyAgICAjSU1QTElFRA0KLSAgYWxpZ24gICAgICAgJUxBbGlnbjsgICAgICAgI0lNUExJRUQNCi0gID4NCi0NCi08IS0tDQotIENvbnRlbnQgaXMgJUZsb3c7IGV4Y2x1ZGluZyBhLCBmb3JtLCBmb3JtIGNvbnRyb2xzLCBpZnJhbWUNCi0tLT4gDQotPCFFTEVNRU5UIGJ1dHRvbiAlYnV0dG9uLmNvbnRlbnQ7PiAgPCEtLSBwdXNoIGJ1dHRvbiAtLT4NCi08IUFUVExJU1QgYnV0dG9uDQotICAlYXR0cnM7DQotICBuYW1lICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgdmFsdWUgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIHR5cGUgICAgICAgIChidXR0b258c3VibWl0fHJlc2V0KSAic3VibWl0Ig0KLSAgZGlzYWJsZWQgICAgKGRpc2FibGVkKSAgICAgI0lNUExJRUQNCi0gIHRhYmluZGV4ICAgICVOdW1iZXI7ICAgICAgICNJTVBMSUVEDQotICBhY2Nlc3NrZXkgICAlQ2hhcmFjdGVyOyAgICAjSU1QTElFRA0KLSAgb25mb2N1cyAgICAgJVNjcmlwdDsgICAgICAgI0lNUExJRUQNCi0gIG9uYmx1ciAgICAgICVTY3JpcHQ7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLSBzaW5nbGUtbGluZSB0ZXh0IGlucHV0IGNvbnRyb2wgKERFUFJFQ0FURUQpIC0tPg0KLTwhRUxFTUVOVCBpc2luZGV4IEVNUFRZPg0KLTwhQVRUTElTVCBpc2luZGV4DQotICAlY29yZWF0dHJzOw0KLSAgJWkxOG47DQotICBwcm9tcHQgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS09PT09PT09PT09PT09PT09PT09PT09PSBUYWJsZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+DQotDQotPCEtLSBEZXJpdmVkIGZyb20gSUVURiBIVE1MIHRhYmxlIHN0YW5kYXJkLCBzZWUgW1JGQzE5NDJdIC0tPg0KLQ0KLTwhLS0NCi0gVGhlIGJvcmRlciBhdHRyaWJ1dGUgc2V0cyB0aGUgdGhpY2tuZXNzIG9mIHRoZSBmcmFtZSBhcm91bmQgdGhlDQotIHRhYmxlLiBUaGUgZGVmYXVsdCB1bml0cyBhcmUgc2NyZWVuIHBpeGVscy4NCi0NCi0gVGhlIGZyYW1lIGF0dHJpYnV0ZSBzcGVjaWZpZXMgd2hpY2ggcGFydHMgb2YgdGhlIGZyYW1lIGFyb3VuZA0KLSB0aGUgdGFibGUgc2hvdWxkIGJlIHJlbmRlcmVkLiBUaGUgdmFsdWVzIGFyZSBub3QgdGhlIHNhbWUgYXMNCi0gQ0FMUyB0byBhdm9pZCBhIG5hbWUgY2xhc2ggd2l0aCB0aGUgdmFsaWduIGF0dHJpYnV0ZS4NCi0tLT4NCi08IUVOVElUWSAlIFRGcmFtZSAiKHZvaWR8YWJvdmV8YmVsb3d8aHNpZGVzfGxoc3xyaHN8dnNpZGVzfGJveHxib3JkZXIpIj4NCi0NCi08IS0tDQotIFRoZSBydWxlcyBhdHRyaWJ1dGUgZGVmaW5lcyB3aGljaCBydWxlcyB0byBkcmF3IGJldHdlZW4gY2VsbHM6DQotDQotIElmIHJ1bGVzIGlzIGFic2VudCB0aGVuIGFzc3VtZToNCi0gICAgICJub25lIiBpZiBib3JkZXIgaXMgYWJzZW50IG9yIGJvcmRlcj0iMCIgb3RoZXJ3aXNlICJhbGwiDQotLS0+DQotDQotPCFFTlRJVFkgJSBUUnVsZXMgIihub25lIHwgZ3JvdXBzIHwgcm93cyB8IGNvbHMgfCBhbGwpIj4NCi0gIA0KLTwhLS0gaG9yaXpvbnRhbCBwbGFjZW1lbnQgb2YgdGFibGUgcmVsYXRpdmUgdG8gZG9jdW1lbnQgLS0+DQotPCFFTlRJVFkgJSBUQWxpZ24gIihsZWZ0fGNlbnRlcnxyaWdodCkiPg0KLQ0KLTwhLS0gaG9yaXpvbnRhbCBhbGlnbm1lbnQgYXR0cmlidXRlcyBmb3IgY2VsbCBjb250ZW50cw0KLQ0KLSAgY2hhciAgICAgICAgYWxpZ25tZW50IGNoYXIsIGUuZy4gY2hhcj0nOicNCi0gIGNoYXJvZmYgICAgIG9mZnNldCBmb3IgYWxpZ25tZW50IGNoYXINCi0tLT4NCi08IUVOVElUWSAlIGNlbGxoYWxpZ24NCi0gICJhbGlnbiAgICAgIChsZWZ0fGNlbnRlcnxyaWdodHxqdXN0aWZ5fGNoYXIpICNJTVBMSUVEDQotICAgY2hhciAgICAgICAlQ2hhcmFjdGVyOyAgICAjSU1QTElFRA0KLSAgIGNoYXJvZmYgICAgJUxlbmd0aDsgICAgICAgI0lNUExJRUQiDQotICA+DQotDQotPCEtLSB2ZXJ0aWNhbCBhbGlnbm1lbnQgYXR0cmlidXRlcyBmb3IgY2VsbCBjb250ZW50cyAtLT4NCi08IUVOVElUWSAlIGNlbGx2YWxpZ24NCi0gICJ2YWxpZ24gICAgICh0b3B8bWlkZGxlfGJvdHRvbXxiYXNlbGluZSkgI0lNUExJRUQiDQotICA+DQotDQotPCFFTEVNRU5UIHRhYmxlDQotICAgICAoY2FwdGlvbj8sIChjb2wqfGNvbGdyb3VwKiksIHRoZWFkPywgdGZvb3Q/LCAodGJvZHkrfHRyKykpPg0KLTwhRUxFTUVOVCBjYXB0aW9uICAlSW5saW5lOz4NCi08IUVMRU1FTlQgdGhlYWQgICAgKHRyKSs+DQotPCFFTEVNRU5UIHRmb290ICAgICh0cikrPg0KLTwhRUxFTUVOVCB0Ym9keSAgICAodHIpKz4NCi08IUVMRU1FTlQgY29sZ3JvdXAgKGNvbCkqPg0KLTwhRUxFTUVOVCBjb2wgICAgICBFTVBUWT4NCi08IUVMRU1FTlQgdHIgICAgICAgKHRofHRkKSs+DQotPCFFTEVNRU5UIHRoICAgICAgICVGbG93Oz4NCi08IUVMRU1FTlQgdGQgICAgICAgJUZsb3c7Pg0KLQ0KLTwhQVRUTElTVCB0YWJsZQ0KLSAgJWF0dHJzOw0KLSAgc3VtbWFyeSAgICAgJVRleHQ7ICAgICAgICAgI0lNUExJRUQNCi0gIHdpZHRoICAgICAgICVMZW5ndGg7ICAgICAgICNJTVBMSUVEDQotICBib3JkZXIgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgZnJhbWUgICAgICAgJVRGcmFtZTsgICAgICAgI0lNUExJRUQNCi0gIHJ1bGVzICAgICAgICVUUnVsZXM7ICAgICAgICNJTVBMSUVEDQotICBjZWxsc3BhY2luZyAlTGVuZ3RoOyAgICAgICAjSU1QTElFRA0KLSAgY2VsbHBhZGRpbmcgJUxlbmd0aDsgICAgICAgI0lNUExJRUQNCi0gIGFsaWduICAgICAgICVUQWxpZ247ICAgICAgICNJTVBMSUVEDQotICBiZ2NvbG9yICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhRU5USVRZICUgQ0FsaWduICIodG9wfGJvdHRvbXxsZWZ0fHJpZ2h0KSI+DQotDQotPCFBVFRMSVNUIGNhcHRpb24NCi0gICVhdHRyczsNCi0gIGFsaWduICAgICAgICVDQWxpZ247ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCEtLQ0KLWNvbGdyb3VwIGdyb3VwcyBhIHNldCBvZiBjb2wgZWxlbWVudHMuIEl0IGFsbG93cyB5b3UgdG8gZ3JvdXANCi1zZXZlcmFsIHNlbWFudGljYWxseSByZWxhdGVkIGNvbHVtbnMgdG9nZXRoZXIuDQotLS0+DQotPCFBVFRMSVNUIGNvbGdyb3VwDQotICAlYXR0cnM7DQotICBzcGFuICAgICAgICAlTnVtYmVyOyAgICAgICAiMSINCi0gIHdpZHRoICAgICAgICVNdWx0aUxlbmd0aDsgICNJTVBMSUVEDQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgPg0KLQ0KLTwhLS0NCi0gY29sIGVsZW1lbnRzIGRlZmluZSB0aGUgYWxpZ25tZW50IHByb3BlcnRpZXMgZm9yIGNlbGxzIGluDQotIG9uZSBvciBtb3JlIGNvbHVtbnMuDQotDQotIFRoZSB3aWR0aCBhdHRyaWJ1dGUgc3BlY2lmaWVzIHRoZSB3aWR0aCBvZiB0aGUgY29sdW1ucywgZS5nLg0KLQ0KLSAgICAgd2lkdGg9NjQgICAgICAgIHdpZHRoIGluIHNjcmVlbiBwaXhlbHMNCi0gICAgIHdpZHRoPTAuNSogICAgICByZWxhdGl2ZSB3aWR0aCBvZiAwLjUNCi0NCi0gVGhlIHNwYW4gYXR0cmlidXRlIGNhdXNlcyB0aGUgYXR0cmlidXRlcyBvZiBvbmUNCi0gY29sIGVsZW1lbnQgdG8gYXBwbHkgdG8gbW9yZSB0aGFuIG9uZSBjb2x1bW4uDQotLS0+DQotPCFBVFRMSVNUIGNvbA0KLSAgJWF0dHJzOw0KLSAgc3BhbiAgICAgICAgJU51bWJlcjsgICAgICAgIjEiDQotICB3aWR0aCAgICAgICAlTXVsdGlMZW5ndGg7ICAjSU1QTElFRA0KLSAgJWNlbGxoYWxpZ247DQotICAlY2VsbHZhbGlnbjsNCi0gID4NCi0NCi08IS0tDQotICAgIFVzZSB0aGVhZCB0byBkdXBsaWNhdGUgaGVhZGVycyB3aGVuIGJyZWFraW5nIHRhYmxlDQotICAgIGFjcm9zcyBwYWdlIGJvdW5kYXJpZXMsIG9yIGZvciBzdGF0aWMgaGVhZGVycyB3aGVuDQotICAgIHRib2R5IHNlY3Rpb25zIGFyZSByZW5kZXJlZCBpbiBzY3JvbGxpbmcgcGFuZWwuDQotDQotICAgIFVzZSB0Zm9vdCB0byBkdXBsaWNhdGUgZm9vdGVycyB3aGVuIGJyZWFraW5nIHRhYmxlDQotICAgIGFjcm9zcyBwYWdlIGJvdW5kYXJpZXMsIG9yIGZvciBzdGF0aWMgZm9vdGVycyB3aGVuDQotICAgIHRib2R5IHNlY3Rpb25zIGFyZSByZW5kZXJlZCBpbiBzY3JvbGxpbmcgcGFuZWwuDQotDQotICAgIFVzZSBtdWx0aXBsZSB0Ym9keSBzZWN0aW9ucyB3aGVuIHJ1bGVzIGFyZSBuZWVkZWQNCi0gICAgYmV0d2VlbiBncm91cHMgb2YgdGFibGUgcm93cy4NCi0tLT4NCi08IUFUVExJU1QgdGhlYWQNCi0gICVhdHRyczsNCi0gICVjZWxsaGFsaWduOw0KLSAgJWNlbGx2YWxpZ247DQotICA+DQotDQotPCFBVFRMSVNUIHRmb290DQotICAlYXR0cnM7DQotICAlY2VsbGhhbGlnbjsNCi0gICVjZWxsdmFsaWduOw0KLSAgPg0KLQ0KLTwhQVRUTElTVCB0Ym9keQ0KLSAgJWF0dHJzOw0KLSAgJWNlbGxoYWxpZ247DQotICAlY2VsbHZhbGlnbjsNCi0gID4NCi0NCi08IUFUVExJU1QgdHINCi0gICVhdHRyczsNCi0gICVjZWxsaGFsaWduOw0KLSAgJWNlbGx2YWxpZ247DQotICBiZ2NvbG9yICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KLTwhLS0gU2NvcGUgaXMgc2ltcGxlciB0aGFuIGhlYWRlcnMgYXR0cmlidXRlIGZvciBjb21tb24gdGFibGVzIC0tPg0KLTwhRU5USVRZICUgU2NvcGUgIihyb3d8Y29sfHJvd2dyb3VwfGNvbGdyb3VwKSI+DQotDQotPCEtLSB0aCBpcyBmb3IgaGVhZGVycywgdGQgZm9yIGRhdGEgYW5kIGZvciBjZWxscyBhY3RpbmcgYXMgYm90aCAtLT4NCi0NCi08IUFUVExJU1QgdGgNCi0gICVhdHRyczsNCi0gIGFiYnIgICAgICAgICVUZXh0OyAgICAgICAgICNJTVBMSUVEDQotICBheGlzICAgICAgICBDREFUQSAgICAgICAgICAjSU1QTElFRA0KLSAgaGVhZGVycyAgICAgSURSRUZTICAgICAgICAgI0lNUExJRUQNCi0gIHNjb3BlICAgICAgICVTY29wZTsgICAgICAgICNJTVBMSUVEDQotICByb3dzcGFuICAgICAlTnVtYmVyOyAgICAgICAiMSINCi0gIGNvbHNwYW4gICAgICVOdW1iZXI7ICAgICAgICIxIg0KLSAgJWNlbGxoYWxpZ247DQotICAlY2VsbHZhbGlnbjsNCi0gIG5vd3JhcCAgICAgIChub3dyYXApICAgICAgICNJTVBMSUVEDQotICBiZ2NvbG9yICAgICAlQ29sb3I7ICAgICAgICAjSU1QTElFRA0KLSAgd2lkdGggICAgICAgJVBpeGVsczsgICAgICAgI0lNUExJRUQNCi0gIGhlaWdodCAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICA+DQotDQotPCFBVFRMSVNUIHRkDQotICAlYXR0cnM7DQotICBhYmJyICAgICAgICAlVGV4dDsgICAgICAgICAjSU1QTElFRA0KLSAgYXhpcyAgICAgICAgQ0RBVEEgICAgICAgICAgI0lNUExJRUQNCi0gIGhlYWRlcnMgICAgIElEUkVGUyAgICAgICAgICNJTVBMSUVEDQotICBzY29wZSAgICAgICAlU2NvcGU7ICAgICAgICAjSU1QTElFRA0KLSAgcm93c3BhbiAgICAgJU51bWJlcjsgICAgICAgIjEiDQotICBjb2xzcGFuICAgICAlTnVtYmVyOyAgICAgICAiMSINCi0gICVjZWxsaGFsaWduOw0KLSAgJWNlbGx2YWxpZ247DQotICBub3dyYXAgICAgICAobm93cmFwKSAgICAgICAjSU1QTElFRA0KLSAgYmdjb2xvciAgICAgJUNvbG9yOyAgICAgICAgI0lNUExJRUQNCi0gIHdpZHRoICAgICAgICVQaXhlbHM7ICAgICAgICNJTVBMSUVEDQotICBoZWlnaHQgICAgICAlUGl4ZWxzOyAgICAgICAjSU1QTElFRA0KLSAgPg0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0MjcyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQ2xhc3MtUGF0aDogCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9XRUItSU5GL2NsYXNzZXMvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvV0VCLUlORi9jbGFzc2VzLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L1dFQi1JTkYvbGliLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvV0VCLUlORi9saWIvLmtlZXBtZQorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L1dFQi1JTkYvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUxZDdjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvV0VCLUlORi93ZWIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx3ZWItYXBwIGlkPSJXZWJBcHBfSUQiIHZlcnNpb249IjIuNCIgeG1sbnM9Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZSBodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlL3dlYi1hcHBfMl80LnhzZCI+Ci0JPGRpc3BsYXktbmFtZT5idWdfMTQzMjA5PC9kaXNwbGF5LW5hbWU+Ci0JPHdlbGNvbWUtZmlsZS1saXN0PgotCQk8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLQkJPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotCQk8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0JPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9iYWRhdHRyaWJ1dGVuYW1lcy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L1dlYkNvbnRlbnQvYmFkYXR0cmlidXRlbmFtZXMuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTE1OTcwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC9iYWRhdHRyaWJ1dGVuYW1lcy5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5IGZha2VuYW1lPSIiPgotPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC91c2Vqc3BpbmF0dHJpYnV0ZS5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L3VzZWpzcGluYXR0cmlidXRlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YmQ1NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L3VzZWpzcGluYXR0cmlidXRlLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTx0aXRsZT5JbnNlcnQgdGl0bGUgaGVyZTwvdGl0bGU+Ci08L2hlYWQ+Ci08IS0tIGpzcCBleHByZXNzaW9uIGluIGF0dHJpYnV0ZSB2YWx1ZSAtLT4KLTxib2R5IGJnY29sb3I9IjwlPSJyZWQiICU+Ij4KLTwhLS0ganNwIGV4cHJlc3Npb24gaW4gYXR0cmlidXRlIG5hbWUgLS0+Ci08cCA8JT0iYWxpZ24iICU+PSJsZWZ0IiAvPgotPCEtLSBqc3AgZXhwcmVzc2lvbiBhcyBhdHRyaWJ1dGUgbmFtZSAmIHZhbHVlIC0tPgotPGEgPCU9ImhyZWY9J2h0dHA6Ly93d3cuZWNsaXBzZS5vcmcnIiAlPj5FY2xpcHNlIGxpbms8L2E+Ci08L2JvZHk+Ci08L2h0bWw+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L3VzZWpzcGluYXR0cmlidXRlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvV2ViQ29udGVudC91c2Vqc3BpbmF0dHJpYnV0ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1YmQ1NjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2UuanN0LmpzcC51aS50ZXN0cy90ZXN0ZmlsZXMvYnVnXzE0MzIwOS9XZWJDb250ZW50L3VzZWpzcGluYXR0cmlidXRlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPHRpdGxlPkluc2VydCB0aXRsZSBoZXJlPC90aXRsZT4KLTwvaGVhZD4KLTwhLS0ganNwIGV4cHJlc3Npb24gaW4gYXR0cmlidXRlIHZhbHVlIC0tPgotPGJvZHkgYmdjb2xvcj0iPCU9InJlZCIgJT4iPgotPCEtLSBqc3AgZXhwcmVzc2lvbiBpbiBhdHRyaWJ1dGUgbmFtZSAtLT4KLTxwIDwlPSJhbGlnbiIgJT49ImxlZnQiIC8+Ci08IS0tIGpzcCBleHByZXNzaW9uIGFzIGF0dHJpYnV0ZSBuYW1lICYgdmFsdWUgLS0+Ci08YSA8JT0iaHJlZj0naHR0cDovL3d3dy5lY2xpcHNlLm9yZyciICU+PkVjbGlwc2UgbGluazwvYT4KLTwvYm9keT4KLTwvaHRtbD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L2J1aWxkL2NsYXNzZXMvLmtlZXBtZSBiL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvYnVpbGQvY2xhc3Nlcy8ua2VlcG1lCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvc3JjLy5rZWVwbWUgYi90ZXN0cy9vcmcuZWNsaXBzZS5qc3QuanNwLnVpLnRlc3RzL3Rlc3RmaWxlcy9idWdfMTQzMjA5L3NyYy8ua2VlcG1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLmpzdC5qc3AudWkudGVzdHMvdGVzdGZpbGVzL2J1Z18xNDMyMDkvc3JjLy5rZWVwbWUKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUxYzhmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4ZTA0MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYnVpbGQueG1sCi1kZXYucHJvcGVydGllcwotdGVtcC5mb2xkZXIKLWNzc2NvcmV0ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ3OTdkYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlNjM0MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4xMDAucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBjc3Njb3JldGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuQ1NTQ29yZVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLmZvcm1hdCwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuZm9ybWF0LnRlc3RmaWxlcywKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZSwKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudGVzdGZpbGVzLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy50ZXN0ZmlsZXMucmVzdWx0cywKLSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5qdW5pdAotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYzU5ODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5NYXkgMiwgMjAwNjwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzkzYTlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIGNzc2NvcmV0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgc3JjLyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotamFycy5jb21waWxlLm9yZGVyID0gY3NzY29yZXRlc3RzLmphcgotc291cmNlLmNzc2NvcmV0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuY3NzY29yZXRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGUxMzBhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gQ1NTIENvcmUgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NBbGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjE1NzBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0FsbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLmZvcm1hdC5UZXN0Q2xlYW51cFByb2Nlc3NvckNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuZm9ybWF0LlRlc3RGb3JtYXRQcm9jZXNzb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLkNTU0NoYXJzZXRSdWxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTRm9udEZhY2VSdWxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTSW1wb3J0UnVsZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLkNTU01lZGlhUnVsZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsLkNTU1BhZ2VSdWxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTU3R5bGVSdWxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWwuQ1NTU3R5bGVTaGVldFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZS5DU1NTZWxlY3RvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZS5DU1NTb3VyY2VQYXJzZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2UuQ1NTVGV4dFBhcnNlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnNvdXJjZS5DU1NVcmxUZXN0OwotCi0KLXB1YmxpYyBjbGFzcyBDU1NBbGxUZXN0cyBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlUZXN0U3VpdGUgc3VpdGUgPSBuZXcgVGVzdFN1aXRlKCJTU0UgTW9kZWwgQ1NTIFRlc3RzIik7Ci0KLQkJYWRkU291cmNlVGVzdHMoc3VpdGUpOwotCQlhZGRNb2RlbFRlc3RzKHN1aXRlKTsKLQotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTQ29yZVByZWZlcmVuY2VzVGVzdC5jbGFzcyk7Ci0JCXJldHVybiBzdWl0ZTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGFkZFNvdXJjZVRlc3RzKFRlc3RTdWl0ZSBzdWl0ZSkgewotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTU291cmNlUGFyc2VyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NUZXh0UGFyc2VyVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NTZWxlY3RvclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTVXJsVGVzdC5jbGFzcyk7Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBhZGRNb2RlbFRlc3RzKFRlc3RTdWl0ZSBzdWl0ZSkgewotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTU3R5bGVTaGVldFRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTQ2hhcnNldFJ1bGVUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU0ltcG9ydFJ1bGVUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENTU1N0eWxlUnVsZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTTWVkaWFSdWxlVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShDU1NQYWdlUnVsZVRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ1NTRm9udEZhY2VSdWxlVGVzdC5jbGFzcyk7Ci0JCXN1aXRlLmFkZFRlc3RTdWl0ZShUZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTLmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKFRlc3RDbGVhbnVwUHJvY2Vzc29yQ1NTLmNsYXNzKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTMwZDNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL0NTU0NvcmVQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuRGVmYXVsdFNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JbnN0YW5jZVNjb3BlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5DU1NDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5DU1NEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuQ1NTQ29yZVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckNTUzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklFbmNvZGVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuUHJlZmVyZW5jZXM7Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIFhNTCBTb3VyY2UgZWRpdG9yCi0gKiBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIENTU0NvcmVQcmVmZXJlbmNlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogVGVzdHMgZXhpc3RhbmNlIG9mIHByZWZlcmVuY2UgdmFsdWVzIHdoZW4gZ2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcwotCSAqIHRocm91Z2ggUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVuZGxlR2V0UHJlZmVyZW5jZXMoKSB7Ci0JCWZpbmFsIFN0cmluZyBidW5kbGVOYW1lID0gIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9Ci0JCWNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX1NJWkUpOwotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuTElORV9XSURUSCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1bmRsZUdldFByZWZlcmVuY2UoU3RyaW5nIGJ1bmRsZU5hbWUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWludCBkZWZhdWx0VmFsdWUgPSAtMTsKLQotCQlpbnQgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRJbnQoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiICsgcHJlZktleSwgZGVmYXVsdFZhbHVlICE9IHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSA9IG5ldyBEZWZhdWx0U2NvcGUoKS5nZXROb2RlKENTU0NvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShub2RlLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNBU0VfSURFTlRJRklFUiwgIjIiKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLlRBQik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkvLyBzdHJpbmcKLQotCQlTdHJpbmcgdGhlRGVmYXVsdFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgZGVmYXVsdFZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgdGhlRGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKENTU0NvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihub2RlLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLldSQVBQSU5HX09ORV9QRVJfTElORSk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VJbnQobm9kZSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DQVNFX1BST1BFUlRZX05BTUUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWJvb2xlYW4gb3JpZ2luYWxWYWx1ZSA9IGZhbHNlOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSB0cnVlOwotCi0JCVN0cmluZyBvcmlnaW5hbFN0cmluZyA9IG5vZGUuZ2V0KHByZWZLZXksICJib2d1cyIpOwotCQlpZiAoISJib2d1cyIuZXF1YWxzKG9yaWdpbmFsU3RyaW5nKSkgewotCQkJb3JpZ2luYWxWYWx1ZSA9IEJvb2xlYW4udmFsdWVPZihvcmlnaW5hbFN0cmluZykuYm9vbGVhblZhbHVlKCk7Ci0JCQlleHBlY3RlZFZhbHVlID0gIW9yaWdpbmFsVmFsdWU7Ci0JCX0KLQkJbm9kZS5wdXRCb29sZWFuKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlib29sZWFuIGZvdW5kVmFsdWUgPSBub2RlLmdldEJvb2xlYW4ocHJlZktleSwgdHJ1ZSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJaWYgKCJib2d1cyIuZXF1YWxzKG9yaWdpbmFsU3RyaW5nKSkKLQkJCW5vZGUucmVtb3ZlKHByZWZLZXkpOwotCQllbHNlCi0JCQlub2RlLnB1dChwcmVmS2V5LCBvcmlnaW5hbFN0cmluZyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VJbnQoSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSkgewotCQlpbnQgb3JpZ2luYWxWYWx1ZSA9IG5vZGUuZ2V0SW50KHByZWZLZXksIC05OTkpOwotCQlpbnQgZXhwZWN0ZWRWYWx1ZSA9IC04ODg7Ci0JCW5vZGUucHV0SW50KHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlpbnQgZm91bmRWYWx1ZSA9IG5vZGUuZ2V0SW50KHByZWZLZXksIC05OTkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmIChvcmlnaW5hbFZhbHVlID09IC05OTkpCi0JCQlub2RlLnJlbW92ZShwcmVmS2V5KTsKLQkJZWxzZQotCQkJbm9kZS5wdXRJbnQocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgbGluZSBkZWxpbWl0ZXIgcHJlZmVyZW5jZXMgYnkgbWFraW5nIHN1cmUgZG9jdW1lbnQgY3JlYXRlZAotCSAqIGZvbGxvd3MgbGluZSBkZWxpbWl0ZXIgcHJlZmVyZW5jZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVsaW1pdGVyUHJlZmVyZW5jZXMoKSB7Ci0JCS8vIGNoZWNrIGlmIGNvbnRlbnQgdHlwZSBwcmVmZXJlbmNlcyBtYXRjaAotCQlTdHJpbmcgcHJlZmVycmVkRGVsaW1pdGVyID0gQ29udGVudFR5cGVFbmNvZGluZ1ByZWZlcmVuY2VzLmdldFByZWZlcnJlZE5ld0xpbmVEZWxpbWl0ZXIoQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUyk7Ci0JCVByZWZlcmVuY2VzIHByZWZzID0gQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkuZ2V0UHJlZmVyZW5jZXMoQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUyk7Ci0JCVN0cmluZyBnYXRld2F5RGVsaW1pdGVyID0gcHJlZnMuZ2V0KENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoIkNvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlcyBhbmQgQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkgcHJlZmVyZW5jZXMgZG8gbm90IG1hdGNoIiwgZ2F0ZXdheURlbGltaXRlciwgcHJlZmVycmVkRGVsaW1pdGVyKTsKLQotCQkvLyBzZXQgYSBwYXJ0aWN1bGFyIGxpbmUgZGVsaW1pdGVyCi0JCXByZWZzLnB1dChDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFLCBDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5MRik7Ci0KLQkJLy8gY3JlYXRlIGRvY3VtZW50Ci0JCUNTU0RvY3VtZW50TG9hZGVyIGxvYWRlciA9IG5ldyBDU1NEb2N1bWVudExvYWRlcigpOwotCQlJRW5jb2RlZERvY3VtZW50IGRvY3VtZW50ID0gbG9hZGVyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudCgpOwotCQlTdHJpbmcgZG9jdW1lbnREZWxpbWl0ZXIgPSBkb2N1bWVudC5nZXRQcmVmZXJyZWRMaW5lRGVsaW1pdGVyKCk7Ci0KLQkJLy8gdmVyaWZ5IGRlbGltaXRlciBpbiBkb2N1bWVudCBtYXRjaGVzIHByZWZlcmVuY2UKLQkJYXNzZXJ0RXF1YWxzKCJEZWxpbWl0ZXIgaW4gZG9jdW1lbnQgZG9lcyBub3QgbWF0Y2ggcHJlZmVyZW5jZSIsIENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLlNUUklOR19MRiwgZG9jdW1lbnREZWxpbWl0ZXIpOwotCi0JCS8vIHJldHVybiB0byBvcmlnaW5hbCBwcmVmZXJlbmNlCi0JCXByZWZzLnJlbW92ZShDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYjQ3YTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQ29yZVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0KLS8qKgotICogQGF1dGhvciBwYXZlcnkKLSAqLwotcHVibGljIGNsYXNzIENTU0NvcmVUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IENTU0NvcmVUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgQ1NTQ29yZVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkNTUyBDb3JlIFRlc3RzIik7Ci0KLQkJYWRkVGVzdChDU1NBbGxUZXN0cy5zdWl0ZSgpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvQ1NTQ29yZVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTlkYzUxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9DU1NDb3JlVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzOwotCi1pbXBvcnQgamF2YS51dGlsLk1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgQ1NTQ29yZVRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvLyBUaGUgc2hhcmVkIGluc3RhbmNlLgotCXByaXZhdGUgc3RhdGljIENTU0NvcmVUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy8gUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIENTU0NvcmVUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQkJdHJ5IHsKLQkJCXJlc291cmNlQnVuZGxlID0gUmVzb3VyY2VCdW5kbGUuZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuQ1NTTW9kZWxUZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgQ1NTQ29yZVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwgb3IgJ2tleScgaWYgbm90Ci0JICogZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBDU1NDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC9UZXN0Q2xlYW51cFByb2Nlc3NvckNTUy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RDbGVhbnVwUHJvY2Vzc29yQ1NTLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2Yzc1YjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RDbGVhbnVwUHJvY2Vzc29yQ1NTLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNyBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuZm9ybWF0OwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuQ1NTQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY2xlYW51cC5DU1NDbGVhbnVwU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNsZWFudXAuQ1NTQ2xlYW51cFN0cmF0ZWd5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY2xlYW51cC5DbGVhbnVwUHJvY2Vzc29yQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcmVmZXJlbmNlcy5DU1NDb3JlUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLlN0cmluZ0NvbXBhcmVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotCi1wdWJsaWMgY2xhc3MgVGVzdENsZWFudXBQcm9jZXNzb3JDU1MgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFVURl84ID0gIlVURi04IjsKLQlwcml2YXRlIFN0cmluZ0NvbXBhcmVVdGlsIGZTdHJpbmdDb21wYXJlVXRpbDsKLQlwcml2YXRlIENsZWFudXBQcm9jZXNzb3JDU1MgZkNsZWFudXBQcm9jZXNzb3I7Ci0KLQlwcml2YXRlIGJvb2xlYW4gZk9sZENsZWFyQmxhbmtMaW5lc1ByZWY7Ci0JcHJpdmF0ZSBpbnQgZk9sZE1heExpbmVXaWR0aFByZWY7Ci0JcHJpdmF0ZSBTdHJpbmcgZk9sZEluZGVudGF0aW9uQ2hhclByZWY7Ci0JcHJpdmF0ZSBpbnQgZk9sZEluZGVudGF0aW9uU2l6ZVByZWY7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBzZXQgdXAgcHJlZmVyZW5jZXMKLQkJUHJlZmVyZW5jZXMgcHJlZnMgPSBDU1NDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpOwotCQlmT2xkQ2xlYXJCbGFua0xpbmVzUHJlZiA9IHByZWZzLmdldEJvb2xlYW4oQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DTEVBUl9BTExfQkxBTktfTElORVMpOwotCQlmT2xkTWF4TGluZVdpZHRoUHJlZiA9IHByZWZzLmdldEludChDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkxJTkVfV0lEVEgpOwotCQlmT2xkSW5kZW50YXRpb25DaGFyUHJlZiA9IHByZWZzLmdldFN0cmluZyhDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX0NIQVIpOwotCQlmT2xkSW5kZW50YXRpb25TaXplUHJlZiA9IHByZWZzLmdldEludChDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX1NJWkUpOwotCi0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0xFQVJfQUxMX0JMQU5LX0xJTkVTLCBmYWxzZSk7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuTElORV9XSURUSCwgNzIpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX0NIQVIsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuVEFCKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9TSVpFLCAxKTsKLQotCQlmQ2xlYW51cFByb2Nlc3NvciA9IG5ldyBDbGVhbnVwUHJvY2Vzc29yQ1NTKCk7Ci0JCWZTdHJpbmdDb21wYXJlVXRpbCA9IG5ldyBTdHJpbmdDb21wYXJlVXRpbCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIHJlc3RvcmUgb2xkIHByZWZlcmVuY2VzCi0JCVByZWZlcmVuY2VzIHByZWZzID0gQ1NTQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DTEVBUl9BTExfQkxBTktfTElORVMsIGZPbGRDbGVhckJsYW5rTGluZXNQcmVmKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRILCBmT2xkTWF4TGluZVdpZHRoUHJlZik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fQ0hBUiwgZk9sZEluZGVudGF0aW9uQ2hhclByZWYpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX1NJWkUsIGZPbGRJbmRlbnRhdGlvblNpemVQcmVmKTsKLQl9Ci0KLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgbW9kZWwgKGZyb20gZWRpdCkgYWZ0ZXIKLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiAgICAgICAgICAgIHJlbGF0aXZlIHRvIHRoaXMgY2xhc3MgKFRlc3RDbGVhbnVwUHJvY2Vzc29yQ1NTKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQl0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDYW4ndCBmaWxlIHJlc291cmNlIHN0cmVhbSAiICsgZmlsZW5hbWUpOwotCQkJZmluYWwgU3RyaW5nIGJhc2VGaWxlID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZShmaWxlbmFtZSkudG9TdHJpbmcoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChiYXNlRmlsZSwgaW5TdHJlYW0sIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgdm9pZCBjbGVhbnVwQW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIGJlZm9yZU1vZGVsID0gbnVsbCwgYWZ0ZXJNb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQliZWZvcmVNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChiZWZvcmVQYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIGZvciA6ICIgKyBiZWZvcmVQYXRoLCBiZWZvcmVNb2RlbCk7Ci0KLQkJCWFmdGVyTW9kZWwgPSBnZXRNb2RlbEZvckVkaXQoYWZ0ZXJQYXRoKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIGZvciA6ICIgKyBhZnRlclBhdGgsIGFmdGVyTW9kZWwpOwotCi0JCQlmQ2xlYW51cFByb2Nlc3Nvci5jbGVhbnVwTW9kZWwoYmVmb3JlTW9kZWwpOwotCi0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gY2xlYW5lZHVwQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQliZWZvcmVNb2RlbC5zYXZlKGNsZWFuZWR1cEJ5dGVzKTsgLy8gImJlZm9yZU1vZGVsIiBzaG91bGQgbm93IGJlCi0JCQkvLyBhZnRlciB0aGUgY2xlYW51cCBwcm9jZXNzb3IKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFmdGVyQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQlhZnRlck1vZGVsLnNhdmUoYWZ0ZXJCeXRlcyk7Ci0KLQkJCVN0cmluZyBjbGVhbmVkdXBDb250ZW50cyA9IG5ldyBTdHJpbmcoYWZ0ZXJCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlTdHJpbmcgZXhwZWN0ZWRDb250ZW50cyA9IG5ldyBTdHJpbmcoY2xlYW5lZHVwQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCQkJYXNzZXJ0VHJ1ZSgiQ2xlYW51cCBkb2N1bWVudCBkaWZmZXJzIGZyb20gdGhlIGV4cGVjdGVkIiwgZlN0cmluZ0NvbXBhcmVVdGlsLmVxdWFsc0lnbm9yZUxpbmVTZXBlcmF0b3IoY2xlYW5lZHVwQ29udGVudHMsIGV4cGVjdGVkQ29udGVudHMpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChiZWZvcmVNb2RlbCAhPSBudWxsKQotCQkJCWJlZm9yZU1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJaWYgKGFmdGVyTW9kZWwgIT0gbnVsbCkKLQkJCQlhZnRlck1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEJVRzE2NjkwOXVybENhc2VDbGVhbnVwKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gc2V0IHVwIGNsZWFudXAgcHJlZmVyZW5jZXMgZm9yIHRoaXMgdGVzdAotCQlDU1NDbGVhbnVwU3RyYXRlZ3kgY3VycmVudFN0cmF0ZWd5ID0gQ1NTQ2xlYW51cFN0cmF0ZWd5SW1wbC5nZXRJbnN0YW5jZSgpOwotCQlzaG9ydCBvbGRDYXNlSWRlbnRpZmllciA9IGN1cnJlbnRTdHJhdGVneS5nZXRJZGVudENhc2UoKTsKLQkJc2hvcnQgb2xkQ2FzZVByb3BlcnR5TmFtZSA9IGN1cnJlbnRTdHJhdGVneS5nZXRQcm9wTmFtZUNhc2UoKTsKLQkJc2hvcnQgb2xkQ2FzZVByb3BlcnR5VmFsdWUgPSBjdXJyZW50U3RyYXRlZ3kuZ2V0UHJvcFZhbHVlQ2FzZSgpOwotCQlzaG9ydCBvbGRDYXNlU2VsZWN0b3IgPSBjdXJyZW50U3RyYXRlZ3kuZ2V0U2VsZWN0b3JUYWdDYXNlKCk7Ci0JCWJvb2xlYW4gb2xkRm9ybWF0U291cmNlID0gY3VycmVudFN0cmF0ZWd5LmlzRm9ybWF0U291cmNlKCk7Ci0JCWJvb2xlYW4gb2xkRm9ybWF0UXVvdGUgPSBjdXJyZW50U3RyYXRlZ3kuaXNRdW90ZVZhbHVlcygpOwotCi0JCWN1cnJlbnRTdHJhdGVneS5zZXRJZGVudENhc2UoQ1NTQ2xlYW51cFN0cmF0ZWd5LkxPV0VSKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFByb3BOYW1lQ2FzZShDU1NDbGVhbnVwU3RyYXRlZ3kuTE9XRVIpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0UHJvcFZhbHVlQ2FzZShDU1NDbGVhbnVwU3RyYXRlZ3kuTE9XRVIpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0U2VsZWN0b3JUYWdDYXNlKENTU0NsZWFudXBTdHJhdGVneS5MT1dFUik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRGb3JtYXRTb3VyY2UodHJ1ZSk7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRRdW90ZVZhbHVlcyhmYWxzZSk7Ci0KLQkJY2xlYW51cEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2J1ZzE2NjkwOS11cmxjYXNlLmNzcyIsICJ0ZXN0ZmlsZXMvYnVnMTY2OTA5LXVybGNhc2UtY2xlYW5lZC5jc3MiKTsKLQotCQljdXJyZW50U3RyYXRlZ3kuc2V0SWRlbnRDYXNlKG9sZENhc2VJZGVudGlmaWVyKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFByb3BOYW1lQ2FzZShvbGRDYXNlUHJvcGVydHlOYW1lKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFByb3BWYWx1ZUNhc2Uob2xkQ2FzZVByb3BlcnR5VmFsdWUpOwotCQljdXJyZW50U3RyYXRlZ3kuc2V0U2VsZWN0b3JUYWdDYXNlKG9sZENhc2VTZWxlY3Rvcik7Ci0JCWN1cnJlbnRTdHJhdGVneS5zZXRGb3JtYXRTb3VyY2Uob2xkRm9ybWF0U291cmNlKTsKLQkJY3VycmVudFN0cmF0ZWd5LnNldFF1b3RlVmFsdWVzKG9sZEZvcm1hdFF1b3RlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvVGVzdEZvcm1hdFByb2Nlc3NvckNTUy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JDU1MuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEyZmRmNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvVGVzdEZvcm1hdFByb2Nlc3NvckNTUy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLmZvcm1hdDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLkNTU0NvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmZvcm1hdC5Gb3JtYXRQcm9jZXNzb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkNTU0NvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuU3RyaW5nQ29tcGFyZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVVEZfOCA9ICJVVEYtOCI7Ci0JcHJpdmF0ZSBTdHJpbmdDb21wYXJlVXRpbCBmU3RyaW5nQ29tcGFyZVV0aWw7Ci0JcHJpdmF0ZSBGb3JtYXRQcm9jZXNzb3JDU1MgZm9ybWF0UHJvY2Vzc29yOwotCi0JcHJpdmF0ZSBib29sZWFuIGZPbGRDbGVhckJsYW5rTGluZXNQcmVmOwotCXByaXZhdGUgaW50IGZPbGRNYXhMaW5lV2lkdGhQcmVmOwotCXByaXZhdGUgU3RyaW5nIGZPbGRJbmRlbnRhdGlvbkNoYXJQcmVmOwotCXByaXZhdGUgaW50IGZPbGRJbmRlbnRhdGlvblNpemVQcmVmOwotCi0JcHVibGljIFRlc3RGb3JtYXRQcm9jZXNzb3JDU1MoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gc2V0IHVwIHByZWZlcmVuY2VzCi0JCVByZWZlcmVuY2VzIHByZWZzID0gQ1NTQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJZk9sZENsZWFyQmxhbmtMaW5lc1ByZWYgPSBwcmVmcy5nZXRCb29sZWFuKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0xFQVJfQUxMX0JMQU5LX0xJTkVTKTsKLQkJZk9sZE1heExpbmVXaWR0aFByZWYgPSBwcmVmcy5nZXRJbnQoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRIKTsKLQkJZk9sZEluZGVudGF0aW9uQ2hhclByZWYgPSBwcmVmcy5nZXRTdHJpbmcoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSKTsKLQkJZk9sZEluZGVudGF0aW9uU2l6ZVByZWYgPSBwcmVmcy5nZXRJbnQoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9TSVpFKTsKLQotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNMRUFSX0FMTF9CTEFOS19MSU5FUywgZmFsc2UpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkxJTkVfV0lEVEgsIDcyKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSLCBDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLlRBQik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSwgMSk7Ci0KLQkJZm9ybWF0UHJvY2Vzc29yID0gbmV3IEZvcm1hdFByb2Nlc3NvckNTUygpOwotCQlmU3RyaW5nQ29tcGFyZVV0aWwgPSBuZXcgU3RyaW5nQ29tcGFyZVV0aWwoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyByZXN0b3JlIG9sZCBwcmVmZXJlbmNlcwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENTU0NvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCk7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0xFQVJfQUxMX0JMQU5LX0xJTkVTLCBmT2xkQ2xlYXJCbGFua0xpbmVzUHJlZik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuTElORV9XSURUSCwgZk9sZE1heExpbmVXaWR0aFByZWYpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLklOREVOVEFUSU9OX0NIQVIsIGZPbGRJbmRlbnRhdGlvbkNoYXJQcmVmKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9TSVpFLCBmT2xkSW5kZW50YXRpb25TaXplUHJlZik7Ci0JfQotCi0JLyoqCi0JICogbXVzdCByZWxlYXNlIG1vZGVsIChmcm9tIGVkaXQpIGFmdGVyCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogICAgICAgICAgICByZWxhdGl2ZSB0byB0aGlzIGNsYXNzIChUZXN0Rm9ybWF0UHJvY2Vzc29yQ1NTKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQl0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDYW4ndCBmaWxlIHJlc291cmNlIHN0cmVhbSAiICsgZmlsZW5hbWUpOwotCQkJZmluYWwgU3RyaW5nIGJhc2VGaWxlID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZShmaWxlbmFtZSkudG9TdHJpbmcoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChiYXNlRmlsZSwgaW5TdHJlYW0sIG51bGwpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgdm9pZCBmb3JtYXRBbmRBc3NlcnRFcXVhbHMoU3RyaW5nIGJlZm9yZVBhdGgsIFN0cmluZyBhZnRlclBhdGgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgYmVmb3JlTW9kZWwgPSBudWxsLCBhZnRlck1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWJlZm9yZU1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGJlZm9yZVBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGJlZm9yZVBhdGgsIGJlZm9yZU1vZGVsKTsKLQotCQkJYWZ0ZXJNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChhZnRlclBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGFmdGVyUGF0aCwgYWZ0ZXJNb2RlbCk7Ci0KLQkJCWZvcm1hdFByb2Nlc3Nvci5mb3JtYXRNb2RlbChiZWZvcmVNb2RlbCk7Ci0KLQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBmb3JtYXR0ZWRCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWJlZm9yZU1vZGVsLnNhdmUoZm9ybWF0dGVkQnl0ZXMpOyAvLyAiYmVmb3JlTW9kZWwiIHNob3VsZCBub3cgYmUKLQkJCS8vIGFmdGVyIHRoZSBmb3JtYXR0ZXIKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGFmdGVyQnl0ZXMgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0JCQlhZnRlck1vZGVsLnNhdmUoYWZ0ZXJCeXRlcyk7Ci0KLQkJCVN0cmluZyBmb3JtYXR0ZWRDb250ZW50cyA9IG5ldyBTdHJpbmcoYWZ0ZXJCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlTdHJpbmcgZXhwZWN0ZWRDb250ZW50cyA9IG5ldyBTdHJpbmcoZm9ybWF0dGVkQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCQkJYXNzZXJ0VHJ1ZSgiRm9ybWF0dGVkIGRvY3VtZW50IGRpZmZlcnMgZnJvbSB0aGUgZXhwZWN0ZWQiLCBmU3RyaW5nQ29tcGFyZVV0aWwuZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihmb3JtYXR0ZWRDb250ZW50cywgZXhwZWN0ZWRDb250ZW50cykpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGJlZm9yZU1vZGVsICE9IG51bGwpCi0JCQkJYmVmb3JlTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoYWZ0ZXJNb2RlbCAhPSBudWxsKQotCQkJCWFmdGVyTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QlVHNzM5OTBTZWxlY3RvckZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX3VuZm9ybWF0dGVkLmNzcyIsICJ0ZXN0ZmlsZXMvQlVHNzM5OTBfc2VsZWN0b3JfZm9ybWF0dGVkLmNzcyIpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGNhc2Ugd2hlbiBmb3JtYXQgd291bGQgaW5jb3JyZWN0bHkgYWRkIGV4dHJhIHNlbWljb2xvbnMuCi0JICogCi0JICogQHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQ29yZUV4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCVUcxMTE1NjlleHRyYVNlbWljb2xvbkZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2J1ZzExMTU2OS1leHRyYXNlbWljb2xvbi5jc3MiLCAidGVzdGZpbGVzL2J1ZzExMTU2OS1leHRyYXNlbWljb2xvbi1mb3JtYXR0ZWQuY3NzIik7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgY2FzZSB3aGVuIGZvcm1hdCB3b3VsZCBpbmNvcnJlY3RseSBhZGQgc3BhY2UgYmV0d2VlbiBzZWxlY3RvciBhbmQKLQkgKiBhdHRyaWJ1dGUgc2VsZWN0b3JzIDxjb2RlPmlucHV0W3R5cGU9ImhpZGRlbiJdPC9jb2RlPiB3b3VsZCBiZQotCSAqIHdyb25nbHkgZm9ybWF0dGVkIGFzPGNvZGU+aW5wdXQgW3R5cGU9ImhpZGRlbiJdPC9jb2RlPiBpbnN0ZWFkIG9mCi0JICogYmVpbmcgbGVmdCBhbG9uZS4KLQkgKiAKLQkgKiBAdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJVRzE0NjE5OGF0dHJpYnV0ZVNwZWNpZmllckZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL2J1ZzE0NjE5OC1hdHRyaWJ1dGVzcGVjaWZpZXIuY3NzIiwgInRlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLWZvcm1hdHRlZC5jc3MiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEJVRzExMDUzOW11bHRpcGxlQ2xhc3NGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy5jc3MiLCAidGVzdGZpbGVzL2J1ZzExMDUzOS1tdWx0aXBsZWNsYXNzLWZvcm1hdHRlZC5jc3MiKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX2Zvcm1hdHRlZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL0JVRzczOTkwX3NlbGVjdG9yX2Zvcm1hdHRlZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZkYTZmZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9CVUc3Mzk5MF9zZWxlY3Rvcl9mb3JtYXR0ZWQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyogQ2xhc3MgYXMgc2VsZWN0b3IgKi8NCi1IMS5wYXN0b3JhbCB7DQotCWNvbG9yOiAjMDBGRjAwDQotfQ0KLQ0KLS8qIElEIGFzIHNlbGVjdG9yICovDQotI3o5OHkgew0KLQlsZXR0ZXItc3BhY2luZzogMC4zZW0NCi19DQotDQotSDEjejk4eSB7DQotCWxldHRlci1zcGFjaW5nOiAwLjVlbQ0KLX0NCi0NCi0vKiBDb250ZXh0dWFsIHNlbGVjdG9ycyAqLw0KLURJViBQIHsNCi0JZm9udDogc21hbGwgc2Fucy1zZXJpZg0KLX0NCi0NCi0ucmVkZGlzaCBIMSB7DQotCWNvbG9yOiByZWQNCi19DQotDQotI3g3OHkgQ09ERSB7DQotCWJhY2tncm91bmQ6IGJsdWUNCi19DQotDQotRElWLnNpZGVub3RlIEgxIHsNCi0JZm9udC1zaXplOiBsYXJnZQ0KLX0NCi0NCi0vKiBBbmNob3IgcHNldWRvLWNsYXNzZXMgKi8NCi1BOmxpbmsgew0KLQljb2xvcjogcmVkDQotfSAgLyogdW52aXNpdGVkIGxpbmsgKi8NCi1BOnZpc2l0ZWQgew0KLQljb2xvcjogYmx1ZQ0KLX0gIC8qIHZpc2l0ZWQgbGlua3MgKi8NCi1BOmFjdGl2ZSB7DQotCWNvbG9yOiBsaW1lDQotfSAgLyogYWN0aXZlIGxpbmtzICovIC8qIFBzZXVkby1jbGFzcyBjb21iaW5lZCB3aXRoIG5vcm1hbCBjbGFzcyAqLw0KLUEuZXh0ZXJuYWw6dmlzaXRlZCB7DQotCWNvbG9yOiBibHVlDQotfQ0KLQ0KLS8qICdmaXJzdC1saW5lJyBwc2V1ZG8tZWxlbWVudCAqLw0KLVA6Zmlyc3QtbGluZSB7DQotCWZvbnQtdmFyaWFudDogc21hbGwtY2Fwcw0KLX0NCi0NCi0vKiAnZmlyc3QtbGV0dGVyJyBwc2V1ZG8tZWxlbWVudCAqLw0KLVA6Zmlyc3QtbGV0dGVyIHsNCi0JZm9udC1zaXplOiAyMDAlOw0KLQlmbG9hdDogbGVmdA0KLX0NCi0NCi0vKiBQc2V1ZG8tZWxlbWVudHMgaW4gc2VsZWN0b3JzICovDQotQk9EWSBQOmZpcnN0LWxldHRlciB7DQotCWNvbG9yOiBwdXJwbGUNCi19DQotDQotUC5pbml0aWFsOmZpcnN0LWxldHRlciB7DQotCWNvbG9yOiByZWQNCi19DQotDQotLyogTXVsdGlwbGUgcHNldWRvLWVsZW1lbnRzICovDQotUCB7DQotCWNvbG9yOiByZWQ7DQotCWZvbnQtc2l6ZTogMTJwdA0KLX0NCi0NCi1QOmZpcnN0LWxldHRlciB7DQotCWNvbG9yOiBncmVlbjsNCi0JZm9udC1zaXplOiAyMDAlDQotfQ0KLQ0KLVA6Zmlyc3QtbGluZSB7DQotCWNvbG9yOiBibHVlDQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvQlVHNzM5OTBfc2VsZWN0b3JfdW5mb3JtYXR0ZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9CVUc3Mzk5MF9zZWxlY3Rvcl91bmZvcm1hdHRlZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNTJjOTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9CVUc3Mzk5MF9zZWxlY3Rvcl91bmZvcm1hdHRlZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKiBDbGFzcyBhcyBzZWxlY3RvciAqLw0KLUgxLnBhc3RvcmFsIHsgY29sb3I6ICMwMEZGMDAgfQ0KLQ0KLS8qIElEIGFzIHNlbGVjdG9yICovDQotI3o5OHkgeyBsZXR0ZXItc3BhY2luZzogMC4zZW0gfQ0KLUgxI3o5OHkgeyBsZXR0ZXItc3BhY2luZzogMC41ZW0gfQ0KLQ0KLS8qIENvbnRleHR1YWwgc2VsZWN0b3JzICovDQotRElWIFAgICAgICAgICAgIHsgZm9udDogc21hbGwgc2Fucy1zZXJpZiB9DQotLnJlZGRpc2ggSDEgICAgIHsgY29sb3I6IHJlZCB9DQotI3g3OHkgQ09ERSAgICAgIHsgYmFja2dyb3VuZDogYmx1ZSB9DQotRElWLnNpZGVub3RlIEgxIHsgZm9udC1zaXplOiBsYXJnZSB9DQotDQotLyogQW5jaG9yIHBzZXVkby1jbGFzc2VzICovDQotQTpsaW5rIHsgY29sb3I6IHJlZCB9ICAgICAgIC8qIHVudmlzaXRlZCBsaW5rICovDQotQTp2aXNpdGVkIHsgY29sb3I6IGJsdWUgfSAgIC8qIHZpc2l0ZWQgbGlua3MgKi8NCi1BOmFjdGl2ZSB7IGNvbG9yOiBsaW1lIH0gICAgLyogYWN0aXZlIGxpbmtzICovDQotDQotLyogUHNldWRvLWNsYXNzIGNvbWJpbmVkIHdpdGggbm9ybWFsIGNsYXNzICovIA0KLUEuZXh0ZXJuYWw6dmlzaXRlZCB7IGNvbG9yOiBibHVlIH0NCi0NCi0vKiAnZmlyc3QtbGluZScgcHNldWRvLWVsZW1lbnQgKi8NCi1QOmZpcnN0LWxpbmUgeyBmb250LXZhcmlhbnQ6IHNtYWxsLWNhcHMgfQ0KLQ0KLS8qICdmaXJzdC1sZXR0ZXInIHBzZXVkby1lbGVtZW50ICovDQotUDpmaXJzdC1sZXR0ZXIgeyBmb250LXNpemU6IDIwMCU7IGZsb2F0OiBsZWZ0IH0NCi0NCi0vKiBQc2V1ZG8tZWxlbWVudHMgaW4gc2VsZWN0b3JzICovDQotQk9EWSBQOmZpcnN0LWxldHRlciB7IGNvbG9yOiBwdXJwbGUgfQ0KLVAuaW5pdGlhbDpmaXJzdC1sZXR0ZXIgeyBjb2xvcjogcmVkIH0NCi0NCi0vKiBNdWx0aXBsZSBwc2V1ZG8tZWxlbWVudHMgKi8NCi1QIHsgY29sb3I6IHJlZDsgZm9udC1zaXplOiAxMnB0IH0NCi1QOmZpcnN0LWxldHRlciB7IGNvbG9yOiBncmVlbjsgZm9udC1zaXplOiAyMDAlIH0NCi1QOmZpcnN0LWxpbmUgeyBjb2xvcjogYmx1ZSB9DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy1mb3JtYXR0ZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy1mb3JtYXR0ZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzdlN2I1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTEwNTM5LW11bHRpcGxlY2xhc3MtZm9ybWF0dGVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLS8qIDIgc2VwYXJhdGUgY2xhc3NlcyAtIHllcyBzcGFjZSAqLw0KLS5jbGFzc09uZSAuY2xhc3NUd28gew0KLQljb2xvcjogcmVkOw0KLX0NCi0NCi0vKiBtdWx0aXBsZSBjbGFzc2VzIC0gbm8gc3BhY2UgKi8NCi0uY2xhc3NPbmUuY2xhc3NUd28gew0KLQljb2xvcjogbGltZTsNCi19DQotDQotLyogaWQgYW5kIGNsYXNzIC0geWVzIHNwYWNlICovDQotI215aWQgLm15Y2xhc3Mgew0KLQlib3JkZXItdG9wOiAwcHg7DQotfQ0KLQ0KLS8qIGlkIHdpdGggY2xhc3MgLSBubyBzcGFjZSAqLw0KLSNteWlkLm15Y2xhc3Mgew0KLQlib3JkZXItdG9wOiAwcHg7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTEwNTM5LW11bHRpcGxlY2xhc3MuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZlNTA3M2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTA1MzktbXVsdGlwbGVjbGFzcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKiAyIHNlcGFyYXRlIGNsYXNzZXMgLSB5ZXMgc3BhY2UgKi8NCi0uY2xhc3NPbmUgLmNsYXNzVHdvIHsNCi1jb2xvcjogcmVkOw0KLX0NCi0NCi0vKiBtdWx0aXBsZSBjbGFzc2VzIC0gbm8gc3BhY2UgKi8NCi0uY2xhc3NPbmUuY2xhc3NUd28gew0KLWNvbG9yOiBsaW1lOw0KLX0NCi0NCi0vKiBpZCBhbmQgY2xhc3MgLSB5ZXMgc3BhY2UgKi8NCi0jbXlpZCAubXljbGFzcyB7DQotYm9yZGVyLXRvcDogMHB4Ow0KLX0NCi0NCi0vKiBpZCB3aXRoIGNsYXNzIC0gbm8gc3BhY2UgKi8NCi0jbXlpZC5teWNsYXNzIHsNCi1ib3JkZXItdG9wOiAwcHg7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTExNTY5LWV4dHJhc2VtaWNvbG9uLWZvcm1hdHRlZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzExMTU2OS1leHRyYXNlbWljb2xvbi1mb3JtYXR0ZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjZlNmU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTExNTY5LWV4dHJhc2VtaWNvbG9uLWZvcm1hdHRlZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLS5zaXRlbWFwbGV2MSB7DQotCWZvbnQtZmFtaWx5OiBWZXJkYW5hOw0KLQlmb250LXNpemU6IDEycHg7DQotCWxpbmUtaGVpZ2h0OiAxN3B4Ow0KLQljb2xvcjogIzY2NjY2NjsNCi0JZm9udC13ZWlnaHQ6IGJvbGQ7DQotCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTE1NjktZXh0cmFzZW1pY29sb24uY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxMTE1NjktZXh0cmFzZW1pY29sb24uY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOGUzMDdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTExNTY5LWV4dHJhc2VtaWNvbG9uLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotLnNpdGVtYXBsZXYxe2ZvbnQtZmFtaWx5OlZlcmRhbmE7Zm9udC1zaXplOjEycHg7bGluZS1oZWlnaHQ6MTdweDsNCi1jb2xvcjojNjY2NjY2O2ZvbnQtd2VpZ2h0OmJvbGQ7DQotdGV4dC1kZWNvcmF0aW9uOm5vbmU7fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTQ2MTk4LWF0dHJpYnV0ZXNwZWNpZmllci1mb3JtYXR0ZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLWZvcm1hdHRlZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU1YWQxY2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLWZvcm1hdHRlZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLWlucHV0W3R5cGU9ImhpZGRlbiJdIHsNCi0Jd2lkdGg6IDk4JTsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTQ2MTk4LWF0dHJpYnV0ZXNwZWNpZmllci5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYzFkYmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy9idWcxNDYxOTgtYXR0cmlidXRlc3BlY2lmaWVyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotaW5wdXRbdHlwZT0iaGlkZGVuIl0gew0KLXdpZHRoOiA5OCU7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTY2OTA5LXVybGNhc2UtY2xlYW5lZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE2NjkwOS11cmxjYXNlLWNsZWFuZWQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGRlYTQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTY2OTA5LXVybGNhc2UtY2xlYW5lZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNkZW1vIHsNCi0JYmFja2dyb3VuZDogdXJsKG1peGVkQ2FzZS9wcm9qZWN0TG9nby5naWYpOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL2J1ZzE2NjkwOS11cmxjYXNlLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTY2OTA5LXVybGNhc2UuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZmQwYWFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMvYnVnMTY2OTA5LXVybGNhc2UuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jZGVtbyB7DQotCWJhY2tncm91bmQ6IFVSTChtaXhlZENhc2UvcHJvamVjdExvZ28uZ2lmKTsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQWJzdHJhY3RNb2RlbFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0Fic3RyYWN0TW9kZWxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZDg4YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQWJzdHJhY3RNb2RlbFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE3MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLkNTU0NvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLkNTU0NvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ByaW1pdGl2ZVZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NWYWx1ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ291bnRlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuUkdCQ29sb3I7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLlJlY3Q7Ci0KLXB1YmxpYyBjbGFzcyBBYnN0cmFjdE1vZGVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcm90ZWN0ZWQgSUNTU01vZGVsIGZNb2RlbCA9IG51bGw7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCi0JCVByZWZlcmVuY2VzIHByZWZzID0gQ1NTQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKTsKLQkJcHJlZnMuc2V0VmFsdWUoQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5DQVNFX0lERU5USUZJRVIsIENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuTE9XRVIpOwotCQlwcmVmcy5zZXRWYWx1ZShDU1NDb3JlUHJlZmVyZW5jZU5hbWVzLkNBU0VfUFJPUEVSVFlfTkFNRSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0JCXByZWZzLnNldFZhbHVlKENTU0NvcmVQcmVmZXJlbmNlTmFtZXMuQ0FTRV9QUk9QRVJUWV9WQUxVRSwgQ1NTQ29yZVByZWZlcmVuY2VOYW1lcy5MT1dFUik7Ci0KLQkJZk1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAoZk1vZGVsICE9IG51bGwpIHsKLQkJCWZNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWZNb2RlbCA9IG51bGw7Ci0JCX0KLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgSUNTU01vZGVsIGdldE1vZGVsKCkgewotCQlyZXR1cm4gZk1vZGVsOwotCX0KLQotCXByb3RlY3RlZCBJQ1NTU3R5bGVTaGVldCBnZXRTdHlsZVNoZWV0KCkgewotCQlyZXR1cm4gKElDU1NTdHlsZVNoZWV0KSBmTW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQl9Ci0KLQljbGFzcyBQcmltaXRpdmVOdW1iZXIgewotCQlzaG9ydCB0eXBlOwotCQlmbG9hdCB2YWx1ZTsKLQotCQlQcmltaXRpdmVOdW1iZXIoc2hvcnQgbmV3VHlwZSwgZmxvYXQgbmV3VmFsdWUpIHsKLQkJCXR5cGUgPSBuZXdUeXBlOwotCQkJdmFsdWUgPSBuZXdWYWx1ZTsKLQkJfQotCX0KLQotCWNsYXNzIFByaW1pdGl2ZVN0cmluZyB7Ci0JCXNob3J0IHR5cGU7Ci0JCVN0cmluZyB2YWx1ZTsKLQotCQlQcmltaXRpdmVTdHJpbmcoc2hvcnQgbmV3VHlwZSwgU3RyaW5nIG5ld1ZhbHVlKSB7Ci0JCQl0eXBlID0gbmV3VHlwZTsKLQkJCXZhbHVlID0gbmV3VmFsdWU7Ci0JCX0KLQl9Ci0KLQkvKiBmb3IgaW50LCBmbG9hdCAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJpbWl0aXZlTnVtYmVyKENTU1ZhbHVlIGFjdHVhbCwgUHJpbWl0aXZlTnVtYmVyIGV4cGVjdGVkKSB7Ci0JCWFzc2VydFRydWUoYWN0dWFsIGluc3RhbmNlb2YgQ1NTUHJpbWl0aXZlVmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudHlwZSwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudmFsdWUsICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0RmxvYXRWYWx1ZShleHBlY3RlZC50eXBlKSwgMCk7Ci0JfQotCi0JLyogZm9yIHN0cmluZyAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJpbWl0aXZlU3RyaW5nKENTU1ZhbHVlIGFjdHVhbCwgUHJpbWl0aXZlU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCWFzc2VydFRydWUoYWN0dWFsIGluc3RhbmNlb2YgQ1NTUHJpbWl0aXZlVmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudHlwZSwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWQudmFsdWUsICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0JfQotCi0JLyogZm9yIGNvdW50ZXIgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjaGVja1ByaW1pdGl2ZUNvdW50ZXIoQ1NTVmFsdWUgYWN0dWFsLCBTdHJpbmcgaWRlbnRpZmllciwgU3RyaW5nIGxpc3RTdHlsZSwgU3RyaW5nIHNlcGFyYXRvcikgewotCQlhc3NlcnRUcnVlKGFjdHVhbCBpbnN0YW5jZW9mIENTU1ByaW1pdGl2ZVZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT1VOVEVSLCAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCUNvdW50ZXIgY291bnRlciA9ICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0Q291bnRlclZhbHVlKCk7Ci0JCWFzc2VydEVxdWFscyhpZGVudGlmaWVyLCBjb3VudGVyLmdldElkZW50aWZpZXIoKSk7Ci0JCWFzc2VydEVxdWFscyhsaXN0U3R5bGUsIGNvdW50ZXIuZ2V0TGlzdFN0eWxlKCkpOwotCQlhc3NlcnRFcXVhbHMoc2VwYXJhdG9yLCBjb3VudGVyLmdldFNlcGFyYXRvcigpKTsKLQl9Ci0KLQkvKiBmb3IgcmVjdCAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrUHJpbWl0aXZlUmVjdChDU1NWYWx1ZSBhY3R1YWwsIE9iamVjdFtdIGV4cGVjdGVkQXJyYXkpIHsKLQkJYXNzZXJ0VHJ1ZShhY3R1YWwgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0JCWFzc2VydEVxdWFscyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUkVDVCwgKChDU1NQcmltaXRpdmVWYWx1ZSkgYWN0dWFsKS5nZXRQcmltaXRpdmVUeXBlKCkpOwotCQlSZWN0IHJlY3QgPSAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFJlY3RWYWx1ZSgpOwotCQlDU1NQcmltaXRpdmVWYWx1ZSB2YWx1ZTsKLQkJT2JqZWN0IGV4cGVjdGVkOwotCQl2YWx1ZSA9IHJlY3QuZ2V0VG9wKCk7Ci0JCWV4cGVjdGVkID0gZXhwZWN0ZWRBcnJheVswXTsKLQkJaWYgKGV4cGVjdGVkIGluc3RhbmNlb2YgUHJpbWl0aXZlTnVtYmVyKSB7Ci0JCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgKFByaW1pdGl2ZU51bWJlcikgZXhwZWN0ZWQpOwotCQl9Ci0JCWVsc2UgewotCQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIChQcmltaXRpdmVTdHJpbmcpIGV4cGVjdGVkKTsKLQkJfQotCQl2YWx1ZSA9IHJlY3QuZ2V0UmlnaHQoKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzFdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gcmVjdC5nZXRCb3R0b20oKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzJdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gcmVjdC5nZXRMZWZ0KCk7Ci0JCWV4cGVjdGVkID0gZXhwZWN0ZWRBcnJheVszXTsKLQkJaWYgKGV4cGVjdGVkIGluc3RhbmNlb2YgUHJpbWl0aXZlTnVtYmVyKSB7Ci0JCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgKFByaW1pdGl2ZU51bWJlcikgZXhwZWN0ZWQpOwotCQl9Ci0JCWVsc2UgewotCQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIChQcmltaXRpdmVTdHJpbmcpIGV4cGVjdGVkKTsKLQkJfQotCX0KLQotCS8qIGZvciByZ2IgKi8KLQlwcm90ZWN0ZWQgdm9pZCBjaGVja1ByaW1pdGl2ZVJnYihDU1NWYWx1ZSBhY3R1YWwsIE9iamVjdFtdIGV4cGVjdGVkQXJyYXkpIHsKLQkJYXNzZXJ0VHJ1ZShhY3R1YWwgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0JCWFzc2VydEVxdWFscyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUkdCQ09MT1IsICgoQ1NTUHJpbWl0aXZlVmFsdWUpIGFjdHVhbCkuZ2V0UHJpbWl0aXZlVHlwZSgpKTsKLQkJUkdCQ29sb3IgY29sb3IgPSAoKENTU1ByaW1pdGl2ZVZhbHVlKSBhY3R1YWwpLmdldFJHQkNvbG9yVmFsdWUoKTsKLQkJQ1NTUHJpbWl0aXZlVmFsdWUgdmFsdWU7Ci0JCU9iamVjdCBleHBlY3RlZDsKLQkJdmFsdWUgPSBjb2xvci5nZXRSZWQoKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzBdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gY29sb3IuZ2V0R3JlZW4oKTsKLQkJZXhwZWN0ZWQgPSBleHBlY3RlZEFycmF5WzFdOwotCQlpZiAoZXhwZWN0ZWQgaW5zdGFuY2VvZiBQcmltaXRpdmVOdW1iZXIpIHsKLQkJCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCAoUHJpbWl0aXZlTnVtYmVyKSBleHBlY3RlZCk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgKFByaW1pdGl2ZVN0cmluZykgZXhwZWN0ZWQpOwotCQl9Ci0JCXZhbHVlID0gY29sb3IuZ2V0Qmx1ZSgpOwotCQlleHBlY3RlZCA9IGV4cGVjdGVkQXJyYXlbMl07Ci0JCWlmIChleHBlY3RlZCBpbnN0YW5jZW9mIFByaW1pdGl2ZU51bWJlcikgewotCQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIChQcmltaXRpdmVOdW1iZXIpIGV4cGVjdGVkKTsKLQkJfQotCQllbHNlIHsKLQkJCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCAoUHJpbWl0aXZlU3RyaW5nKSBleHBlY3RlZCk7Ci0JCX0KLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NDaGFyc2V0UnVsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0NoYXJzZXRSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDBhOWIwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0NoYXJzZXRSdWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZAotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU0NoYXJzZXRSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVTaGVldDsKLQotcHVibGljIGNsYXNzIENTU0NoYXJzZXRSdWxlVGVzdCBleHRlbmRzIEFic3RyYWN0TW9kZWxUZXN0IHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBSVUxFID0gIkBjaGFyc2V0IFwiaXNvLTg4NTktMVwiOyI7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZSgpIHsKLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IGdldFN0eWxlU2hlZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMoMCwgc2hlZXQuaW5zZXJ0UnVsZShSVUxFLCAwKSk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlDU1NSdWxlIHJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NDaGFyc2V0UnVsZSk7Ci0JCUNTU0NoYXJzZXRSdWxlIGNoYXJzZXRSdWxlID0gKENTU0NoYXJzZXRSdWxlKSBydWxlOwotCQlhc3NlcnRFcXVhbHMoImlzby04ODU5LTEiLCBjaGFyc2V0UnVsZS5nZXRFbmNvZGluZygpKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEUsIGNoYXJzZXRSdWxlLmdldENzc1RleHQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVJ1bGUoKSB7Ci0JCUlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gZ2V0U3R5bGVTaGVldCgpOwotCQlJQ1NTRG9jdW1lbnQgZG9jID0gc2hlZXQ7Ci0JCUNTU0NoYXJzZXRSdWxlIG5ld1J1bGUgPSBkb2MuY3JlYXRlQ1NTQ2hhcnNldFJ1bGUoKTsKLQkJbmV3UnVsZS5zZXRFbmNvZGluZygiaXNvLTg4NTktMSIpOwotCQlzaGVldC5pbnNlcnRSdWxlQmVmb3JlKG5ld1J1bGUsIG51bGwpOwotCi0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJQ1NTUnVsZSBydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTQ2hhcnNldFJ1bGUpOwotCQlDU1NDaGFyc2V0UnVsZSBjaGFyc2V0UnVsZSA9IChDU1NDaGFyc2V0UnVsZSkgcnVsZTsKLQkJYXNzZXJ0RXF1YWxzKCJpc28tODg1OS0xIiwgY2hhcnNldFJ1bGUuZ2V0RW5jb2RpbmcoKSk7Ci0JCWFzc2VydEVxdWFscyhSVUxFLCBjaGFyc2V0UnVsZS5nZXRDc3NUZXh0KCkpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NGb250RmFjZVJ1bGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NGb250RmFjZVJ1bGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyZjAyZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTRm9udEZhY2VSdWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTUHJpbWl0aXZlVmFsdWU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTRm9udEZhY2VSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NQcmltaXRpdmVWYWx1ZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlRGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NWYWx1ZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDU1NGb250RmFjZVJ1bGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbFRlc3QgewotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlKCkgewotCQlmaW5hbCBTdHJpbmcgUlVMRSA9ICJAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6IFwiU3dpc3MgNzIxXCI7IHNyYzogdXJsKHN3aXNzNzIxLnBmcik7IC8qIFRoZSBleHBhbmRlZCBTd2lzcyA3MjEgKi8gZm9udC1zdHJldGNoOiBleHBhbmRlZDsgfSI7Ci0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSBnZXRTdHlsZVNoZWV0KCk7Ci0JCWFzc2VydEVxdWFscygwLCBzaGVldC5pbnNlcnRSdWxlKFJVTEUsIDApKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCUNTU1J1bGUgcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0ZvbnRGYWNlUnVsZSk7Ci0KLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiA9ICgoQ1NTRm9udEZhY2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMywgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1ZhbHVlIHZhbHVlOwotCQlDU1NQcmltaXRpdmVWYWx1ZSBwcmltaXRpdmVWYWx1ZTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtZmFtaWx5Iik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NQcmltaXRpdmVWYWx1ZSk7Ci0KLQkJcHJpbWl0aXZlVmFsdWUgPSAoQ1NTUHJpbWl0aXZlVmFsdWUpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1NUUklORywgcHJpbWl0aXZlVmFsdWUuZ2V0UHJpbWl0aXZlVHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJTd2lzcyA3MjEiLCBwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNyYyIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTUHJpbWl0aXZlVmFsdWUpOwotCi0JCXByaW1pdGl2ZVZhbHVlID0gKENTU1ByaW1pdGl2ZVZhbHVlKSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19VUkksIHByaW1pdGl2ZVZhbHVlLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygic3dpc3M3MjEucGZyIiwgcHJpbWl0aXZlVmFsdWUuZ2V0U3RyaW5nVmFsdWUoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJmb250LXN0cmV0Y2giKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ByaW1pdGl2ZVZhbHVlKTsKLQotCQlwcmltaXRpdmVWYWx1ZSA9IChDU1NQcmltaXRpdmVWYWx1ZSkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsIHByaW1pdGl2ZVZhbHVlLmdldFByaW1pdGl2ZVR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygiZXhwYW5kZWQiLCBwcmltaXRpdmVWYWx1ZS5nZXRTdHJpbmdWYWx1ZSgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBfdGVzdEluc2VydFRleHQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU0ZvbnRGYWNlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoMywgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0JCUNTU1ZhbHVlTGlzdCB2YWx1ZUxpc3Q7Ci0KLQkJLy8gcnVsZSAxCi0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLkZPTlRfRkFDRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0ZvbnRGYWNlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU0ZvbnRGYWNlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDQsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtZmFtaWx5Iik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19TVFJJTkcsICJTd2lzcyA3MjEiKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJzcmMiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1VSSSwgInN3aXNzNzIxYmxrLnBmciIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtc3R5bGUiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscygzLCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIm5vcm1hbCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDIpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIml0YWxpYyIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtd2VpZ2h0Iik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoMywgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDgwMCkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA5MDApKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBfdGVzdEluc2VydFRleHQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU0ZvbnRGYWNlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoMywgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0JCUNTU1ZhbHVlTGlzdCB2YWx1ZUxpc3Q7Ci0KLQkJLy8gcnVsZSAyCi0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMSk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLkZPTlRfRkFDRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0ZvbnRGYWNlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU0ZvbnRGYWNlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDYsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNyYyIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDksIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19MT0NBTCwgIlBhbGF0aW5vIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19MT0NBTCwgIlRpbWVzIE5ldyBSb21hbiIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMyksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDQpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfTE9DQUwsICJOZXcgWW9yayIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oNSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDYpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfTE9DQUwsICJVdG9waWEiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDcpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSg4KSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfVVJJLCAiaHR0cDovL3NvbWV3aGVyZS9mcmVlL2ZvbnQiKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJmb250LWZhbWlseSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJzZXJpZiIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtd2VpZ2h0Iik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoOSwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDEwMCkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAyMDApKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMyksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDQpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMzAwKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDUpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg2KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDQwMCkpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSg3KSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oOCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA1MDApKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtc3R5bGUiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAibm9ybWFsIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC12YXJpYW50Iik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgIm5vcm1hbCIpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtc2l6ZSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJhbGwiKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgX3Rlc3RJbnNlcnRUZXh0MygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NGb250RmFjZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCQlDU1NWYWx1ZUxpc3QgdmFsdWVMaXN0OwotCi0JCS8vIHJ1bGUgMwotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDIpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5GT05UX0ZBQ0VfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NGb250RmFjZVJ1bGUpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NGb250RmFjZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscyg1LCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJzcmMiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscyg0LCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfTE9DQUwsICJBbGFiYW1hIEl0YWxpYyIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDIpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19VUkksICJodHRwOi8vd3d3LmZvbnRzLm9yZy9BL2FsYWJhbWEtaXRhbGljIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgzKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0ZPUk1BVCwgInRydWV0eXBlIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgicGFub3NlLTEiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscygxMCwgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA0KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDIpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNSkpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSgzKSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDIpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oNCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA1KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDUpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNCkpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg2KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDUpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oNyksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCA5KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDgpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMykpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg5KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDMpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoImZvbnQtZmFtaWx5Iik7Ci0JCWFzc2VydFRydWUodmFsdWUgaW5zdGFuY2VvZiBDU1NWYWx1ZUxpc3QpOwotCi0JCXZhbHVlTGlzdCA9IChDU1NWYWx1ZUxpc3QpIHZhbHVlOwotCQlhc3NlcnRFcXVhbHMoMywgdmFsdWVMaXN0LmdldExlbmd0aCgpKTsKLQotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgwKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJBbGFiYW1hIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAic2VyaWYiKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJmb250LXdlaWdodCIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDUsIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAzMDApKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDIpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNDAwKSk7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlTGlzdC5pdGVtKDMpLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ09NTUEsICIsIikpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZUxpc3QuaXRlbSg0KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDUwMCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiZm9udC1zdHlsZSIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDMsIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAiaXRhbGljIikpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZUxpc3QuaXRlbSgxKSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NPTU1BLCAiLCIpKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWVMaXN0Lml0ZW0oMiksIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAib2JsaXF1ZSIpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTSW1wb3J0UnVsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU0ltcG9ydFJ1bGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNTc5YjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTSW1wb3J0UnVsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NJbXBvcnRSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTSW1wb3J0UnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uc3R5bGVzaGVldHMuTWVkaWFMaXN0OwotCi1wdWJsaWMgY2xhc3MgQ1NTSW1wb3J0UnVsZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsVGVzdCB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZURvdWJsZVF1b3RlKCkgewotCQljaGVja0luc2VydCgiQGltcG9ydCBcImR1bW15LmNzc1wiOyIsICJkdW1teS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZVNpbmdsZVF1b3RlKCkgewotCQljaGVja0luc2VydCgiQGltcG9ydCBcJ2R1bW15LmNzc1wnOyIsICJkdW1teS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZVVybE5vUXVvdGUoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IHVybChkdW1teS5jc3MpOyIsICJkdW1teS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0UnVsZVVybERvdWJsZVF1b3RlKCkgewotCQljaGVja0luc2VydCgiQGltcG9ydCB1cmwoXCJkdW1teS5jc3NcIik7IiwgImR1bW15LmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlVXJsU2luZ2xlUXVvdGUoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IHVybChcJ2R1bW15LmNzc1wnKTsiLCAiZHVtbXkuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGVNZWRpYTEoKSB7Ci0JCWNoZWNrSW5zZXJ0KCJAaW1wb3J0IHVybChcImR1bW15LmNzc1wiKSBtZWRpYTE7IiwgImR1bW15LmNzcyIsIG5ldyBTdHJpbmdbXXsibWVkaWExIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRSdWxlTWVkaWEyKCkgewotCQljaGVja0luc2VydCgiQGltcG9ydCB1cmwoXCdkdW1teS5jc3NcJykgbWVkaWExLCBtZWRpYTI7IiwgImR1bW15LmNzcyIsIG5ldyBTdHJpbmdbXXsibWVkaWExIiwgIm1lZGlhMiJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlUnVsZSgpIHsKLQkJSUNTU1N0eWxlU2hlZXQgc2hlZXQgPSBnZXRTdHlsZVNoZWV0KCk7Ci0JCUlDU1NEb2N1bWVudCBkb2MgPSBzaGVldDsKLQkJSUNTU0ltcG9ydFJ1bGUgbmV3UnVsZSA9IGRvYy5jcmVhdGVDU1NJbXBvcnRSdWxlKCk7Ci0JCW5ld1J1bGUuc2V0SHJlZigiZHVtbXkuY3NzIik7Ci0JCU1lZGlhTGlzdCBuZXdMaXN0ID0gbmV3UnVsZS5nZXRNZWRpYSgpOwotCQluZXdMaXN0LmFwcGVuZE1lZGl1bSgibWVkaWExIik7Ci0JCW5ld0xpc3QuYXBwZW5kTWVkaXVtKCJtZWRpYTIiKTsKLQkJc2hlZXQuaW5zZXJ0UnVsZUJlZm9yZShuZXdSdWxlLCBudWxsKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCUNTU1J1bGUgcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU0ltcG9ydFJ1bGUpOwotCQlDU1NJbXBvcnRSdWxlIGltcG9ydFJ1bGUgPSAoQ1NTSW1wb3J0UnVsZSkgcnVsZTsKLQkJYXNzZXJ0RXF1YWxzKCJkdW1teS5jc3MiLCBpbXBvcnRSdWxlLmdldEhyZWYoKSk7Ci0JCU1lZGlhTGlzdCBtZWRpYUxpc3QgPSBpbXBvcnRSdWxlLmdldE1lZGlhKCk7Ci0JCWFzc2VydEVxdWFscygyLCBtZWRpYUxpc3QuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoIm1lZGlhMSIsIG1lZGlhTGlzdC5pdGVtKDApKTsKLQkJYXNzZXJ0RXF1YWxzKCJtZWRpYTIiLCBtZWRpYUxpc3QuaXRlbSgxKSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJAaW1wb3J0IHVybChcImR1bW15LmNzc1wiKSBtZWRpYTEsIG1lZGlhMjsiLCBpbXBvcnRSdWxlLmdldENzc1RleHQoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrSW5zZXJ0KFN0cmluZyBydWxlU3RyaW5nLCBTdHJpbmcgaHJlZiwgU3RyaW5nW10gbWVkaWEpIHsKLQkJQ1NTU3R5bGVTaGVldCBzaGVldCA9IGdldFN0eWxlU2hlZXQoKTsKLQotCQlhc3NlcnRFcXVhbHMoMCwgc2hlZXQuaW5zZXJ0UnVsZShydWxlU3RyaW5nLCAwKSk7Ci0KLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlDU1NSdWxlIHJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NJbXBvcnRSdWxlKTsKLQotCQlDU1NJbXBvcnRSdWxlIGltcG9ydFJ1bGUgPSAoQ1NTSW1wb3J0UnVsZSkgcnVsZTsKLQkJYXNzZXJ0RXF1YWxzKGhyZWYsIGltcG9ydFJ1bGUuZ2V0SHJlZigpKTsKLQotCQlpZiAobWVkaWEgIT0gbnVsbCkgewotCQkJYXNzZXJ0RXF1YWxzKG1lZGlhLmxlbmd0aCwgaW1wb3J0UnVsZS5nZXRNZWRpYSgpLmdldExlbmd0aCgpKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWVkaWEubGVuZ3RoOyBpKyspIHsKLQkJCQlhc3NlcnRFcXVhbHMobWVkaWFbaV0sIGltcG9ydFJ1bGUuZ2V0TWVkaWEoKS5pdGVtKGkpKTsKLQkJCX0KLQkJfQotCi0JCWFzc2VydEVxdWFscyhydWxlU3RyaW5nLCBpbXBvcnRSdWxlLmdldENzc1RleHQoKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU01lZGlhUnVsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU01lZGlhUnVsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA2ZDlhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9DU1NNZWRpYVJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU0RvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTWVkaWFSdWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTTWVkaWFSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5zdHlsZXNoZWV0cy5NZWRpYUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBDU1NNZWRpYVJ1bGVUZXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbFRlc3QgewotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVSdWxlKCkgewotCQlJQ1NTU3R5bGVTaGVldCBzaGVldCA9IGdldFN0eWxlU2hlZXQoKTsKLQkJSUNTU0RvY3VtZW50IGRvYyA9IHNoZWV0OwotCQlJQ1NTTWVkaWFSdWxlIG5ld1J1bGUgPSBkb2MuY3JlYXRlQ1NTTWVkaWFSdWxlKCk7Ci0JCU1lZGlhTGlzdCBuZXdMaXN0ID0gbmV3UnVsZS5nZXRNZWRpYSgpOwotCQluZXdMaXN0LmFwcGVuZE1lZGl1bSgibWVkaWExIik7Ci0JCW5ld0xpc3QuYXBwZW5kTWVkaXVtKCJtZWRpYTIiKTsKLQkJc2hlZXQuaW5zZXJ0UnVsZUJlZm9yZShuZXdSdWxlLCBudWxsKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCUNTU1J1bGUgcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU01lZGlhUnVsZSk7Ci0JCUNTU01lZGlhUnVsZSBtZWRpYVJ1bGUgPSAoQ1NTTWVkaWFSdWxlKSBydWxlOwotCi0JCU1lZGlhTGlzdCBtZWRpYUxpc3QgPSBtZWRpYVJ1bGUuZ2V0TWVkaWEoKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIG1lZGlhTGlzdC5nZXRMZW5ndGgoKSk7Ci0JCWFzc2VydEVxdWFscygibWVkaWExIiwgbWVkaWFMaXN0Lml0ZW0oMCkpOwotCQlhc3NlcnRFcXVhbHMoIm1lZGlhMiIsIG1lZGlhTGlzdC5pdGVtKDEpKTsKLQotCQlhc3NlcnRFcXVhbHMoIkBtZWRpYSBtZWRpYTEsIG1lZGlhMiB7IiArIEZpbGVVdGlsLmNvbW1vbkVPTCArICJ9IiwgbWVkaWFSdWxlLmdldENzc1RleHQoKSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1BhZ2VSdWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTUGFnZVJ1bGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZWM0MzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTUGFnZVJ1bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZAotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUGFnZVJ1bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ByaW1pdGl2ZVZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVTaGVldDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTVmFsdWU7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ZhbHVlTGlzdDsKLQotcHVibGljIGNsYXNzIENTU1BhZ2VSdWxlVGVzdCBleHRlbmRzIEFic3RyYWN0TW9kZWxUZXN0IHsKLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dDEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTUGFnZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDYsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCQlDU1NWYWx1ZUxpc3QgdmFsdWVMaXN0OwotCi0JCS8vIHJ1bGUgMQotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5QQUdFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTUGFnZVJ1bGUpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoInNpemUiKTsKLQkJYXNzZXJ0VHJ1ZSh2YWx1ZSBpbnN0YW5jZW9mIENTU1ZhbHVlTGlzdCk7Ci0KLQkJdmFsdWVMaXN0ID0gKENTU1ZhbHVlTGlzdCkgdmFsdWU7Ci0JCWFzc2VydEVxdWFscygyLCB2YWx1ZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDApLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTiwgKGZsb2F0KSA4LjUpKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMSksIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOLCAxMSkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgibWFyZ2luIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DTSwgMikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0MigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NQYWdlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoNiwgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0KLQkJLy8gcnVsZSAyCi0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMSk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlBBR0VfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NQYWdlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMiwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgic2l6ZSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSURFTlQsICJhdXRvIikpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgibWFyZ2luIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19QRVJDRU5UQUdFLCAxMCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0MygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NQYWdlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoNiwgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0KLQkJLy8gcnVsZSAzCi0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMik7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlBBR0VfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NQYWdlUnVsZSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCI6bGVmdCIsICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFNlbGVjdG9yVGV4dCgpKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygyLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJtYXJnaW4tbGVmdCIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ00sIDQpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIm1hcmdpbi1yaWdodCIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ00sIDMpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dDQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTUGFnZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDYsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCi0JCS8vIHJ1bGUgNAotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDMpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5QQUdFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTUGFnZVJ1bGUpOwotCi0JCWFzc2VydEVxdWFscygiOnJpZ2h0IiwgKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U2VsZWN0b3JUZXh0KCkpOwotCi0JCWRlY2xhcmF0aW9uID0gKChDU1NQYWdlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDIsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIm1hcmdpbi1sZWZ0Iik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DTSwgMykpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgibWFyZ2luLXJpZ2h0Iik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DTSwgNCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbnNlcnRUZXh0NSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NQYWdlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoNiwgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0JCUNTU1ZhbHVlTGlzdCB2YWx1ZUxpc3Q7Ci0KLQkJLy8gcnVsZSA1Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oNCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlBBR0VfUlVMRSwgcnVsZS5nZXRUeXBlKCkpOwotCQlhc3NlcnRUcnVlKHJ1bGUgaW5zdGFuY2VvZiBDU1NQYWdlUnVsZSk7Ci0KLQkJYXNzZXJ0RXF1YWxzKCJuYXJyb3ciLCAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTZWxlY3RvclRleHQoKSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1BhZ2VSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMSwgZGVjbGFyYXRpb24uZ2V0TGVuZ3RoKCkpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgic2l6ZSIpOwotCQlhc3NlcnRUcnVlKHZhbHVlIGluc3RhbmNlb2YgQ1NTVmFsdWVMaXN0KTsKLQotCQl2YWx1ZUxpc3QgPSAoQ1NTVmFsdWVMaXN0KSB2YWx1ZTsKLQkJYXNzZXJ0RXF1YWxzKDIsIHZhbHVlTGlzdC5nZXRMZW5ndGgoKSk7Ci0KLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWVMaXN0Lml0ZW0oMCksIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0NNLCA5KSk7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlTGlzdC5pdGVtKDEpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19DTSwgMTgpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dDYoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBnZXRNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KEZpbGVVdGlsLmNyZWF0ZVN0cmluZygic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMiLCAiQ1NTUGFnZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDYsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCi0JCS8vIHJ1bGUgNgotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDUpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5QQUdFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTUGFnZVJ1bGUpOwotCi0JCWFzc2VydEVxdWFscygicm90YXRlZCIsICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFNlbGVjdG9yVGV4dCgpKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTUGFnZVJ1bGUpIHJ1bGUpLmdldFN0eWxlKCk7Ci0JCWFzc2VydEVxdWFscygxLCBkZWNsYXJhdGlvbi5nZXRMZW5ndGgoKSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJzaXplIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19JREVOVCwgImxhbmRzY2FwZSIpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTU3R5bGVSdWxlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTU3R5bGVSdWxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWQyZDdkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlUnVsZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1ByaW1pdGl2ZVZhbHVlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1ByaW1pdGl2ZVZhbHVlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NSdWxlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTU3R5bGVSdWxlOwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5DU1NWYWx1ZTsKLQotcHVibGljIGNsYXNzIENTU1N0eWxlUnVsZVRlc3QgZXh0ZW5kcyBBYnN0cmFjdE1vZGVsVGVzdCB7Ci0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHROdW1iZXJzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1N0eWxlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoMywgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlNUWUxFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTU3R5bGVSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMjAsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQkvLyAwMQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIk5VTUJFUiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfTlVNQkVSLCAxMjMuNDU2ZikpOwotCi0JCS8vIDAyCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUEVSQ0VOVEFHRSIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUEVSQ0VOVEFHRSwgMTIzLjQ1NmYpKTsKLQotCQkvLyAwMwotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkVNUyIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfRU1TLCAxMjMuNDU2ZikpOwotCi0JCS8vIDA0Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiRVhTIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19FWFMsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMDUKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJQWCIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUFgsICsxMjMuNDU2ZikpOwotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlBYMiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUFgsIC0xMjNmKSk7Ci0KLQotCQkKLQkJLy8gMDYKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJDTSIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfQ00sIDEyMy40NTZmKSk7Ci0KLQkJLy8gMDcKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJNTSIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfTU0sIDEyMy40NTZmKSk7Ci0KLQkJLy8gMDgKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJJTiIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU4sIDEyMy40NTZmKSk7Ci0KLQkJLy8gMDkKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJQVCIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUFQsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMTAKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJQQyIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfUEMsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMTEKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJERUciKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0RFRywgLTEyMy40NTZmKSk7Ci0KLQkJLy8gMTIKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJSQUQiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1JBRCwgMTIzLjQ1NmYpKTsKLQotCQkvLyAxMwotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkdSQUQiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0dSQUQsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMTQKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJNUyIpOwotCQljaGVja1ByaW1pdGl2ZU51bWJlcih2YWx1ZSwgbmV3IFByaW1pdGl2ZU51bWJlcihDU1NQcmltaXRpdmVWYWx1ZS5DU1NfTVMsIDEyMy40NTZmKSk7Ci0KLQkJLy8gMTUKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJTIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19TLCAxMjMuNDU2ZikpOwotCi0JCS8vIDE2Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiSFoiKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0haLCAxMjMuNDU2ZikpOwotCi0JCS8vIDE3Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiS0haIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19LSFosIDEyMy40NTZmKSk7Ci0KLQkJLy8gMTgKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJESU1FTlNJT04iKTsKLQkJY2hlY2tQcmltaXRpdmVOdW1iZXIodmFsdWUsIG5ldyBQcmltaXRpdmVOdW1iZXIoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0RJTUVOU0lPTiwgLTEyMy40NTZmKSk7Ci0KLQkJLy8gMTkKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJJTlRFR0VSIik7Ci0JCWNoZWNrUHJpbWl0aXZlTnVtYmVyKHZhbHVlLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMTIzKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFRleHRTdHJpbmdzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gZ2V0TW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJc3RydWN0dXJlZERvY3VtZW50LnNldChGaWxlVXRpbC5jcmVhdGVTdHJpbmcoInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIiwgIkNTU1N0eWxlUnVsZVRlc3QuY3NzIikpOwotCi0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSAoQ1NTU3R5bGVTaGVldCkgbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJQ1NTUnVsZUxpc3QgcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCQlhc3NlcnRFcXVhbHMoMywgcnVsZUxpc3QuZ2V0TGVuZ3RoKCkpOwotCi0JCUNTU1J1bGUgcnVsZTsKLQkJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKLQkJQ1NTVmFsdWUgdmFsdWU7Ci0KLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMSk7Ci0JCWFzc2VydEVxdWFscyhDU1NSdWxlLlNUWUxFX1JVTEUsIHJ1bGUuZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0VHJ1ZShydWxlIGluc3RhbmNlb2YgQ1NTU3R5bGVSdWxlKTsKLQotCQlkZWNsYXJhdGlvbiA9ICgoQ1NTU3R5bGVSdWxlKSBydWxlKS5nZXRTdHlsZSgpOwotCQlhc3NlcnRFcXVhbHMoMTEsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQkvLyAwMQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlNUUklORyIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhDU1NQcmltaXRpdmVWYWx1ZS5DU1NfU1RSSU5HLCAic3RyaW5nIikpOwotCi0JCS8vIDAyCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiVVJJIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKENTU1ByaW1pdGl2ZVZhbHVlLkNTU19VUkksICJodHRwOi8vd3d3LmlibS5jb20vIikpOwotCi0JCS8vIDAzCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiSURFTlQiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lERU5ULCAibGVmdCIpKTsKLQotCQkvLyAwNAotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkhBU0giKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19IQVNILCAiI2FiY2RlZiIpKTsKLQotCQkvLyAwNQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlVSQU5HRSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX1VSQU5HRSwgIlUrMjBBNyIpKTsKLQotCQkvLyAwNgotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIlNMQVNIIik7Ci0JCWNoZWNrUHJpbWl0aXZlU3RyaW5nKHZhbHVlLCBuZXcgUHJpbWl0aXZlU3RyaW5nKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfU0xBU0gsICIvIikpOwotCi0JCS8vIDA3Ci0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiQ09NTUEiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19DT01NQSwgIiwiKSk7Ci0KLQkJLy8gMDgKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJJTkhFUklUX1BSSU1JVElWRSIpOwotCQljaGVja1ByaW1pdGl2ZVN0cmluZyh2YWx1ZSwgbmV3IFByaW1pdGl2ZVN0cmluZyhJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOSEVSSVRfUFJJTUlUSVZFLCAiaW5oZXJpdCIpKTsKLQotCQkvLyAwOQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkFUVFIiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0FUVFIsICJLRVkiKSk7Ci0KLQkJLy8gMTAKLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJGT1JNQVQiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19GT1JNQVQsICJ0cnVlZG9jIikpOwotCi0JCS8vIDExCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiTE9DQUwiKTsKLQkJY2hlY2tQcmltaXRpdmVTdHJpbmcodmFsdWUsIG5ldyBQcmltaXRpdmVTdHJpbmcoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19MT0NBTCwgIkV4Y2Vsc2lvciBSb21hbiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SW5zZXJ0VGV4dEZ1bmN0aW9ucygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IGdldE1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoRmlsZVV0aWwuY3JlYXRlU3RyaW5nKCJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyIsICJDU1NTdHlsZVJ1bGVUZXN0LmNzcyIpKTsKLQotCQlDU1NTdHlsZVNoZWV0IHNoZWV0ID0gKENTU1N0eWxlU2hlZXQpIG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCUNTU1J1bGVMaXN0IHJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIHJ1bGVMaXN0LmdldExlbmd0aCgpKTsKLQotCQlDU1NSdWxlIHJ1bGU7Ci0JCUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247Ci0JCUNTU1ZhbHVlIHZhbHVlOwotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDIpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUnVsZS5TVFlMRV9SVUxFLCBydWxlLmdldFR5cGUoKSk7Ci0JCWFzc2VydFRydWUocnVsZSBpbnN0YW5jZW9mIENTU1N0eWxlUnVsZSk7Ci0KLQkJZGVjbGFyYXRpb24gPSAoKENTU1N0eWxlUnVsZSkgcnVsZSkuZ2V0U3R5bGUoKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIGRlY2xhcmF0aW9uLmdldExlbmd0aCgpKTsKLQotCQl2YWx1ZSA9IGRlY2xhcmF0aW9uLmdldFByb3BlcnR5Q1NTVmFsdWUoIkNPVU5URVIiKTsKLQkJY2hlY2tQcmltaXRpdmVDb3VudGVyKHZhbHVlLCAicGFyLW51bSIsICJ1cHBlci1yb21hbiIsIG51bGwpOwotCi0JCXZhbHVlID0gZGVjbGFyYXRpb24uZ2V0UHJvcGVydHlDU1NWYWx1ZSgiUkVDVCIpOwotCQljaGVja1ByaW1pdGl2ZVJlY3QodmFsdWUsIG5ldyBPYmplY3RbXXtuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMTIpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMzQpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNTYpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgNzgpfSk7Ci0KLQkJdmFsdWUgPSBkZWNsYXJhdGlvbi5nZXRQcm9wZXJ0eUNTU1ZhbHVlKCJSR0JDT0xPUiIpOwotCQljaGVja1ByaW1pdGl2ZVJnYih2YWx1ZSwgbmV3IE9iamVjdFtde25ldyBQcmltaXRpdmVOdW1iZXIoSUNTU1ByaW1pdGl2ZVZhbHVlLkNTU19JTlRFR0VSLCAyNTUpLCBuZXcgUHJpbWl0aXZlTnVtYmVyKElDU1NQcmltaXRpdmVWYWx1ZS5DU1NfSU5URUdFUiwgMTI4KSwgbmV3IFByaW1pdGl2ZU51bWJlcihJQ1NTUHJpbWl0aXZlVmFsdWUuQ1NTX0lOVEVHRVIsIDApfSk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTU3R5bGVTaGVldFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL0NTU1N0eWxlU2hlZXRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyM2NlYjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvbW9kZWwvQ1NTU3R5bGVTaGVldFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IG9yZy53M2MuZG9tLkRPTUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5jc3MuQ1NTUnVsZUxpc3Q7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci0KLQotcHVibGljIGNsYXNzIENTU1N0eWxlU2hlZXRUZXN0IGV4dGVuZHMgQWJzdHJhY3RNb2RlbFRlc3QgewotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBSVUxFX0gxID0gIkgxIHsgY29sb3IgOiByZWQ7IH0iOwotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBSVUxFX0gyID0gIkgyIHsgY29sb3IgOiByZWQ7IH0iOwotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBSVUxFX0gzID0gIkgzIHsgY29sb3IgOiByZWQ7IH0iOwotCi0JcHVibGljIHZvaWQgdGVzdEluc2VydFJ1bGUoKSB7Ci0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSBnZXRTdHlsZVNoZWV0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUoUlVMRV9IMywgMCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgc2hlZXQuaW5zZXJ0UnVsZShSVUxFX0gxLCAwKSk7Ci0JCWFzc2VydEVxdWFscygxLCBzaGVldC5pbnNlcnRSdWxlKFJVTEVfSDIsIDEpKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdCA9IHNoZWV0LmdldENzc1J1bGVzKCk7Ci0JCUNTU1J1bGUgcnVsZTsKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEVfSDEsIHJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMSk7Ci0JCWFzc2VydEVxdWFscyhSVUxFX0gyLCBydWxlLmdldENzc1RleHQoKSk7Ci0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDIpOwotCQlhc3NlcnRFcXVhbHMoUlVMRV9IMywgcnVsZS5nZXRDc3NUZXh0KCkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdERlbGV0ZVJ1bGUoKSB7Ci0JCUNTU1N0eWxlU2hlZXQgc2hlZXQgPSBnZXRTdHlsZVNoZWV0KCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDAsIHNoZWV0Lmluc2VydFJ1bGUoUlVMRV9IMywgMCkpOwotCQlhc3NlcnRFcXVhbHMoMCwgc2hlZXQuaW5zZXJ0UnVsZShSVUxFX0gxLCAwKSk7Ci0JCWFzc2VydEVxdWFscygxLCBzaGVldC5pbnNlcnRSdWxlKFJVTEVfSDIsIDEpKTsKLQotCQlDU1NSdWxlTGlzdCBydWxlTGlzdDsKLQkJQ1NTUnVsZSBydWxlOwotCi0JCXNoZWV0LmRlbGV0ZVJ1bGUoMSk7Ci0JCXJ1bGVMaXN0ID0gc2hlZXQuZ2V0Q3NzUnVsZXMoKTsKLQotCQlydWxlID0gcnVsZUxpc3QuaXRlbSgwKTsKLQkJYXNzZXJ0RXF1YWxzKFJVTEVfSDEsIHJ1bGUuZ2V0Q3NzVGV4dCgpKTsKLQkJcnVsZSA9IHJ1bGVMaXN0Lml0ZW0oMSk7Ci0JCWFzc2VydEVxdWFscyhSVUxFX0gzLCBydWxlLmdldENzc1RleHQoKSk7Ci0KLQkJc2hlZXQuZGVsZXRlUnVsZSgxKTsKLQkJcnVsZUxpc3QgPSBzaGVldC5nZXRDc3NSdWxlcygpOwotCi0JCXJ1bGUgPSBydWxlTGlzdC5pdGVtKDApOwotCQlhc3NlcnRFcXVhbHMoUlVMRV9IMSwgcnVsZS5nZXRDc3NUZXh0KCkpOwotCi0JCXNoZWV0LmRlbGV0ZVJ1bGUoMCk7Ci0KLQkJdHJ5IHsKLQkJCXNoZWV0LmRlbGV0ZVJ1bGUoMCk7Ci0JCX0KLQkJY2F0Y2ggKERPTUV4Y2VwdGlvbiBlKSB7Ci0JCQlhc3NlcnRFcXVhbHMoRE9NRXhjZXB0aW9uLklOREVYX1NJWkVfRVJSLCBlLmNvZGUpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RDU1NEZWNsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9tb2RlbC9UZXN0Q1NTRGVjbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YWRjMmRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RDU1NEZWNsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5DU1NEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucGFyc2VyLkNTU1NvdXJjZVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwudXRpbC5DU1NTdHlsZURlY2xhcmF0aW9uRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwudXRpbC5kZWNsYXJhdGlvbi5DU1NQcm9wZXJ0eUNvbnRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LklEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Q1NTRGVjbCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbCgpIHsKLQkJQ1NTUHJvcGVydHlDb250ZXh0IGNvbnRleHQgPSBuZXcgQ1NTUHJvcGVydHlDb250ZXh0KCk7Ci0JCUlDU1NTdHlsZURlY2xhcmF0aW9uIGRlY2wgPSBDU1NTdHlsZURlY2xhcmF0aW9uRmFjdG9yeS5nZXRJbnN0YW5jZSgpLmNyZWF0ZVN0eWxlRGVjbGFyYXRpb24oKTsKLQkJY29udGV4dC5pbml0aWFsaXplKGRlY2wpOwotCQlkZWNsLnNldENzc1RleHQoZ2V0U3RyaW5nKCkgIT0gbnVsbCA/IGdldFN0cmluZygpIDogIiIpOy8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRTdHJpbmcoKSB7Ci0JCXJldHVybiAiYm9keSB7fSI7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU1N0eWxlRGVjbEl0ZW0oKSB7Ci0JCVN0cmluZyB2YWx1ZSA9ICJjb2xvcjogYmx1ZTsiOwotCQlJRG9jdW1lbnRMb2FkZXIgbG9hZGVyID0gbmV3IENTU0RvY3VtZW50TG9hZGVyKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc2hhcmVkU3RydWN0dXJlZERvY3VtZW50ID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGxvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9ERUNMQVJBVElPTl9WQUxVRSk7Ci0KLQkJc2hhcmVkU3RydWN0dXJlZERvY3VtZW50LnNldCh2YWx1ZSk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gPSBzaGFyZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJYXNzZXJ0Tm90TnVsbChyZWdpb24pOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdENTU1N0eWxlRGVjbEl0ZW1NT0RFX0RFQ0xBUkFUSU9OKCkgewotCQlTdHJpbmcgdmFsdWUgPSAiY29sb3I6IGJsdWU7IjsKLQkJSURvY3VtZW50TG9hZGVyIGxvYWRlciA9IG5ldyBDU1NEb2N1bWVudExvYWRlcigpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudCA9IChJU3RydWN0dXJlZERvY3VtZW50KSBsb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCSgoQ1NTU291cmNlUGFyc2VyKSBzaGFyZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFyc2VyKCkpLnNldFBhcnNlck1vZGUoQ1NTU291cmNlUGFyc2VyLk1PREVfREVDTEFSQVRJT04pOwotCi0JCXNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5zZXQodmFsdWUpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gcmVnaW9uID0gc2hhcmVkU3RydWN0dXJlZERvY3VtZW50LmdldEZpcnN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCWFzc2VydE5vdE51bGwocmVnaW9uKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDU1NTdHlsZURlY2xJdGVtU1RZTEVfU0hFRVQoKSB7Ci0JCVN0cmluZyB2YWx1ZSA9ICJjb2xvcjogYmx1ZTsiOwotCQlJRG9jdW1lbnRMb2FkZXIgbG9hZGVyID0gbmV3IENTU0RvY3VtZW50TG9hZGVyKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc2hhcmVkU3RydWN0dXJlZERvY3VtZW50ID0gKElTdHJ1Y3R1cmVkRG9jdW1lbnQpIGxvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9TVFlMRVNIRUVUKTsKLQotCQlzaGFyZWRTdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0KHZhbHVlKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIHJlZ2lvbiA9IHNoYXJlZFN0cnVjdHVyZWREb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQlhc3NlcnROb3ROdWxsKHJlZ2lvbik7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q1NTTW9kZWwoKSB7Ci0KLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoZ2V0SFRNTERvY3VtZW50VGV4dCgpKTsKLQotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24gPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKTsKLQkJCWFzc2VydE5vdE51bGwocmVnaW9uKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldEhUTUxEb2N1bWVudFRleHQoKSB7Ci0JCVN0cmluZyB0ZXh0ID0gIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCI+XHJcbiIgKyAKLQkJCQkiPEhUTUw+PEhFQUQ+XHJcbiIgKyAKLQkJCQkiPE1FVEEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMVwiPlxyXG4iICsgCi0JCQkJIjxNRVRBIGh0dHAtZXF1aXY9XCJDb250ZW50LVN0eWxlLVR5cGVcIiBjb250ZW50PVwidGV4dC9jc3NcIj5cclxuIiArIAotCQkJCSI8VElUTEU+PC9USVRMRT5cclxuIiArIAotCQkJCSI8U1RZTEUgdHlwZT1cInRleHQvY3NzXCI+XHJcbiIgKyAKLQkJCQkiPCEtLVxyXG4iICsgCi0JCQkJIkJPRFl7XHJcbiIgKyAKLQkJCQkiICBjb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkiICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkZGRjk5O1xyXG4iICsgCi0JCQkJIn1cclxuIiArIAotCQkJCSJIMXtcclxuIiArIAotCQkJCSIgIGNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSIgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctdG9wOiAxMHB4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1yaWdodDogMHB4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1ib3R0b206IDEwcHg7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLWxlZnQ6IDBweDtcclxuIiArIAotCQkJCSIgIGJvcmRlci10b3Atc3R5bGUgOiBzb2xpZDtcclxuIiArIAotCQkJCSIgIGJvcmRlci10b3AtY29sb3IgOiB0ZWFsO1xyXG4iICsgCi0JCQkJIn1cclxuIiArIAotCQkJCSJIMntcclxuIiArIAotCQkJCSIgIGNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSIgIHRleHQtYWxpZ246IGNlbnRlcjtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctdG9wOiA3cHg7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLXJpZ2h0OiAwcHg7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLWJvdHRvbTogN3B4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1sZWZ0OiAwcHg7XHJcbiIgKyAKLQkJCQkiICBib3JkZXItdG9wLXN0eWxlIDogc29saWQ7XHJcbiIgKyAKLQkJCQkiICBib3JkZXItdG9wLWNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSJ9XHJcbiIgKyAKLQkJCQkiSDN7XHJcbiIgKyAKLQkJCQkiICBjb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkiICB0ZXh0LWFsaWduOiBjZW50ZXI7XHJcbiIgKyAKLQkJCQkiICBwYWRkaW5nLXRvcDogNHB4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1yaWdodDogMHB4O1xyXG4iICsgCi0JCQkJIiAgcGFkZGluZy1ib3R0b206IDRweDtcclxuIiArIAotCQkJCSIgIHBhZGRpbmctbGVmdDogMHB4O1xyXG4iICsgCi0JCQkJIiAgYm9yZGVyLXRvcC1zdHlsZSA6IHNvbGlkO1xyXG4iICsgCi0JCQkJIiAgYm9yZGVyLXRvcC1jb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkifVxyXG4iICsgCi0JCQkJIkhSe1xyXG4iICsgCi0JCQkJIiAgY29sb3IgOiB0ZWFsO1xyXG4iICsgCi0JCQkJIiAgaGVpZ2h0OiAzcHg7XHJcbiIgKyAKLQkJCQkifVxyXG4iICsgCi0JCQkJIlB7XHJcbiIgKyAKLQkJCQkiICBjb2xvciA6IHRlYWw7XHJcbiIgKyAKLQkJCQkifVxyXG4iICsgCi0JCQkJIlRIe1xyXG4iICsgCi0JCQkJIiAgY29sb3I6ICNGRkZGQ0M7XHJcbiIgKyAKLQkJCQkiICBiYWNrZ3JvdW5kLWNvbG9yIDogdGVhbDtcclxuIiArIAotCQkJCSJ9XHJcbiIgKyAKLQkJCQkiVER7XHJcbiIgKyAKLQkJCQkiICBjb2xvciA6IGJsYWNrO1xyXG4iICsgCi0JCQkJIiAgYmFja2dyb3VuZC1jb2xvciA6IHdoaXRlO1xyXG4iICsgCi0JCQkJIn1cclxuIiArIAotCQkJCSItLT5cclxuIiArIAotCQkJCSI8L1NUWUxFPlxyXG4iICsgCi0JCQkJIjwvSEVBRD48Qk9EWT5cclxuIiArIAotCQkJCSI8SDE+SGVhZGluZyAxIEhlYWRpbmcgMTwvSDE+XHJcbiIgKyAKLQkJCQkiPEgyPkhlYWRpbmcgMiBIZWFkaW5nIDI8L0gyPlxyXG4iICsgCi0JCQkJIjxIMz5IZWFkaW5nIDMgSGVhZGluZyAzPC9IMz5cclxuIiArIAotCQkJCSI8SFI+XHJcbiIgKyAKLQkJCQkiPFA+Tm9ybWFsIFRleHQ8L1A+XHJcbiIgKyAKLQkJCQkiPFAgc3R5bGU9XCJjb2xvciA6IHdoaXRlOyBiYWNrZ3JvdW5kLWNvbG9yIDogdGVhbDtcIj5Ob3JtYWwgVGV4dCB3aXRoIGlubGluZSBzdHlsZTwvUD5cclxuIiArIAotCQkJCSI8SFI+XHJcbiIgKyAKLQkJCQkiPFRBQkxFIGJvcmRlcj1cIjFcIj5cclxuIiArIAotCQkJCSIgIDxUQk9EWT5cclxuIiArIAotCQkJCSIgICAgPFRSPlxyXG4iICsgCi0JCQkJIiAgICAgIDxUSCBjb2xzcGFuPVwiM1wiPkhlYWRlciBDZWxsIG9mIFRhYmxlPC9USD5cclxuIiArIAotCQkJCSIgICAgPC9UUj5cclxuIiArIAotCQkJCSIgICAgPFRSPlxyXG4iICsgCi0JCQkJIiAgICAgIDxURD5EYXRhIENlbGwgb2YgVGFibGU8L1REPlxyXG4iICsgCi0JCQkJIiAgICAgIDxURD5EYXRhIENlbGwgb2YgVGFibGU8L1REPlxyXG4iICsgCi0JCQkJIiAgICAgIDxURD5EYXRhIENlbGwgb2YgVGFibGU8L1REPlxyXG4iICsgCi0JCQkJIiAgICA8L1RSPlxyXG4iICsgCi0JCQkJIiAgICA8VFI+XHJcbiIgKyAKLQkJCQkiICAgICAgPFREPkRhdGEgQ2VsbCBvZiBUYWJsZTwvVEQ+XHJcbiIgKyAKLQkJCQkiICAgICAgPFREPkRhdGEgQ2VsbCBvZiBUYWJsZTwvVEQ+XHJcbiIgKyAKLQkJCQkiICAgICAgPFREPkRhdGEgQ2VsbCBvZiBUYWJsZTwvVEQ+XHJcbiIgKyAKLQkJCQkiICAgIDwvVFI+XHJcbiIgKyAKLQkJCQkiICA8L1RCT0RZPlxyXG4iICsgCi0JCQkJIjwvVEFCTEU+XHJcbiIgKyAKLQkJCQkiPC9CT0RZPjwvSFRNTD4iOwotCQlyZXR1cm4gdGV4dDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTU2VsZWN0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTU2VsZWN0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmMjBjMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1NlbGVjdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy5zb3VyY2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuQ1NTU2VsZWN0b3JMaXN0SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU1NlbGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU2VsZWN0b3JDb21iaW5hdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU2VsZWN0b3JJdGVtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU2VsZWN0b3JMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU2ltcGxlU2VsZWN0b3I7Ci0KLQotcHVibGljIGNsYXNzIENTU1NlbGVjdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwMSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMSwgSDIsIEgzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMSwgSDIsIEgzIiwgMywgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDEiLCAxLCAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDEiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDEpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDIiLCAxLCAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDIiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDIpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDMiLCAxLCAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDMiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDIoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSFxcXFwsIEhcXDEsIEgzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIXFxcXCwgSFxcMSwgSDMiLCAzLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIXFxcXCIsIDEsIDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIXFxcXCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMSk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIXFwxIiwgMSwgMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkhcXDEiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDIpOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDMiLCAxLCAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDMiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDMoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDEucGFzdG9yYWwiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkgxLnBhc3RvcmFsIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDEucGFzdG9yYWwiLCAxLCAxMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMSIsIGZhbHNlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJwYXN0b3JhbCJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IwNCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJQLnBhc3RvcmFsLm1hcmluZSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiUC5wYXN0b3JhbC5tYXJpbmUiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJQLnBhc3RvcmFsLm1hcmluZSIsIDEsIDIwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMiwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsicGFzdG9yYWwiLCAibWFyaW5lIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjA1KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIioud2FybmluZyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiKi53YXJuaW5nIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiKi53YXJuaW5nIiwgMSwgMTAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiKiIsIHRydWUsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117Indhcm5pbmcifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDYoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiLndhcm5pbmciKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIi53YXJuaW5nIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiLndhcm5pbmciLCAxLCAxMDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIiLCB0cnVlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJ3YXJuaW5nIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjA3KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIipbbGFuZz1mcl0iKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIipbbGFuZz1mcl0iLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIqW2xhbmc9ZnJdIiwgMSwgMTAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiKiIsIHRydWUsIDEsIDAsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQXR0cmlidXRlcyhpdGVtLCBuZXcgU3RyaW5nW117Imxhbmc9ZnIifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMDgoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiW2xhbmc9ZnJdIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJbbGFuZz1mcl0iLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJbbGFuZz1mcl0iLCAxLCAxMDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIiLCB0cnVlLCAxLCAwLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckF0dHJpYnV0ZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJsYW5nPWZyIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjA5KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIiojbXlpZCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiKiNteWlkIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiKiNteWlkIiwgMSwgMTAwMDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMCwgMSwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JJRHMoaXRlbSwgbmV3IFN0cmluZ1tdeyJteWlkIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjEwKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIiNteWlkIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIjbXlpZCIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIiNteWlkIiwgMSwgMTAwMDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIiLCB0cnVlLCAwLCAwLCAxLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcklEcyhpdGVtLCBuZXcgU3RyaW5nW117Im15aWQifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTEoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDEjejk4eSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDEjejk4eSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkgxI3o5OHkiLCAxLCAxMDAwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgxIiwgZmFsc2UsIDAsIDAsIDEsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9ySURzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiejk4eSJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxMigpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMSBFTSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDEgRU0iLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMSBFTSIsIDMsIDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJFTSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxMygpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJESVYgKiBQIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJESVYgKiBQIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiRElWICogUCIsIDUsIDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJESVYiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiKiIsIHRydWUsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDMpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiICIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuREVTQ0VOREFOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oNCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTQoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiRElWIFAgKltocmVmXSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiRElWIFAgKltocmVmXSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkRJViBQICpbaHJlZl0iLCA1LCAxMDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJESVYiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgzKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIiAiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkRFU0NFTkRBTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDQpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMSwgMCwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JBdHRyaWJ1dGVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiaHJlZiJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxNSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJCT0RZID4gUCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiQk9EWSA+IFAiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJCT0RZID4gUCIsIDMsIDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJCT0RZIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiPiIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQ0hJTEQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjE2KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkRJViBPTD5MSSBQIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJESVYgT0wgPiBMSSBQIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiRElWIE9MID4gTEkgUCIsIDcsIDQsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJESVYiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiT0wiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMyk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICI+IiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5DSElMRCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oNCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkxJIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDUpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiICIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuREVTQ0VOREFOVCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oNik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTcoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiTUFUSCArIFAiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIk1BVEggKyBQIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiTUFUSCArIFAiLCAzLCAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiTUFUSCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIisiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkFESkFDRU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IxOCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMS5vcGVuZXIgKyBIMiIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDEub3BlbmVyICsgSDIiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMS5vcGVuZXIgKyBIMiIsIDMsIDEwMiwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkgxIiwgZmFsc2UsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117Im9wZW5lciJ9KTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIisiLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkFESkFDRU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDIiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMTkoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiRVhBTVBMRVtub3RhdGlvbj1kZWNpbWFsXSIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiRVhBTVBMRVtub3RhdGlvbj1kZWNpbWFsXSIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkVYQU1QTEVbbm90YXRpb249ZGVjaW1hbF0iLCAxLCAxMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJFWEFNUExFIiwgZmFsc2UsIDEsIDAsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQXR0cmlidXRlcyhpdGVtLCBuZXcgU3RyaW5nW117Im5vdGF0aW9uPWRlY2ltYWwifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjAoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiU1BBTltoZWxsbz1cIkNsZXZlbGFuZFwiXVtnb29kYnllPVwiQ29sdW1idXNcIl0iKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIlNQQU5baGVsbG89XCJDbGV2ZWxhbmRcIl1bZ29vZGJ5ZT1cIkNvbHVtYnVzXCJdIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiU1BBTltoZWxsbz1cIkNsZXZlbGFuZFwiXVtnb29kYnllPVwiQ29sdW1idXNcIl0iLCAxLCAyMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJTUEFOIiwgZmFsc2UsIDIsIDAsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQXR0cmlidXRlcyhpdGVtLCBuZXcgU3RyaW5nW117ImhlbGxvPVwiQ2xldmVsYW5kXCIiLCAiZ29vZGJ5ZT1cIkNvbHVtYnVzXCIifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjEoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiRElWID4gUDpmaXJzdC1jaGlsZCIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiRElWID4gUDpmaXJzdC1jaGlsZCIsIDEsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkRJViA+IFA6Zmlyc3QtY2hpbGQiLCAzLCAxMDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJESVYiLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICI+IiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5DSElMRCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIlAiLCBmYWxzZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImZpcnN0LWNoaWxkIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjIyKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIlA6Zmlyc3QtY2hpbGQgRU0iKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIlA6Zmlyc3QtY2hpbGQgRU0iLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJQOmZpcnN0LWNoaWxkIEVNIiwgMywgMTAyLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUCIsIGZhbHNlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiZmlyc3QtY2hpbGQifSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICIgIiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5ERVNDRU5EQU5UKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiRU0iLCBmYWxzZSwgMCwgMCwgMCwgMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjMoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiKiA+IEE6Zmlyc3QtY2hpbGQiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIiogPiBBOmZpcnN0LWNoaWxkIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiKiA+IEE6Zmlyc3QtY2hpbGQiLCAzLCAxMDEsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMCwgMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMSk7Ci0JCWNoZWNrU2VsZWN0b3JDb21iaW5hdG9yKGl0ZW0sICI+IiwgSUNTU1NlbGVjdG9yQ29tYmluYXRvci5DSElMRCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMik7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkEiLCBmYWxzZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImZpcnN0LWNoaWxkIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjI0KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkE6bGluayIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiQTpsaW5rIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiQTpsaW5rIiwgMSwgMTAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiQSIsIGZhbHNlLCAwLCAwLCAwLCAxKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsibGluayJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyNSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCI6bGluayIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiOmxpbmsiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICI6bGluayIsIDEsIDEwMCwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIiIsIHRydWUsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJsaW5rIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjI2KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkE6Zm9jdXM6aG92ZXIiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkE6Zm9jdXM6aG92ZXIiLCAxLCAwKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJBOmZvY3VzOmhvdmVyIiwgMSwgMjAxLCAwKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiQSIsIGZhbHNlLCAwLCAwLCAwLCAyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvclBzZXVkb05hbWVzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiZm9jdXMiLCAiaG92ZXIifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjcoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSFRNTDpsYW5nKGRlKSA+IFEiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIkhUTUw6bGFuZyhkZSkgPiBRIiwgMSwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSFRNTDpsYW5nKGRlKSA+IFEiLCAzLCAxMDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIVE1MIiwgZmFsc2UsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJsYW5nKGRlKSJ9KTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgxKTsKLQkJY2hlY2tTZWxlY3RvckNvbWJpbmF0b3IoaXRlbSwgIj4iLCBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yLkNISUxEKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgyKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiUSIsIGZhbHNlLCAwLCAwLCAwLCAwKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IyOCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJQID4gQTpsaW5rLCBBLmV4dGVybmFsOnZpc2l0ZWQiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIlAgPiBBOmxpbmssIEEuZXh0ZXJuYWw6dmlzaXRlZCIsIDIsIDApOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIlAgPiBBOmxpbmsiLCAzLCAxMDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDAsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiPiIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQ0hJTEQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJBIiwgZmFsc2UsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJsaW5rIn0pOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigxKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkEuZXh0ZXJuYWw6dmlzaXRlZCIsIDEsIDIwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkEiLCBmYWxzZSwgMCwgMSwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiZXh0ZXJuYWwifSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117InZpc2l0ZWQifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMjkoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiUCNob2dlOTggKyAqOmhvdmVyID4gQTpsaW5rLCBBLmV4dGVybmFsOnZpc2l0ZWQiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIlAjaG9nZTk4ICsgKjpob3ZlciA+IEE6bGluaywgQS5leHRlcm5hbDp2aXNpdGVkIiwgMiwgMCk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiUCNob2dlOTggKyAqOmhvdmVyID4gQTpsaW5rIiwgNSwgMTAyMDIsIDApOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDAsIDEsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9ySURzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiaG9nZTk4In0pOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDEpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiKyIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQURKQUNFTlQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDIpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMCwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117ImhvdmVyIn0pOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDMpOwotCQljaGVja1NlbGVjdG9yQ29tYmluYXRvcihpdGVtLCAiPiIsIElDU1NTZWxlY3RvckNvbWJpbmF0b3IuQ0hJTEQpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDQpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJBIiwgZmFsc2UsIDAsIDAsIDAsIDEpOwotCQljaGVja1NpbXBsZVNlbGVjdG9yUHNldWRvTmFtZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyJsaW5rIn0pOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigxKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIkEuZXh0ZXJuYWw6dmlzaXRlZCIsIDEsIDIwMSwgMCk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIkEiLCBmYWxzZSwgMCwgMSwgMCwgMSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiZXh0ZXJuYWwifSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhpdGVtLCBuZXcgU3RyaW5nW117InZpc2l0ZWQifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzAoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiSDEuMTIzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMS4xMjMiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJIMS4xMjMiLCAxLCAxMDEsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMSIsIGZhbHNlLCAwLCAxLCAwLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxMjMifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzEoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiUC4xMjMuNDU2Iik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJQLjEyMy40NTYiLCAxLCAyKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICJQLjEyMy40NTYiLCAxLCAyMDEsIDIpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJQIiwgZmFsc2UsIDAsIDIsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyMyIsICI0NTYifSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNlbGVjdG9yMzIoKSB7Ci0JCUlDU1NTZWxlY3Rvckxpc3QgbGlzdCA9IGNyZWF0ZVNlbGVjdG9yTGlzdCgiKi4xMjMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIiouMTIzIiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiKi4xMjMiLCAxLCAxMDAsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICIqIiwgdHJ1ZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjMzKCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIi4xMjMiKTsKLQkJY2hlY2tTZWxlY3Rvckxpc3QobGlzdCwgIi4xMjMiLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIuMTIzIiwgMSwgMTAwLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiIiwgdHJ1ZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMTIzIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjM0KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgxLjF4MyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDEuMXgzIiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDEuMXgzIiwgMSwgMTAxLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDEiLCBmYWxzZSwgMCwgMSwgMCwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMXgzIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjM1KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIkgyLjEyMyM0NiIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiSDIuMTIzIzQ2IiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDIuMTIzIzQ2IiwgMSwgMTAxMDEsIDEpOwotCi0JCWl0ZW0gPSBzZWxlY3Rvci5nZXRJdGVtKDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yKGl0ZW0sICJIMiIsIGZhbHNlLCAwLCAxLCAxLCAwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoaXRlbSwgbmV3IFN0cmluZ1tdeyIxMjMifSk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JJRHMoaXRlbSwgbmV3IFN0cmluZ1tdeyI0NiJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzNigpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCJIMy4xeDMjNHQyIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICJIMy4xeDMjNHQyIiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiSDMuMXgzIzR0MiIsIDEsIDEwMTAxLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiSDMiLCBmYWxzZSwgMCwgMSwgMSwgMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3JDbGFzc2VzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiMXgzIn0pOwotCQljaGVja1NpbXBsZVNlbGVjdG9ySURzKGl0ZW0sIG5ldyBTdHJpbmdbXXsiNHQyIn0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZWxlY3RvcjM3KCkgewotCQlJQ1NTU2VsZWN0b3JMaXN0IGxpc3QgPSBjcmVhdGVTZWxlY3Rvckxpc3QoIiouMTIzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIqLjEyMyIsIDEsIDEpOwotCi0JCUlDU1NTZWxlY3RvciBzZWxlY3RvcjsKLQkJSUNTU1NlbGVjdG9ySXRlbSBpdGVtOwotCi0JCXNlbGVjdG9yID0gbGlzdC5nZXRTZWxlY3RvcigwKTsKLQkJY2hlY2tTZWxlY3RvcihzZWxlY3RvciwgIiouMTIzIiwgMSwgMTAwLCAxKTsKLQotCQlpdGVtID0gc2VsZWN0b3IuZ2V0SXRlbSgwKTsKLQkJY2hlY2tTaW1wbGVTZWxlY3RvcihpdGVtLCAiKiIsIHRydWUsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyMyJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzOCgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIuMTIzIik7Ci0JCWNoZWNrU2VsZWN0b3JMaXN0KGxpc3QsICIuMTIzIiwgMSwgMSk7Ci0KLQkJSUNTU1NlbGVjdG9yIHNlbGVjdG9yOwotCQlJQ1NTU2VsZWN0b3JJdGVtIGl0ZW07Ci0KLQkJc2VsZWN0b3IgPSBsaXN0LmdldFNlbGVjdG9yKDApOwotCQljaGVja1NlbGVjdG9yKHNlbGVjdG9yLCAiLjEyMyIsIDEsIDEwMCwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIiIsIHRydWUsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyMyJ9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2VsZWN0b3IzOSgpIHsKLQkJSUNTU1NlbGVjdG9yTGlzdCBsaXN0ID0gY3JlYXRlU2VsZWN0b3JMaXN0KCIuMTIzZjU2NyIpOwotCQljaGVja1NlbGVjdG9yTGlzdChsaXN0LCAiLjEyM2Y1NjciLCAxLCAxKTsKLQotCQlJQ1NTU2VsZWN0b3Igc2VsZWN0b3I7Ci0JCUlDU1NTZWxlY3Rvckl0ZW0gaXRlbTsKLQotCQlzZWxlY3RvciA9IGxpc3QuZ2V0U2VsZWN0b3IoMCk7Ci0JCWNoZWNrU2VsZWN0b3Ioc2VsZWN0b3IsICIuMTIzZjU2NyIsIDEsIDEwMCwgMSk7Ci0KLQkJaXRlbSA9IHNlbGVjdG9yLmdldEl0ZW0oMCk7Ci0JCWNoZWNrU2ltcGxlU2VsZWN0b3IoaXRlbSwgIiIsIHRydWUsIDAsIDEsIDAsIDApOwotCQljaGVja1NpbXBsZVNlbGVjdG9yQ2xhc3NlcyhpdGVtLCBuZXcgU3RyaW5nW117IjEyM2Y1NjcifSk7Ci0JfQotCi0KLQlwcml2YXRlIHZvaWQgY2hlY2tTZWxlY3Rvckxpc3QoSUNTU1NlbGVjdG9yTGlzdCBsaXN0LCBTdHJpbmcgZm9ybWF0dGVkU291cmNlLCBpbnQgblNlbGVjdG9ycywgaW50IG5FcnJvcnMpIHsKLQkJYXNzZXJ0RXF1YWxzKGZvcm1hdHRlZFNvdXJjZSwgbGlzdC5nZXRTdHJpbmcoKSk7Ci0JCWFzc2VydEVxdWFscyhuU2VsZWN0b3JzLCBsaXN0LmdldExlbmd0aCgpKTsKLQkJYXNzZXJ0RXF1YWxzKG5FcnJvcnMsIGxpc3QuZ2V0RXJyb3JDb3VudCgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tTZWxlY3RvcihJQ1NTU2VsZWN0b3Igc2VsZWN0b3IsIFN0cmluZyBmb3JtYXR0ZWRTb3VyY2UsIGludCBpdGVtcywgaW50IHNwZWNpZmljaXR5LCBpbnQgbkVycm9ycykgewotCQlhc3NlcnRFcXVhbHMoZm9ybWF0dGVkU291cmNlLCBzZWxlY3Rvci5nZXRTdHJpbmcoKSk7Ci0JCWFzc2VydEVxdWFscyhpdGVtcywgc2VsZWN0b3IuZ2V0TGVuZ3RoKCkpOwotCQlhc3NlcnRFcXVhbHMoc3BlY2lmaWNpdHksIHNlbGVjdG9yLmdldFNwZWNpZmljaXR5KCkpOwotCQlhc3NlcnRFcXVhbHMobkVycm9ycywgc2VsZWN0b3IuZ2V0RXJyb3JDb3VudCgpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tTaW1wbGVTZWxlY3RvcihJQ1NTU2VsZWN0b3JJdGVtIHNlbGVjdG9yLCBTdHJpbmcgZm9ybWF0dGVkU291cmNlLCBib29sZWFuIGlzVW5pdmVyc2FsLCBpbnQgbkF0dHJpYnV0ZXMsIGludCBuQ2xhc3NlcywgaW50IG5JZHMsIGludCBuUHNldWRvTmFtZXMpIHsKLQkJYXNzZXJ0VHJ1ZShzZWxlY3RvciBpbnN0YW5jZW9mIElDU1NTaW1wbGVTZWxlY3Rvcik7Ci0JCWFzc2VydEVxdWFscyhmb3JtYXR0ZWRTb3VyY2UsICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0TmFtZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKGlzVW5pdmVyc2FsLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmlzVW5pdmVyc2FsKCkpOwotCQlhc3NlcnRFcXVhbHMobkF0dHJpYnV0ZXMsICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0TnVtT2ZBdHRyaWJ1dGVzKCkpOwotCQlhc3NlcnRFcXVhbHMobkNsYXNzZXMsICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0TnVtT2ZDbGFzc2VzKCkpOwotCQlhc3NlcnRFcXVhbHMobklkcywgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZklEcygpKTsKLQkJYXNzZXJ0RXF1YWxzKG5Qc2V1ZG9OYW1lcywgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZlBzZXVkb05hbWVzKCkpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NpbXBsZVNlbGVjdG9yQXR0cmlidXRlcyhJQ1NTU2VsZWN0b3JJdGVtIHNlbGVjdG9yLCBTdHJpbmdbXSBpdGVtcykgewotCQlpbnQgbkl0ZW1zID0gKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZkF0dHJpYnV0ZXMoKTsKLQkJYXNzZXJ0RXF1YWxzKGl0ZW1zLmxlbmd0aCwgbkl0ZW1zKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuSXRlbXM7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKGl0ZW1zW2ldLCAoKElDU1NTaW1wbGVTZWxlY3Rvcikgc2VsZWN0b3IpLmdldEF0dHJpYnV0ZShpKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tTaW1wbGVTZWxlY3RvckNsYXNzZXMoSUNTU1NlbGVjdG9ySXRlbSBzZWxlY3RvciwgU3RyaW5nW10gaXRlbXMpIHsKLQkJaW50IG5JdGVtcyA9ICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0TnVtT2ZDbGFzc2VzKCk7Ci0JCWFzc2VydEVxdWFscyhpdGVtcy5sZW5ndGgsIG5JdGVtcyk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbkl0ZW1zOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyhpdGVtc1tpXSwgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXRDbGFzcyhpKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tTaW1wbGVTZWxlY3RvcklEcyhJQ1NTU2VsZWN0b3JJdGVtIHNlbGVjdG9yLCBTdHJpbmdbXSBpdGVtcykgewotCQlpbnQgbkl0ZW1zID0gKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZklEcygpOwotCQlhc3NlcnRFcXVhbHMoaXRlbXMubGVuZ3RoLCBuSXRlbXMpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG5JdGVtczsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoaXRlbXNbaV0sICgoSUNTU1NpbXBsZVNlbGVjdG9yKSBzZWxlY3RvcikuZ2V0SUQoaSkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrU2ltcGxlU2VsZWN0b3JQc2V1ZG9OYW1lcyhJQ1NTU2VsZWN0b3JJdGVtIHNlbGVjdG9yLCBTdHJpbmdbXSBpdGVtcykgewotCQlpbnQgbkl0ZW1zID0gKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXROdW1PZlBzZXVkb05hbWVzKCk7Ci0JCWFzc2VydEVxdWFscyhpdGVtcy5sZW5ndGgsIG5JdGVtcyk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbkl0ZW1zOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscyhpdGVtc1tpXSwgKChJQ1NTU2ltcGxlU2VsZWN0b3IpIHNlbGVjdG9yKS5nZXRQc2V1ZG9OYW1lKGkpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja1NlbGVjdG9yQ29tYmluYXRvcihJQ1NTU2VsZWN0b3JJdGVtIGNvbWJpbmF0b3IsIFN0cmluZyBmb3JtYXR0ZWRTb3VyY2UsIGludCBjb21iaW5hdG9yVHlwZSkgewotCQlhc3NlcnRUcnVlKGNvbWJpbmF0b3IgaW5zdGFuY2VvZiBJQ1NTU2VsZWN0b3JDb21iaW5hdG9yKTsKLQkJYXNzZXJ0RXF1YWxzKGZvcm1hdHRlZFNvdXJjZSwgKChJQ1NTU2VsZWN0b3JDb21iaW5hdG9yKSBjb21iaW5hdG9yKS5nZXRTdHJpbmcoKSk7Ci0JCWFzc2VydEVxdWFscyhjb21iaW5hdG9yVHlwZSwgKChJQ1NTU2VsZWN0b3JDb21iaW5hdG9yKSBjb21iaW5hdG9yKS5nZXRDb21iaW5hdG9yVHlwZSgpKTsKLQl9Ci0KLQlwcml2YXRlIElDU1NTZWxlY3Rvckxpc3QgY3JlYXRlU2VsZWN0b3JMaXN0KFN0cmluZyBzdHIpIHsKLQkJcmV0dXJuIG5ldyBDU1NTZWxlY3Rvckxpc3RJbXBsKHN0cik7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NTb3VyY2VQYXJzZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTU291cmNlUGFyc2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDI5MWRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NTb3VyY2VQYXJzZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuc291cmNlOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JVGV4dFJlZ2lvbkxpc3Q7Ci0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBDU1NTb3VyY2VQYXJzZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAxLmNzcyIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMi5jc3MiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW4zKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDMuY3NzIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuNCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA0LmNzcyIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlT3BlbjUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5jc3MiLCBNT0RFX09QRU4pOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZU9wZW42KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDYuY3NzIiwgTU9ERV9PUEVOKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VPcGVuNygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA3LmNzcyIsIE1PREVfT1BFTik7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAxLmNzcyIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDIuY3NzIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMy5jc3MiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kNCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA0LmNzcyIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VBcHBlbmQ1KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDUuY3NzIiwgTU9ERV9BUFBFTkQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUFwcGVuZDYoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNi5jc3MiLCBNT0RFX0FQUEVORCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlQXBwZW5kNygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA3LmNzcyIsIE1PREVfQVBQRU5EKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDEuY3NzIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwMi5jc3MiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0MygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTAzLmNzcyIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQ0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDQuY3NzIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZUluc2VydDUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzb3VyY2VQYXJzZXJUZXN0KCJzYW1wbGUwNS5jc3MiLCBNT0RFX0lOU0VSVCk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlSW5zZXJ0NigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXNvdXJjZVBhcnNlclRlc3QoInNhbXBsZTA2LmNzcyIsIE1PREVfSU5TRVJUKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTb3VyY2VJbnNlcnQ3KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJc291cmNlUGFyc2VyVGVzdCgic2FtcGxlMDcuY3NzIiwgTU9ERV9JTlNFUlQpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHJpdmF0ZSB2b2lkIHNvdXJjZVBhcnNlclRlc3QoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgbW9kZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gbnVsbDsKLQkJaWYgKG1vZGUuZXF1YWxzKE1PREVfT1BFTikpIHsKLQkJCW1vZGVsID0gcmVhZE1vZGVsT3BlbihmaWxlbmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiAobW9kZS5lcXVhbHMoTU9ERV9BUFBFTkQpKSB7Ci0JCQltb2RlbCA9IHJlYWRNb2RlbEFwcGVuZChmaWxlbmFtZSk7Ci0JCX0KLQkJZWxzZSBpZiAobW9kZS5lcXVhbHMoTU9ERV9JTlNFUlQpKSB7Ci0JCQltb2RlbCA9IHJlYWRNb2RlbEluc2VydChmaWxlbmFtZSk7Ci0JCX0KLQkJU3RyaW5nIHJlc3VsdCA9IGR1bXBSZWdpb25zKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpKTsKLQkJY29tcGFyZVJlc3VsdChyZXN1bHQsICJDU1NTb3VyY2VQYXJzZXJUZXN0LSIgKyBmaWxlbmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJY2xvc2VNb2RlbChtb2RlbCk7Ci0JfQotCi0JcHJpdmF0ZSBJQ1NTTW9kZWwgcmVhZE1vZGVsT3BlbihTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBzb3VyY2UgPSBGaWxlVXRpbC5jcmVhdGVTdHJpbmcoRklMRVNfRElSLCBmaWxlbmFtZSk7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgc291cmNlKTsKLQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSBJQ1NTTW9kZWwgcmVhZE1vZGVsQXBwZW5kKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZSA9IEZpbGVVdGlsLmNyZWF0ZVN0cmluZyhGSUxFU19ESVIsIGZpbGVuYW1lKTsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGgoKTsgaSsrKSB7Ci0JCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCBpLCAwLCBzb3VyY2Uuc3Vic3RyaW5nKGksIGkgKyAxKSk7Ci0JCX0KLQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJpdmF0ZSBJQ1NTTW9kZWwgcmVhZE1vZGVsSW5zZXJ0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZSA9IEZpbGVVdGlsLmNyZWF0ZVN0cmluZyhGSUxFU19ESVIsIGZpbGVuYW1lKTsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGgoKTsgaSsrKSB7Ci0JCQlpbnQgdGV4dEluZGV4ID0gc291cmNlLmxlbmd0aCgpIC0gaSAtIDE7Ci0JCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCBzb3VyY2Uuc3Vic3RyaW5nKHRleHRJbmRleCwgdGV4dEluZGV4ICsgMSkpOwotCQl9Ci0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgdm9pZCBjbG9zZU1vZGVsKElDU1NNb2RlbCBtb2RlbCkgewotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wUmVnaW9ucyhJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50KSB7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWJ1Zi5hcHBlbmQoZHVtcFJlZ2lvbnMoZG9jdW1lbnQuZ2V0Rmlyc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSkpOwotCQlyZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZHVtcFJlZ2lvbnMoSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiByZWdpb24pIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJZG8gewotCQkJYnVmLmFwcGVuZChkdW1wT25lUmVnaW9uKHJlZ2lvbikpOwotCQkJcmVnaW9uID0gcmVnaW9uLmdldE5leHQoKTsKLQkJfQotCQl3aGlsZSAocmVnaW9uICE9IG51bGwpOwotCi0JCWJ1Zi5hcHBlbmQoRmlsZVV0aWwuY29tbW9uRU9MICsgIi0tLS0tLS0iICsgRmlsZVV0aWwuY29tbW9uRU9MKTsgLy8kTk9OLU5MUy0xJAotCi0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wT25lUmVnaW9uKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24pIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJYnVmLmFwcGVuZChkb2N1bWVudFJlZ2lvbi50b1N0cmluZygpKTsKLQkJYnVmLmFwcGVuZChGaWxlVXRpbC5jb21tb25FT0wgKyAiICAgICIpOyAvLyROT04tTkxTLTEkCi0KLQkJSVRleHRSZWdpb25MaXN0IHJlZ2lvbkxpc3QgPSBkb2N1bWVudFJlZ2lvbi5nZXRSZWdpb25zKCk7Ci0JCUl0ZXJhdG9yIGkgPSByZWdpb25MaXN0Lml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkgewotCQkJSVRleHRSZWdpb24gdGV4dFJlZ2lvbiA9IChJVGV4dFJlZ2lvbikgaS5uZXh0KCk7Ci0JCQlidWYuYXBwZW5kKHRleHRSZWdpb24udG9TdHJpbmcoKSk7Ci0JCQlidWYuYXBwZW5kKCIsICIpOyAvLyROT04tTkxTLTEkCi0JCX0KLQkJYnVmLmFwcGVuZChGaWxlVXRpbC5jb21tb25FT0wpOyAvLyROT04tTkxTLTEkCi0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gZkR1bXAgPSBmYWxzZTsKLQotCXByaXZhdGUgdm9pZCBjb21wYXJlUmVzdWx0KFN0cmluZyBhY3R1YWwsIFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJaWYgKGZEdW1wKSB7Ci0JCQlGaWxlVXRpbC5kdW1wU3RyaW5nKGFjdHVhbCwgUkVTVUxUU19ESVIsIGZpbGVuYW1lKTsKLQkJfQotCQllbHNlIHsKLQkJCVN0cmluZyByZXN1bHQgPSBGaWxlVXRpbC5jcmVhdGVTdHJpbmcoUkVTVUxUU19ESVIsIGZpbGVuYW1lKTsKLQkJCWFzc2VydEVxdWFscyhyZXN1bHQsIGFjdHVhbCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRklMRVNfRElSID0gInNyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBSRVNVTFRTX0RJUiA9ICJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFX09QRU4gPSAiTU9ERV9PUEVOIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNT0RFX0FQUEVORCA9ICJNT0RFX0FQUEVORCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTU9ERV9JTlNFUlQgPSAiTU9ERV9JTlNFUlQiOyAvLyROT04tTkxTLTEkCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1RleHRQYXJzZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTVGV4dFBhcnNlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTdhY2I5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy9zb3VyY2UvQ1NTVGV4dFBhcnNlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuc291cmNlOwotCi1pbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucGFyc2Vyei5DU1NUZXh0UGFyc2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wYXJzZXJ6LkNTU1RleHRUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLQotCi1wdWJsaWMgY2xhc3MgQ1NTVGV4dFBhcnNlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdFRleHQxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTAxLmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRleHQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTAyLmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRleHQzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTAzLmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRleHQ0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTA0LmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRleHQ1KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTA1LmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRleHQ2KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTA2LmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFRleHQ3KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJdGV4dFBhcnNlclRlc3QoInNhbXBsZTA3LmNzcyIpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JcHJpdmF0ZSB2b2lkIHRleHRQYXJzZXJUZXN0KFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHNvdXJjZSA9IGNyZWF0ZVN0cmluZyhmaWxlbmFtZSk7IC8vJE5PTi1OTFMtMSQKLQkJQ1NTVGV4dFBhcnNlciBwYXJzZXIgPSBuZXcgQ1NTVGV4dFBhcnNlcihDU1NUZXh0UGFyc2VyLk1PREVfU1RZTEVTSEVFVCwgc291cmNlKTsKLQkJU3RyaW5nIHJlc3VsdCA9IGR1bXBSZWdpb25zKHBhcnNlci5nZXRUb2tlbkxpc3QoKSk7Ci0JCWNvbXBhcmVSZXN1bHQocmVzdWx0LCAiQ1NTVGV4dFBhcnNlclRlc3QtIiArIGZpbGVuYW1lKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCXByaXZhdGUgU3RyaW5nIGNyZWF0ZVN0cmluZyhTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIEZpbGVVdGlsLmNyZWF0ZVN0cmluZyhGSUxFU19ESVIsIGZpbGVuYW1lKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBkdW1wUmVnaW9ucyhMaXN0IHRva2VucykgewotCQlTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlJdGVyYXRvciBpID0gdG9rZW5zLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChpLmhhc05leHQoKSkgewotCQkJYnVmLmFwcGVuZChkdW1wT25lUmVnaW9uKChDU1NUZXh0VG9rZW4pIGkubmV4dCgpKSk7Ci0JCX0KLQotCQlidWYuYXBwZW5kKEZpbGVVdGlsLmNvbW1vbkVPTCArICItLS0tLS0tIiArIEZpbGVVdGlsLmNvbW1vbkVPTCk7IC8vJE5PTi1OTFMtMSQKLQotCQlyZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgZHVtcE9uZVJlZ2lvbihDU1NUZXh0VG9rZW4gdG9rZW4pIHsKLQkJU3RyaW5nQnVmZmVyIGJ1ZiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQotCQlidWYuYXBwZW5kKCJbIik7IC8vJE5PTi1OTFMtMSQKLQkJYnVmLmFwcGVuZCh0b2tlbi5pbWFnZSk7Ci0JCWJ1Zi5hcHBlbmQoIl0gIik7IC8vJE5PTi1OTFMtMSQKLQkJYnVmLmFwcGVuZCh0b2tlbi5raW5kKTsKLQkJYnVmLmFwcGVuZCgiIC0gIik7IC8vJE5PTi1OTFMtMSQKLQkJYnVmLmFwcGVuZCh0b2tlbi5zdGFydCk7Ci0JCWJ1Zi5hcHBlbmQoIiwgIik7IC8vJE5PTi1OTFMtMSQKLQkJYnVmLmFwcGVuZCh0b2tlbi5sZW5ndGgpOwotCi0JCWJ1Zi5hcHBlbmQoRmlsZVV0aWwuY29tbW9uRU9MKTsgLy8kTk9OLU5MUy0xJAotCQlyZXR1cm4gYnVmLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGZEdW1wID0gZmFsc2U7Ci0KLQlwcml2YXRlIHZvaWQgY29tcGFyZVJlc3VsdChTdHJpbmcgYWN0dWFsLCBTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChmRHVtcCkgewotCQkJRmlsZVV0aWwuZHVtcFN0cmluZyhhY3R1YWwsIFJFU1VMVFNfRElSLCBmaWxlbmFtZSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlTdHJpbmcgcmVzdWx0ID0gRmlsZVV0aWwuY3JlYXRlU3RyaW5nKFJFU1VMVFNfRElSLCBmaWxlbmFtZSk7Ci0JCQlhc3NlcnRFcXVhbHMocmVzdWx0LCBhY3R1YWwpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZJTEVTX0RJUiA9ICJzcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcyI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUkVTVUxUU19ESVIgPSAic3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cyI7Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1VybFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3NvdXJjZS9DU1NVcmxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNTk5YWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvc291cmNlL0NTU1VybFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMuc291cmNlOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucGFyc2VyLkNTU1NvdXJjZVBhcnNlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucGFyc2Vyei5DU1NSZWdpb25Db250ZXh0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC51dGlsLkNTU1V0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklUZXh0UmVnaW9uTGlzdDsKLQotcHVibGljIGNsYXNzIENTU1VybFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBEZWNsYXJhdGlvbjogd2l0aG91dCBxdW90ZXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb24xKCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCSgoQ1NTU291cmNlUGFyc2VyKSBkb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9ERUNMQVJBVElPTl9WQUxVRSk7Ci0JCWRvY3VtZW50LnNldCgiYmFja2dyb3VuZC1pbWFnZTogdXJsKHdoaXRlIHNwYWNlLmdpZik7Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCi0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBEZWNsYXJhdGlvbjogd2l0aG91dCBxdW90ZXMsIHdpdGggc3Vycm91bmRlZCBzcGFjZQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvbjIoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIGRvY3VtZW50LmdldFBhcnNlcigpKS5zZXRQYXJzZXJNb2RlKENTU1NvdXJjZVBhcnNlci5NT0RFX0RFQ0xBUkFUSU9OX1ZBTFVFKTsKLQkJZG9jdW1lbnQuc2V0KCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoICB3aGl0ZSBzcGFjZS5naWYgICk7Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCi0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBEZWNsYXJhdGlvbjogd2l0aCBzaW5nbGUgcXVvdGUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RGVjbGFyYXRpb24zKCkgewotCQlJQ1NTTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCSgoQ1NTU291cmNlUGFyc2VyKSBkb2N1bWVudC5nZXRQYXJzZXIoKSkuc2V0UGFyc2VyTW9kZShDU1NTb3VyY2VQYXJzZXIuTU9ERV9ERUNMQVJBVElPTl9WQUxVRSk7Ci0JCWRvY3VtZW50LnNldCgiYmFja2dyb3VuZC1pbWFnZTogdXJsKFwnd2hpdGUgc3BhY2UuZ2lmXCcpOyIpOyAvLyROT04tTkxTLTEkCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0JLyoqCi0JICogRGVjbGFyYXRpb246IHdpdGggZG91YmxlIHF1b3RlCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlY2xhcmF0aW9uNCgpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkoKENTU1NvdXJjZVBhcnNlcikgZG9jdW1lbnQuZ2V0UGFyc2VyKCkpLnNldFBhcnNlck1vZGUoQ1NTU291cmNlUGFyc2VyLk1PREVfREVDTEFSQVRJT05fVkFMVUUpOwotCQlkb2N1bWVudC5zZXQoImJhY2tncm91bmQtaW1hZ2U6IHVybChcIndoaXRlIHNwYWNlLmdpZlwiKTsiKTsgLy8kTk9OLU5MUy0xJAotCQlVcmxJbmZvW10gdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0KLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIERlY2xhcmF0aW9uOiB0d28gdXJscwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWNsYXJhdGlvbjUoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIGRvY3VtZW50LmdldFBhcnNlcigpKS5zZXRQYXJzZXJNb2RlKENTU1NvdXJjZVBhcnNlci5NT0RFX0RFQ0xBUkFUSU9OX1ZBTFVFKTsKLQkJZG9jdW1lbnQuc2V0KCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwod2hpdGUgc3BhY2UuZ2lmKTsgbGlzdC1zdHlsZS1pbWFnZTogdXJsKHN0eWxlIGltYWdlLmdpZik7Iik7IC8vJE5PTi1OTFMtMSQKLQkJVXJsSW5mb1tdIHVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCi0JCWFzc2VydEVxdWFscygyLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMV0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzdHlsZSBpbWFnZS5naWYiLCB1cmxzWzFdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIFN0eWxlIHJ1bGU6IHR3byB1cmxzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFN0eWxlUnVsZTEoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJZG9jdW1lbnQuc2V0KCJMSSB7IGJhY2tncm91bmQtaW1hZ2U6IHVybCh3aGl0ZSBzcGFjZS5naWYpO1xyXG5saXN0LXN0eWxlLWltYWdlOiB1cmwoc3R5bGUgaW1hZ2UuZ2lmKTsgfSIpOyAvLyROT04tTkxTLTEkCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQotCQlhc3NlcnRFcXVhbHMoMiwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzFdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygic3R5bGUgaW1hZ2UuZ2lmIiwgdXJsc1sxXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBJbXBvcnQgcnVsZSBhbmQgc3R5bGUgcnVsZTogd2l0aG91dCBxdW90ZXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U29tZVJ1bGVzMSgpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlkb2N1bWVudC5zZXQoIkBpbXBvcnQgdXJsKHdoaXRlIHNwYWNlLmNzcyk7TEkgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwod2hpdGUgc3BhY2UuZ2lmKTtsaXN0LXN0eWxlLWltYWdlOiB1cmwoc3R5bGUgaW1hZ2UuZ2lmKTsgfSIpOyAvLyROT04tTkxTLTEkCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQotCQlhc3NlcnRFcXVhbHMoMywgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmNzcyIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzFdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1sxXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMl0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzdHlsZSBpbWFnZS5naWYiLCB1cmxzWzJdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIERlY2xhcmF0aW9uOiBUd28gdXJscyBidXQgcGFyZW50aGVzaXMgYXJlIG1pc3NlZCwgc28gY29uY2F0ZW5hdGVkIHVybAotCSAqIGlzIGlkZW50aWZpZWQuIEJ5IGFkZGluZyBwYXJlbnRoZXNpcywgdXJscyBhcmUgY29ycmVjdGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RGaXhFcnJvcjEoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJKChDU1NTb3VyY2VQYXJzZXIpIGRvY3VtZW50LmdldFBhcnNlcigpKS5zZXRQYXJzZXJNb2RlKENTU1NvdXJjZVBhcnNlci5NT0RFX0RFQ0xBUkFUSU9OX1ZBTFVFKTsKLQkJLy8gX19fX19fX19fX19fMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkKLQkJZG9jdW1lbnQuc2V0KCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwod2hpdGUgc3BhY2UuZ2lmOyBsaXN0LXN0eWxlLWltYWdlOiB1cmxzdHlsZSBpbWFnZS5naWYpOyIpOyAvLyROT04tTkxTLTEkCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5naWY7IGxpc3Qtc3R5bGUtaW1hZ2U6IHVybHN0eWxlIGltYWdlLmdpZiIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0KLQkJLy8gY29ycmVjdCBmaXJzdCB1cmwKLQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMzcsIDAsICIpIik7IC8vJE5PTi1OTFMtMSQKLQkJdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygxLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQotCQkvLyBjb3JyZWN0IHNlY29uZCB1cmwKLQkJZG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNjEsIDAsICIoIik7IC8vJE5PTi1OTFMtMSQKLQkJdXJscyA9IHBpY2t1cFVybChkb2N1bWVudCk7Ci0JCWFzc2VydEVxdWFscygyLCB1cmxzLmxlbmd0aCk7Ci0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzBdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1swXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19ERUNMQVJBVElPTl9WQUxVRV9VUkksIHVybHNbMV0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJzdHlsZSBpbWFnZS5naWYiLCB1cmxzWzFdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCX0KLQotCS8qKgotCSAqIEltcG9ydCBydWxlIGFuZCBzdHlsZSBydWxlOiBUd28gdXJscyBidXQgcGFyZW50aGVzaXMgYXJlIG1pc3NlZCwgc28KLQkgKiBjb25jYXRlbmF0ZWQgdXJsIGlzIGlkZW50aWZpZWQuIEJ5IGFkZGluZyBwYXJlbnRoZXNpcywgdXJscyBhcmUKLQkgKiBjb3JyZWN0ZWQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEZpeEVycm9yMigpIHsKLQkJSUNTU01vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlTW9kZWwoKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkvLyBfX19fX19fX19fX18wMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OQotCQlkb2N1bWVudC5zZXQoIkBpbXBvcnQgdXJsKHdoaXRlIHNwYWNlLmNzcztMSSB7IGJhY2tncm91bmQtaW1hZ2U6IHVybHdoaXRlIHNwYWNlLmdpZik7IH0iKTsgLy8kTk9OLU5MUy0xJAkJCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKDEsIHVybHMubGVuZ3RoKTsKLQkJYXNzZXJ0RXF1YWxzKENTU1JlZ2lvbkNvbnRleHRzLkNTU19VUkksIHVybHNbMF0uZ2V0VHlwZSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJ3aGl0ZSBzcGFjZS5jc3M7TEkgeyBiYWNrZ3JvdW5kLWltYWdlOiB1cmx3aGl0ZSBzcGFjZS5naWYiLCB1cmxzWzBdLmdldFVybCgpKTsgLy8kTk9OLU5MUy0xJAotCi0JCS8vIGNvcnJlY3QgZmlyc3QgdXJsCi0JCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDI3LCAwLCAiKSIpOyAvLyROT04tTkxTLTEkCi0JCXVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmNzcyIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0KLQkJLy8gY29ycmVjdCBzZWNvbmQgdXJsCi0JCWRvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDU1LCAwLCAiKCIpOyAvLyROT04tTkxTLTEkCi0JCXVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMiwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmNzcyIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JCWFzc2VydEVxdWFscyhDU1NSZWdpb25Db250ZXh0cy5DU1NfREVDTEFSQVRJT05fVkFMVUVfVVJJLCB1cmxzWzFdLmdldFR5cGUoKSk7Ci0JCWFzc2VydEVxdWFscygid2hpdGUgc3BhY2UuZ2lmIiwgdXJsc1sxXS5nZXRVcmwoKSk7IC8vJE5PTi1OTFMtMSQKLQl9Ci0KLQkvKioKLQkgKiBJbXBvcnQgcnVsZTogVXJsIGhhcyBvbmx5IG9uZSBxdW90ZSwgc28gaXQgaXMgbm90IGlkZW50aWZpZWQgYXMgdXJsLiBCeQotCSAqIHJlbW92aW5nIHF1b3RlLCB1cmwgaXMgY29ycmVjdGVkLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RGaXhFcnJvcjMoKSB7Ci0JCUlDU1NNb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJLy8gX19fX19fX19fX19fMDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MAotCQlkb2N1bWVudC5zZXQoIkBpbXBvcnQgdXJsKHdoaXRlIHNwYWNlLmNzc1wiKTsiKTsgLy8kTk9OLU5MUy0xJAkJCi0JCVVybEluZm9bXSB1cmxzID0gcGlja3VwVXJsKGRvY3VtZW50KTsKLQkJYXNzZXJ0RXF1YWxzKDAsIHVybHMubGVuZ3RoKTsKLQotCQkvLyBjb3JyZWN0IHVybAotCQlkb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAyNywgMSwgIiIpOyAvLyROT04tTkxTLTEkCi0JCXVybHMgPSBwaWNrdXBVcmwoZG9jdW1lbnQpOwotCQlhc3NlcnRFcXVhbHMoMSwgdXJscy5sZW5ndGgpOwotCQlhc3NlcnRFcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX1VSSSwgdXJsc1swXS5nZXRUeXBlKCkpOwotCQlhc3NlcnRFcXVhbHMoIndoaXRlIHNwYWNlLmNzcyIsIHVybHNbMF0uZ2V0VXJsKCkpOyAvLyROT04tTkxTLTEkCi0JfQotCi0KLQlwcml2YXRlIFVybEluZm9bXSBwaWNrdXBVcmwoSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCkgewotCQlMaXN0IHVybHMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZG9jdW1lbnRSZWdpb24gPSBkb2N1bWVudC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQl3aGlsZSAoZG9jdW1lbnRSZWdpb24gIT0gbnVsbCkgewotCQkJSVRleHRSZWdpb25MaXN0IHJlZ2lvbkxpc3QgPSBkb2N1bWVudFJlZ2lvbi5nZXRSZWdpb25zKCk7Ci0JCQlJdGVyYXRvciBpID0gcmVnaW9uTGlzdC5pdGVyYXRvcigpOwotCQkJd2hpbGUgKGkuaGFzTmV4dCgpKSB7Ci0JCQkJSVRleHRSZWdpb24gdGV4dFJlZ2lvbiA9IChJVGV4dFJlZ2lvbikgaS5uZXh0KCk7Ci0JCQkJU3RyaW5nIHR5cGUgPSB0ZXh0UmVnaW9uLmdldFR5cGUoKTsKLQkJCQlpZiAodHlwZS5lcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX1VSSSkgfHwgdHlwZS5lcXVhbHMoQ1NTUmVnaW9uQ29udGV4dHMuQ1NTX0RFQ0xBUkFUSU9OX1ZBTFVFX1VSSSkpIHsKLQkJCQkJdXJscy5hZGQobmV3IFVybEluZm8odHlwZSwgZG9jdW1lbnRSZWdpb24uZ2V0RnVsbFRleHQodGV4dFJlZ2lvbikpKTsKLQkJCQl9Ci0JCQl9Ci0JCQlkb2N1bWVudFJlZ2lvbiA9IGRvY3VtZW50UmVnaW9uLmdldE5leHQoKTsKLQkJfQotCQlyZXR1cm4gKFVybEluZm9bXSkgdXJscy50b0FycmF5KG5ldyBVcmxJbmZvW3VybHMuc2l6ZSgpXSk7Ci0JfQotCi0JcHJpdmF0ZSBjbGFzcyBVcmxJbmZvIHsKLQkJVXJsSW5mbyhTdHJpbmcgdHlwZSwgU3RyaW5nIHVybCkgewotCQkJZlR5cGUgPSB0eXBlOwotCQkJZlVybCA9IENTU1V0aWwuZXh0cmFjdFVyaUNvbnRlbnRzKHVybCk7Ci0JCX0KLQotCQlTdHJpbmcgZ2V0VHlwZSgpIHsKLQkJCXJldHVybiBmVHlwZTsKLQkJfQotCi0JCVN0cmluZyBnZXRVcmwoKSB7Ci0JCQlyZXR1cm4gZlVybDsKLQkJfQotCi0JCXByaXZhdGUgU3RyaW5nIGZUeXBlOwotCQlwcml2YXRlIFN0cmluZyBmVXJsOwotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NGb250RmFjZVJ1bGVUZXN0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NGb250RmFjZVJ1bGVUZXN0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDliZDA3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTRm9udEZhY2VSdWxlVGVzdC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1AZm9udC1mYWNlIHsNCi0JZm9udC1mYW1pbHk6ICJTd2lzcyA3MjEiOw0KLQlzcmM6IHVybCgic3dpc3M3MjFibGsucGZyIik7IC8qIFN3aXNzIDcyMSBibGFjayAqLw0KLQlmb250LXN0eWxlOiBub3JtYWwsIGl0YWxpYzsNCi0JZm9udC13ZWlnaHQ6IDgwMCw5MDA7IC8qIG5vdGUgdGhlIGludGVyZXN0aW5nIHByb2JsZW0gdGhhdA0KLQl0aGUgOTAwIHdlaWdodCBpdGFsaWMgZG9lc26BZnQgZXhpc3QgKi8NCi19DQotDQotQGZvbnQtZmFjZSB7DQotCXNyYzogbG9jYWwoIlBhbGF0aW5vIiksDQotCQlsb2NhbCgiVGltZXMgTmV3IFJvbWFuIiksDQotCQlsb2NhbCgiTmV3IFlvcmsiKSwNCi0JCWxvY2FsKCJVdG9waWEiKSwNCi0JCXVybCgiaHR0cDovL3NvbWV3aGVyZS9mcmVlL2ZvbnQiKTsNCi0JZm9udC1mYW1pbHk6IHNlcmlmOw0KLQlmb250LXdlaWdodDogMTAwLCAyMDAsIDMwMCwgNDAwLCA1MDA7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JZm9udC12YXJpYW50OiBub3JtYWw7DQotCWZvbnQtc2l6ZTogYWxsDQotfQ0KLQ0KLUBmb250LWZhY2Ugew0KLQlzcmM6IGxvY2FsKCJBbGFiYW1hIEl0YWxpYyIpLA0KLQl1cmwoaHR0cDovL3d3dy5mb250cy5vcmcvQS9hbGFiYW1hLWl0YWxpYykgZm9ybWF0KCJ0cnVldHlwZSIpOw0KLQlwYW5vc2UtMTogMiA0IDUgMiA1IDQgNSA5IDMgMzsNCi0JZm9udC1mYW1pbHk6IEFsYWJhbWEsIHNlcmlmOw0KLQlmb250LXdlaWdodDogMzAwLCA0MDAsIDUwMDsNCi0JZm9udC1zdHlsZTogaXRhbGljLCBvYmxpcXVlOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvQ1NTUGFnZVJ1bGVUZXN0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NQYWdlUnVsZVRlc3QuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTc3ZjJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NQYWdlUnVsZVRlc3QuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotQHBhZ2Uge3NpemU6IDguNWluIDExaW47bWFyZ2luOiAyY219DQotDQotQHBhZ2Ugew0KLQlzaXplOiBhdXRvOyAvKiBhdXRvIGlzIHRoZSBpbml0aWFsIHZhbHVlICovDQotCW1hcmdpbjogMTAlOw0KLX0NCi0NCi1AcGFnZSA6bGVmdCB7DQotCW1hcmdpbi1sZWZ0OiA0Y207DQotCW1hcmdpbi1yaWdodDogM2NtOw0KLX0NCi1AcGFnZSA6cmlnaHQgew0KLQltYXJnaW4tbGVmdDogM2NtOw0KLQltYXJnaW4tcmlnaHQ6IDRjbTsNCi19DQotDQotQHBhZ2UgbmFycm93IHtzaXplOiA5Y20gMThjbX1AcGFnZSByb3RhdGVkIHtzaXplOiBsYW5kc2NhcGV9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU1N0eWxlUnVsZVRlc3QuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL0NTU1N0eWxlUnVsZVRlc3QuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDIwNWEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9DU1NTdHlsZVJ1bGVUZXN0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQzICswLDAgQEAKLS8qIHByaW1pdGl2ZSB2YWx1ZXMgKi8NCi1OVU1CRVJTIHsNCi0gICAgTlVNQkVSOiAxMjMuNDU2Ow0KLSAgICBQRVJDRU5UQUdFOiAxMjMuNDU2JTsNCi0gICAgRU1TOiAxMjMuNDU2ZW07DQotICAgIEVYUzogMTIzLjQ1NmV4Ow0KLSAgICBQWDogMTIzLjQ1NnB4Ow0KLSAgICBQWDI6IC0xMjNweDsNCi0gICAgQ006IDEyMy40NTZjbTsNCi0gICAgTU06IDEyMy40NTZtbTsNCi0gICAgSU46IDEyMy40NTZpbjsNCi0gICAgUFQ6IDEyMy40NTZwdDsNCi0gICAgUEM6IDEyMy40NTZwYzsNCi0gICAgREVHOiAtMTIzLjQ1NmRlZzsNCi0gICAgUkFEOiAxMjMuNDU2cmFkOw0KLSAgICBHUkFEOiAxMjMuNDU2Z3JhZDsNCi0gICAgTVM6IDEyMy40NTZtczsNCi0gICAgUzogMTIzLjQ1NnM7DQotICAgIEhaOiAxMjMuNDU2SHo7DQotICAgIEtIWjogMTIzLjQ1NmtIejsNCi0gICAgRElNRU5TSU9OOiAtMTIzLjQ1Nnp6ejsNCi0gICAgSU5URUdFUjogMTIzOw0KLX0NCi0NCi1TVFJJTkdTIHsNCi0gICAgU1RSSU5HOiAic3RyaW5nIjsNCi0gICAgVVJJOiBVUkwoImh0dHA6Ly93d3cuaWJtLmNvbS8iKTsNCi0gICAgSURFTlQ6IGxlZnQ7DQotICAgIEhBU0g6ICNhYmNkZWY7DQotICAgIFVSQU5HRTogVSsyMEE3Ow0KLSAgICBTTEFTSDogLzsNCi0gICAgQ09NTUE6ICw7DQotICAgIElOSEVSSVRfUFJJTUlUSVZFOiBpbmhlcml0Ow0KLSAgICBBVFRSOiBhdHRyKEtFWSk7DQotICAgIEZPUk1BVDogZm9ybWF0KCJ0cnVlZG9jIik7DQotICAgIExPQ0FMOiBsb2NhbCgiRXhjZWxzaW9yIFJvbWFuIik7DQotfQ0KLQ0KLUZVTkNUSU9OUyB7DQotICAgIENPVU5URVI6IGNvdW50ZXIocGFyLW51bSwgdXBwZXItcm9tYW4pOw0KLSAgICBSRUNUOiByZWN0KDEyLCAzNCwgNTYsIDc4KTsNCi0gICAgUkdCQ09MT1I6IHJnYigyNTUsIDEyOCwgMCk7DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDEuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYWMyZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMS5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1bMCwgM10gKEgxICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMi8zLCANCi1bMywgOV0gKHsNCi0NCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzYsIA0KLVs5LCAyMV0gKGNvbG9yOiB3aGl0ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVsyMSwgMjRdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzI0LCAyNV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsyNSwgMzBdICgNCi0NCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNSwgDQotWzMwLCA1NF0gKGJhY2tncm91bmQtY29sb3IgOiBibGFjaykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xNi8xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE3LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxOS0yNCwgDQotWzU0LCA1OV0gKA0KLQkNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC01LCANCi1bNTksIDYwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzYwLCA2Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTAyLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODY3Yzk4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotWzAsIDIzXSAoQGltcG9ydCB1cmwoImhvZ2UuY3NzIikpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBVUkk6IDgtMjMsIA0KLVsyMywgMjRdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMjQsIDI2XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzI2LCA2MV0gKEBpbXBvcnQgLyogY29tbWVudCAqLyB1cmwoaG9nZS5jc3MpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogOC0yMS8yMiwgQ29udGV4dFJlZ2lvbi0tPiBVUkk6IDIyLTM1LCANCi1bNjEsIDYyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzYyLCA2NF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2NCwgOTZdIChAaW1wb3J0ICJob2dlLmNzcyIgLyogY29tbWVudCAqLykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNUUklORzogOC0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiAxOS0zMiwgDQotWzk2LCA5N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs5NywgOTldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTksIDE1NV0gKEBJTVBPUlQgJ2hvZ2UuY3NzJyAsbWVkaWExLG1lZGlhMiwsbWVkaWEzIG1lZGlhNCxtZWRpYTUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA4LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IFVOS05PV046IDE5LTIwLCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMjAtMjYsIENvbnRleHRSZWdpb24tLT4gTUVESUFfU0VQQVJBVE9SOiAyNi0yNywgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDI3LTMzLCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogMzMtMzQsIENvbnRleHRSZWdpb24tLT4gVU5LTk9XTjogMzQtMzUsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAzNS00MS80MiwgQ29udGV4dFJlZ2lvbi0tPiBVTktOT1dOOiA0Mi00OCwgQ29udGV4dFJlZ2lvbi0tPiBNRURJQV9TRVBBUkFUT1I6IDQ4LTQ5LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogNDktNTUvNTYsIA0KLVsxNTUsIDE2OV0gKEBpbXBvcnQgbWVkaWE2KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gVU5LTk9XTjogOC0xNCwgDQotWzE2OSwgMTcwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzE3MCwgMjIxXSAoDQotDQotPCEtLSAvKiBob2dlaG9nZSAqLw0KLQ0KLS0tPg0KLQ0KLS8qIGNvbW1lbnQgMiAqLw0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIENvbnRleHRSZWdpb24tLT4gQ0RPOiA0LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiA5LTIzLzI3LCBDb250ZXh0UmVnaW9uLS0+IENEQzogMjctMzAvMzQsIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogMzQtNDkvNTEsIA0KLVsyMjEsIDIyN10gKGt1c28NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNTcxMTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwMy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIgKzAsMCBAQAotWzAsIDI5XSAoQGltcG9ydCB1cmwoIi4uL3NhbXBsZTIuY3NzIikpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBVUkk6IDgtMjksIA0KLVsyOSwgMzBdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMzAsIDU3XSAoDQotDQotLyogU2FtcGxlIFN0eWxlcyAqLw0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIENvbnRleHRSZWdpb24tLT4gQ09NTUVOVDogNC0yMy8yNywgDQotWzU3LCA2Ml0gKEJPRFkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LzUsIA0KLVs2MiwgNjZdICh7DQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS80LCANCi1bNjYsIDc5XSAoY29sb3IgOiBibGFjaykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMywgDQotWzc5LCA4MF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs4MCwgODNdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzgzLCAxMjBdIChiYWNrZ3JvdW5kLWNvbG9yIDogcmdiKDE4MSwgMjUzLCAyMTEpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LzE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDE5LTIzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMjMtMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI2LTI3LzI4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMjgtMzEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMxLTMyLzMzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMzMtMzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0U6IDM2LTM3LCANCi1bMTIwLCAxMjFdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTIxLCAxMjRdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzEyNCwgMTQzXSAodGV4dC1hbGlnbiA6IGNlbnRlcikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMy0xOSwgDQotWzE0MywgMTQ0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE0NCwgMTQ3XSAoDQotCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTMsIA0KLVsxNDcsIDE4Nl0gKGZvbnQtZmFtaWx5IDogIkhlaXNlaSBNaW5jaG8gVzMiLCBzZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTQtMzIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMyLTMzLzM0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzNC0zOSwgDQotWzE4NiwgMTg4XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE4OCwgMTg5XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE4OSwgMTkzXSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzE5MywgMjA1XSAoQHBhZ2UgOmxlZnQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFBBR0U6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IENTU19QQUdFX1NFTEVDVE9SOiA2LTExLzEyLCANCi1bMjA1LCAyMDddICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMjA3LCAyMjRdIChtYXJnaW4tbGVmdCA6IDRjbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTQtMTcsIA0KLVsyMjQsIDIyNV0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMjI1LCAyMjZdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjI2LCAyMzBdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMjMwLCAyNDNdIChAbWVkaWEgYXVyYWwgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IE1FRElBOiAwLTYvNywgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDctMTIvMTMsIA0KLVsyNDMsIDI0N10gKHsNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzQsIA0KLVsyNDcsIDI1NV0gKFAuaGVpZGkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTcvOCwgDQotWzI1NSwgMjYwXSAoew0KLQkJKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzUsIA0KLVsyNjAsIDI4MV0gKGF6aW11dGggOiBjZW50ZXItbGVmdCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEwLTIxLCANCi1bMjgxLCAyODJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjgyLCAyODZdICgNCi0JCSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyODYsIDMwNV0gKGVsZXZhdGlvbiA6IDEyLjNkZWcpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTItMTksIA0KLVszMDUsIDMwNl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVszMDYsIDMxMF0gKA0KLQkJKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzMxMCwgMzI3XSAocGF1c2UgOiAzMG1zIDEuNnMpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiA4LTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTMtMTcsIA0KLVszMjcsIDMzMF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMzMwLCAzMzFdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzMxLCAzMzNdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzMzLCAzMzRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzM0LCAzMzZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmRjMzZiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA0LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDU1NCArMCwwIEBACi1bMCwgMjFdIChAY2hhcnNldCAiSVNPLTg4NTktMSIpDQotICAgIENvbnRleHRSZWdpb24tLT4gQ0hBUlNFVDogMC04LzksIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA5LTIxLCANCi1bMjEsIDIyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzIyLCAyNl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyNiwgNDldIChAaW1wb3J0IHVybCgiaG9nZS5jc3MiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFVSSTogOC0yMywgDQotWzQ5LCA1MF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs1MCwgNTJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNTIsIDg3XSAoQGltcG9ydCAvKiBjb21tZW50ICovIHVybChob2dlLmNzcykpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiA4LTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IFVSSTogMjItMzUsIA0KLVs4NywgODhdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bODgsIDkwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzkwLCAxMjJdIChAaW1wb3J0ICJob2dlLmNzcyIgLyogY29tbWVudCAqLykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNUUklORzogOC0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBDT01NRU5UOiAxOS0zMiwgDQotWzEyMiwgMTIzXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzEyMywgMTI1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyNSwgMTY2XSAoQElNUE9SVCAnaG9nZS5jc3MnIG1lZGlhMSxtZWRpYTIgLCBtZWRpYTMpDQotICAgIENvbnRleHRSZWdpb24tLT4gSU1QT1JUOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTVFJJTkc6IDgtMTgvMTksIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAxOS0yNSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJQV9TRVBBUkFUT1I6IDI1LTI2LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMjYtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gTUVESUFfU0VQQVJBVE9SOiAzMy0zNC8zNSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDM1LTQxLCANCi1bMTY2LCAxNjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMTY3LCAxNzFdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTcxLCAxODRdIChAbWVkaWEgcHJpbnQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IE1FRElBOiAwLTYvNywgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDctMTIvMTMsIA0KLVsxODQsIDE4OV0gKHsNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNSwgDQotWzE4OSwgMTkwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE5MCwgMTk0XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzE5NCwgMjA2XSAoQHBhZ2UgOmxlZnQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFBBR0U6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IENTU19QQUdFX1NFTEVDVE9SOiA2LTExLzEyLCANCi1bMjA2LCAyMTFdICh7DQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzUsIA0KLVsyMTEsIDIxMl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsyMTIsIDIxNl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyMTYsIDIyN10gKGgxLCBoMiwgaDMgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1NFUEFSQVRPUjogMi0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDgtMTAvMTEsIA0KLVsyMjcsIDIzMF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMjMwLCAyNTNdIChmb250LWZhbWlseTogc2Fucy1zZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMy0yMywgDQotWzI1MywgMjU1XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjU1LCAyNTZdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjU2LCAyNThdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjU4LCAyNjRdIChoMSBlbSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMi0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMy01LzYsIA0KLVsyNjQsIDI2N10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMjY3LCAyNzhdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVsyNzgsIDI4MF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzI4MCwgMjgxXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzI4MSwgMjgzXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzI4MywgMjk3XSAoZGl2IHAgKltocmVmXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMy00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDUtNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDctOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogOC0xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAxMi0xMy8xNCwgDQotWzI5NywgMzAwXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVszMDAsIDMxMV0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzMxMSwgMzEzXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzEzLCAzMTRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzE0LCAzMTZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzE2LCAzMjVdIChib2R5ID4gUCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDctOC85LCANCi1bMzI1LCAzMjhdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzMyOCwgMzQ0XSAobGluZS1oZWlnaHQ6IDEuMykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMTMtMTYsIA0KLVszNDQsIDM0Nl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM0NiwgMzQ3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzM0NywgMzQ5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM0OSwgMzYxXSAoZGl2IG9sPmxpIHAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDMtNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDQtNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA3LTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogOS0xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDEwLTExLzEyLCANCi1bMzYxLCAzNjNdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMzYzLCAzNjRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzY0LCAzNjZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzY2LCAzNzVdIChtYXRoICsgcCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDctOC85LCANCi1bMzc1LCAzNzhdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzM3OCwgMzkyXSAodGV4dC1pbmRlbnQ6IDApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDEzLTE0LCANCi1bMzkyLCAzOTRdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszOTQsIDM5NV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszOTUsIDM5N10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszOTcsIDQxMl0gKGgxLm9wZW5lciArIGgyICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMi05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTItMTQvMTUsIA0KLVs0MTIsIDQxNV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNDE1LCA0MzFdIChtYXJnaW4tdG9wOiAtNW1tKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMi0xNiwgDQotWzQzMSwgNDMzXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNDMzLCA0MzRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNDM0LCA0MzZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNDM2LCA0NDZdIChoMVt0aXRsZV0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMi0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAzLTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogOC05LzEwLCANCi1bNDQ2LCA0NDldICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzQ0OSwgNDYwXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNDYwLCA0NjFdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNDYxLCA0NjNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0NjMsIDQ2NF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs0NjQsIDQ2Nl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0NjYsIDQ4Nl0gKHNwYW5bY2xhc3M9ZXhhbXBsZV0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA1LTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMTAtMTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAxMS0xOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAxOC0xOS8yMCwgDQotWzQ4NiwgNDg5XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs0ODksIDUwMF0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzUwMCwgNTAxXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzUwMSwgNTAzXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNTAzLCA1MDRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNTA0LCA1MDZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNTA2LCA1NTBdIChzcGFuW2hlbGxvPSJDbGV2ZWxhbmQiXVtnb29kYnllPSJDb2x1bWJ1cyJdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDQtNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogNS0xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDEwLTExLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogMTEtMjIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMjItMjMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAyMy0yNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogMjQtMzEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiAzMS0zMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDMyLTQyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDQyLTQzLzQ0LCANCi1bNTUwLCA1NTNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzU1MywgNTY0XSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNTY0LCA1NjVdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNTY1LCA1NjddICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1NjcsIDU2OF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs1NjgsIDU3MF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1NzAsIDU5MF0gKGFbcmVsfj0iY29weXJpZ2h0Il0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMS0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyLTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiA1LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiA3LTE4LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDE4LTE5LzIwLCANCi1bNTkwLCA1OTNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzU5MywgNjA0XSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNjA0LCA2MDZdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2MDYsIDYwN10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs2MDcsIDYwOV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2MDksIDYzOF0gKGFbaHJlZj0iaHR0cDovL3d3dy53My5vcmcvIl0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMS0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyLTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiA3LTI3LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDI3LTI4LzI5LCANCi1bNjM4LCA2NDFdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzY0MSwgNjUyXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNjUyLCA2NTRdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2NTQsIDY1NV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs2NTUsIDY1N10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs2NTcsIDY2OF0gKCpbbGFuZz1mcl0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogMS0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyLTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiA3LTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogOS0xMC8xMSwgDQotWzY2OCwgNjcxXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs2NzEsIDY4NV0gKGRpc3BsYXkgOiBub25lKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDgtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTAtMTQsIA0KLVs2ODUsIDY4N10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY4NywgNjg4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzY4OCwgNjkwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY5MCwgNzA0XSAoKltsYW5nfD0iZW4iXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDYtOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDgtMTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMTItMTMvMTQsIA0KLVs3MDQsIDcwN10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNzA3LCA3MThdIChjb2xvciA6IHJlZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMSwgDQotWzcxOCwgNzIwXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNzIwLCA3MjFdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNzIxLCA3MjNdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNzIzLCA3NTBdIChESUFMT0dVRVtjaGFyYWN0ZXI9cm9tZW9dDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogOC05LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA5LTE4LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMTgtMTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAxOS0yNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAyNC0yNS8yNywgDQotWzc1MCwgNzUzXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs3NTMsIDgwMF0gKHZvaWNlLWZhbWlseTogIkxhd3JlbmNlIE9saXZpZXIiLCBjaGFybGVzLCBtYWxlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxNC0zMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzItMzMvMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDM0LTQxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA0MS00Mi80MywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNDMtNDcsIA0KLVs4MDAsIDgwMl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzgwMiwgODAzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzgwMywgODA1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzgwNSwgODM3XSAoRElBTE9HVUVbIGNoYXJhY3RlciA9IGp1bGlldCBdDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogOC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAxMC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDIwLTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogMjItMjgvMjksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMjktMzAvMzIsIA0KLVs4MzcsIDg0MF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bODQwLCA4ODZdICh2b2ljZS1mYW1pbHk6ICJWaXZpZW4gTGVpZ2giLCB2aWN0b3JpYSwgZmVtYWxlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxNC0yOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjgtMjkvMzAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDMwLTM4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzOC0zOS80MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNDAtNDYsIA0KLVs4ODYsIDg4OF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzg4OCwgODg5XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzg4OSwgODkxXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzg5MSwgOTAyXSAoKi5wYXN0b3JhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtMTAvMTEsIA0KLVs5MDIsIDkwNV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bOTA1LCA5MTddIChjb2xvcjogZ3JlZW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTEyLCANCi1bOTE3LCA5MTldICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5MTksIDkyMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs5MjAsIDkyMl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5MjIsIDkzMl0gKC5wYXN0b3JhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDAtOS8xMCwgDQotWzkzMiwgOTM1XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs5MzUsIDk0N10gKGNvbG9yOiBncmVlbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVs5NDcsIDk0OV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzk0OSwgOTUwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzk1MCwgOTUyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzk1MiwgOTY0XSAoSDEucGFzdG9yYWwgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAyLTExLzEyLCANCi1bOTY0LCA5NjddICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzk2NywgOTc5XSAoY29sb3I6IGdyZWVuKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMiwgDQotWzk3OSwgOTgxXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTgxLCA5ODJdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bOTgyLCA5ODRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTg0LCAxMDAyXSAocC5wYXN0b3JhbC5tYXJpbmUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxMC0xNy8xOCwgDQotWzEwMDIsIDEwMDVdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEwMDUsIDEwMTddIChjb2xvcjogZ3JlZW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTEyLCANCi1bMTAxNywgMTAxOV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwMTksIDEwMjBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTAyMCwgMTAyMl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDIyLCAxMDM0XSAoaDEjY2hhcHRlcjEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0lEOiAyLTExLzEyLCANCi1bMTAzNCwgMTAzN10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTAzNywgMTA1NV0gKHRleHQtYWxpZ246IGNlbnRlcikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMi0xOCwgDQotWzEwNTUsIDEwNTddICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDU3LCAxMDU4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEwNTgsIDEwNjBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTA2MCwgMTA4MF0gKGRpdiA+IHA6Zmlyc3QtY2hpbGQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogNC01LzYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA2LTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA3LTE5LzIwLCANCi1bMTA4MCwgMTA4M10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTA4MywgMTA5N10gKHRleHQtaW5kZW50OiAwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxMy0xNCwgDQotWzEwOTcsIDEwOTldICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDk5LCAxMTAwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzExMDAsIDExMDJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTEwMiwgMTExOV0gKHA6Zmlyc3QtY2hpbGQgZW0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAxMy0xNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDE0LTE2LzE3LCANCi1bMTExOSwgMTEyMl0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTEyMiwgMTE0MF0gKGZvbnQtd2VpZ2h0IDogYm9sZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNC0xOCwgDQotWzExNDAsIDExNDJdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTQyLCAxMTQzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzExNDMsIDExNDVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE0NSwgMTE2M10gKCogPiBhOmZpcnN0LWNoaWxkICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMS8yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDItMy80LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNS0xNy8xOCwgDQotWzExNjMsIDExNjZdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzExNjYsIDExODRdIChmb250LXdlaWdodCA6IGJvbGQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTQtMTgsIA0KLVsxMTg0LCAxMTg2XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE4NiwgMTE4N10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMTg3LCAxMTg5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzExODksIDEyMDNdIChhOmZpcnN0LWNoaWxkICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEtMTMvMTQsIA0KLVsxMjAzLCAxMjA2XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMjA2LCAxMjI0XSAoZm9udC13ZWlnaHQgOiBib2xkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE0LTE4LCANCi1bMTIyNCwgMTIyNl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyMjYsIDEyMjddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTIyNywgMTIyOV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjI5LCAxMjQ4XSAoYS5leHRlcm5hbDp2aXNpdGVkICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS0xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEwLTE4LzE5LCANCi1bMTI0OCwgMTI1MV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTI1MSwgMTI2Ml0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzEyNjIsIDEyNjRdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjY0LCAxMjY1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEyNjUsIDEyNjddICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTI2NywgMTI4MV0gKGE6Zm9jdXM6aG92ZXIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS03LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNy0xMy8xNCwgDQotWzEyODEsIDEyODRdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEyODQsIDEzMDFdIChiYWNrZ3JvdW5kOiB3aGl0ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMi0xNywgDQotWzEzMDEsIDEzMDNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzAzLCAxMzA0XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzMDQsIDEzMDZdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTMwNiwgMTMyMF0gKGh0bWw6bGFuZyhmcikgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNC0xMy8xNCwgDQotWzEzMjAsIDEzMjNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEzMjMsIDEzNDBdIChxdW90ZXM6ICc8PCcgJz4+JykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC02LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA4LTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTMtMTcsIA0KLVsxMzQwLCAxMzQyXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTM0MiwgMTM0M10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMzQzLCAxMzQ1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEzNDUsIDEzNTldIChodG1sOmxhbmcoZGUpICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDQtMTMvMTQsIA0KLVsxMzU5LCAxMzYyXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMzYyLCAxMzk1XSAocXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMy0xNy8xOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE4LTI1LzI2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjYtMzMsIA0KLVsxMzk1LCAxMzk3XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTM5NywgMTM5OF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMzk4LCAxNDAwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE0MDAsIDE0MTRdICg6bGFuZyhmcikgPiBRICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDAtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDEyLTEzLzE0LCANCi1bMTQxNCwgMTQxN10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTQxNywgMTQzNF0gKHF1b3RlczogJzw8JyAnPj4nKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMy0xNywgDQotWzE0MzQsIDE0MzZdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNDM2LCAxNDM3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE0MzcsIDE0MzldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQzOSwgMTQ1M10gKDpsYW5nKGRlKSA+IFEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTItMTMvMTQsIA0KLVsxNDUzLCAxNDU2XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxNDU2LCAxNDg5XSAocXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMy0xNy8xOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE4LTI1LzI2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjYtMzMsIA0KLVsxNDg5LCAxNDkxXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQ5MSwgMTQ5Ml0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNDkyLCAxNDk0XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE0OTQsIDE1MDldIChwOmZpcnN0LWxldHRlciApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTE0LzE1LCANCi1bMTUwOSwgMTUxMl0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTUxMiwgMTUyNl0gKGZvbnQtc2l6ZTogM2VtKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA5LTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTEtMTQsIA0KLVsxNTI2LCAxNTI3XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE1MjcsIDE1MjhdICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE1MjgsIDE1NDddIChmb250LXdlaWdodDogbm9ybWFsKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTE5LCANCi1bMTU0NywgMTU0OV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE1NDksIDE1NTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTU1MCwgMTU1Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNTUyLCAxNTY5XSAocC5zcGVjaWFsOmJlZm9yZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDktMTYvMTcsIA0KLVsxNTY5LCAxNTcxXSAoeyApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMiwgDQotWzE1NzEsIDE1OTFdIChjb250ZW50OiAiU3BlY2lhbCEgIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA5LTIwLCANCi1bMTU5MSwgMTU5Ml0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTU5MiwgMTU5M10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNTkzLCAxNTk1XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE1OTUsIDE2MThdIChwLnNwZWNpYWw6Zmlyc3QtbGV0dGVyICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS05LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogOS0yMi8yMywgDQotWzE2MTgsIDE2MjBdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTYyMCwgMTYzNF0gKGNvbG9yOiAjZmZkODAwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9IQVNIOiA3LTE0LCANCi1bMTYzNCwgMTYzNV0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTYzNSwgMTYzNl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNjM2LCAxNjM4XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE2MzgsIDE2NDNdIChCT0RZICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC81LCANCi1bMTY0MywgMTY0NV0gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNjQ1LCAxNzAzXSAoZm9udC1mYW1pbHk6IEJhc2tlcnZpbGxlLCAiSGVpc2kgTWluY2hvIFczIiwgU3ltYm9sLCBzZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMy0yNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjQtMjUvMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyNi00MywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogNDMtNDQvNDUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDQ1LTUxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA1MS01Mi81MywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNTMtNTgsIA0KLVsxNzAzLCAxNzA0XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNzA0LCAxNzA1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE3MDUsIDE3MDddICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTcwNywgMTcyMV0gKCo6bGFuZyhqYS1qcCkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xMy8xNCwgDQotWzE3MjEsIDE3MjNdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTcyMywgMTc2OF0gKGZvbnQ6IDkwMCAxNHB0LzE2cHQgIkhlaXNlaSBNaW5jaG8gVzkiLCBzZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC00LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiA2LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMC0xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMTQtMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxNS0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDIwLTM4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzOC0zOS80MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNDAtNDUsIA0KLVsxNzY4LCAxNzY5XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNzY5LCAxNzcwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE3NzAsIDE3NzJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTc3MiwgMTc4Nl0gKCo6bGFuZyh6aC10dykgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xMy8xNCwgDQotWzE3ODYsIDE3ODhdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTc4OCwgMTgyNl0gKGZvbnQ6IDgwMCAxNHB0LzE2LjVwdCAiTGkgU3VuZyIsIHNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDYtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEwLTE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxNC0xNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE1LTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjItMzEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMxLTMyLzMzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzMy0zOCwgDQotWzE4MjYsIDE4MjddICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE4MjcsIDE4MjhdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTgyOCwgMTgzMF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA1LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZGMzNmJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDUuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTU0ICswLDAgQEAKLVswLCAyMV0gKEBjaGFyc2V0ICJJU08tODg1OS0xIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBDSEFSU0VUOiAwLTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBTVFJJTkc6IDktMjEsIA0KLVsyMSwgMjJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMjIsIDI2XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzI2LCA0OV0gKEBpbXBvcnQgdXJsKCJob2dlLmNzcyIpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gVVJJOiA4LTIzLCANCi1bNDksIDUwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzUwLCA1Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1MiwgODddIChAaW1wb3J0IC8qIGNvbW1lbnQgKi8gdXJsKGhvZ2UuY3NzKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDgtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gVVJJOiAyMi0zNSwgDQotWzg3LCA4OF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs4OCwgOTBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTAsIDEyMl0gKEBpbXBvcnQgImhvZ2UuY3NzIiAvKiBjb21tZW50ICovKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IElNUE9SVDogMC03LzgsIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA4LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IENPTU1FTlQ6IDE5LTMyLCANCi1bMTIyLCAxMjNdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFTElNSVRFUjogMC0xLCANCi1bMTIzLCAxMjVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTI1LCAxNjZdIChASU1QT1JUICdob2dlLmNzcycgbWVkaWExLG1lZGlhMiAsIG1lZGlhMykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNUUklORzogOC0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDE5LTI1LCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogMjUtMjYsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiAyNi0zMi8zMywgQ29udGV4dFJlZ2lvbi0tPiBNRURJQV9TRVBBUkFUT1I6IDMzLTM0LzM1LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogMzUtNDEsIA0KLVsxNjYsIDE2N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVsxNjcsIDE3MV0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsxNzEsIDE4NF0gKEBtZWRpYSBwcmludCApDQotICAgIENvbnRleHRSZWdpb24tLT4gTUVESUE6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogNy0xMi8xMywgDQotWzE4NCwgMTg5XSAoew0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS81LCANCi1bMTg5LCAxOTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTkwLCAxOTRdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTk0LCAyMDZdIChAcGFnZSA6bGVmdCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUEFHRTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gQ1NTX1BBR0VfU0VMRUNUT1I6IDYtMTEvMTIsIA0KLVsyMDYsIDIxMV0gKHsNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNSwgDQotWzIxMSwgMjEyXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzIxMiwgMjE2XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzIxNiwgMjI3XSAoaDEsIGgyLCBoMyApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiAyLTMvNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDQtNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogOC0xMC8xMSwgDQotWzIyNywgMjMwXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsyMzAsIDI1M10gKGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTIzLCANCi1bMjUzLCAyNTVdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsyNTUsIDI1Nl0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsyNTYsIDI1OF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsyNTgsIDI2NF0gKGgxIGVtICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAyLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAzLTUvNiwgDQotWzI2NCwgMjY3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsyNjcsIDI3OF0gKGNvbG9yOiBibHVlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMSwgDQotWzI3OCwgMjgwXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjgwLCAyODFdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjgxLCAyODNdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjgzLCAyOTddIChkaXYgcCAqW2hyZWZdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiAzLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogNS02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogNi03LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogNy04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA4LTEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDEyLTEzLzE0LCANCi1bMjk3LCAzMDBdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzMwMCwgMzExXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bMzExLCAzMTNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszMTMsIDMxNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszMTQsIDMxNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszMTYsIDMyNV0gKGJvZHkgPiBQICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC81LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNy04LzksIA0KLVszMjUsIDMyOF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMzI4LCAzNDRdIChsaW5lLWhlaWdodDogMS4zKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxMy0xNiwgDQotWzM0NCwgMzQ2XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzQ2LCAzNDddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMzQ3LCAzNDldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMzQ5LCAzNjFdIChkaXYgb2w+bGkgcCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMy00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNC02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDctOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA5LTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTAtMTEvMTIsIA0KLVszNjEsIDM2M10gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVszNjMsIDM2NF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVszNjQsIDM2Nl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVszNjYsIDM3NV0gKG1hdGggKyBwICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtNC81LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogNy04LzksIA0KLVszNzUsIDM3OF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMzc4LCAzOTJdICh0ZXh0LWluZGVudDogMCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMTMtMTQsIA0KLVszOTIsIDM5NF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM5NCwgMzk1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzM5NSwgMzk3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzM5NywgNDEyXSAoaDEub3BlbmVyICsgaDIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAyLTkvMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxMi0xNC8xNSwgDQotWzQxMiwgNDE1XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs0MTUsIDQzMV0gKG1hcmdpbi10b3A6IC01bW0pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTE2LCANCi1bNDMxLCA0MzNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0MzMsIDQzNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs0MzQsIDQzNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs0MzYsIDQ0Nl0gKGgxW3RpdGxlXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAyLTMsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDMtOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiA4LTkvMTAsIA0KLVs0NDYsIDQ0OV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNDQ5LCA0NjBdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs0NjAsIDQ2MV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs0NjEsIDQ2M10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzQ2MywgNDY0XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzQ2NCwgNDY2XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzQ2NiwgNDg2XSAoc3BhbltjbGFzcz1leGFtcGxlXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA0LTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDUtMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiAxMC0xMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDExLTE4LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDE4LTE5LzIwLCANCi1bNDg2LCA0ODldICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzQ4OSwgNTAwXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bNTAwLCA1MDFdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNTAxLCA1MDNdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1MDMsIDUwNF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs1MDQsIDUwNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs1MDYsIDU1MF0gKHNwYW5baGVsbG89IkNsZXZlbGFuZCJdW2dvb2RieWU9IkNvbHVtYnVzIl0gKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVDogNC01LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiA1LTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMTAtMTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAxMS0yMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAyMi0yMywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDIzLTI0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FOiAyNC0zMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDMxLTMyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogMzItNDIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogNDItNDMvNDQsIA0KLVs1NTAsIDU1M10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNTUzLCA1NjRdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs1NjQsIDU2NV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs1NjUsIDU2N10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzU2NywgNTY4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzU2OCwgNTcwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzU3MCwgNTkwXSAoYVtyZWx+PSJjb3B5cmlnaHQiXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDUtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDctMTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMTgtMTkvMjAsIA0KLVs1OTAsIDU5M10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNTkzLCA2MDRdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs2MDQsIDYwNl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzYwNiwgNjA3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzYwNywgNjA5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzYwOSwgNjM4XSAoYVtocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDctMjcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX0VORDogMjctMjgvMjksIA0KLVs2MzgsIDY0MV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bNjQxLCA2NTJdIChjb2xvcjogYmx1ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTEsIA0KLVs2NTIsIDY1NF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY1NCwgNjU1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzY1NSwgNjU3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzY1NywgNjY4XSAoKltsYW5nPWZyXSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiAxLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDItNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1I6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDctOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiA5LTEwLzExLCANCi1bNjY4LCA2NzFdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzY3MSwgNjg1XSAoZGlzcGxheSA6IG5vbmUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogOC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxMC0xNCwgDQotWzY4NSwgNjg3XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjg3LCA2ODhdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNjg4LCA2OTBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjkwLCA3MDRdICgqW2xhbmd8PSJlbiJdICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQ6IDEtMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRTogMi02LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogNi04LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRTogOC0xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAxMi0xMy8xNCwgDQotWzcwNCwgNzA3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs3MDcsIDcxOF0gKGNvbG9yIDogcmVkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA4LTExLCANCi1bNzE4LCA3MjBdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs3MjAsIDcyMV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs3MjEsIDcyM10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs3MjMsIDc1MF0gKERJQUxPR1VFW2NoYXJhY3Rlcj1yb21lb10NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA4LTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDktMTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SOiAxOC0xOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUU6IDE5LTI0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9FTkQ6IDI0LTI1LzI3LCANCi1bNzUwLCA3NTNdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzc1MywgODAwXSAodm9pY2UtZmFtaWx5OiAiTGF3cmVuY2UgT2xpdmllciIsIGNoYXJsZXMsIG1hbGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE0LTMyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAzMi0zMy8zNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMzQtNDEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDQxLTQyLzQzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA0My00NywgDQotWzgwMCwgODAyXSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODAyLCA4MDNdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bODAzLCA4MDVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODA1LCA4MzddIChESUFMT0dVRVsgY2hhcmFjdGVyID0ganVsaWV0IF0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTgsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX05BTUU6IDEwLTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUjogMjAtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFOiAyMi0yOC8yOSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EOiAyOS0zMC8zMiwgDQotWzgzNywgODQwXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs4NDAsIDg4Nl0gKHZvaWNlLWZhbWlseTogIlZpdmllbiBMZWlnaCIsIHZpY3RvcmlhLCBmZW1hbGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDE0LTI4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyOC0yOS8zMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMzAtMzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDM4LTM5LzQwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA0MC00NiwgDQotWzg4NiwgODg4XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODg4LCA4ODldICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bODg5LCA4OTFdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bODkxLCA5MDJdICgqLnBhc3RvcmFsICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9VTklWRVJTQUw6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS0xMC8xMSwgDQotWzkwMiwgOTA1XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVs5MDUsIDkxN10gKGNvbG9yOiBncmVlbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVs5MTcsIDkxOV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzkxOSwgOTIwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzkyMCwgOTIyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzkyMiwgOTMyXSAoLnBhc3RvcmFsICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMC05LzEwLCANCi1bOTMyLCA5MzVdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzkzNSwgOTQ3XSAoY29sb3I6IGdyZWVuKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNy0xMiwgDQotWzk0NywgOTQ5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTQ5LCA5NTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bOTUwLCA5NTJdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bOTUyLCA5NjRdIChIMS5wYXN0b3JhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDItMTEvMTIsIA0KLVs5NjQsIDk2N10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bOTY3LCA5NzldIChjb2xvcjogZ3JlZW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTEyLCANCi1bOTc5LCA5ODFdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5ODEsIDk4Ml0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs5ODIsIDk4NF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs5ODQsIDEwMDJdIChwLnBhc3RvcmFsLm1hcmluZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEwLTE3LzE4LCANCi1bMTAwMiwgMTAwNV0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTAwNSwgMTAxN10gKGNvbG9yOiBncmVlbikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDctMTIsIA0KLVsxMDE3LCAxMDE5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTAxOSwgMTAyMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMDIwLCAxMDIyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwMjIsIDEwMzRdIChoMSNjaGFwdGVyMSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfSUQ6IDItMTEvMTIsIA0KLVsxMDM0LCAxMDM3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMDM3LCAxMDU1XSAodGV4dC1hbGlnbjogY2VudGVyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEyLTE4LCANCi1bMTA1NSwgMTA1N10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwNTcsIDEwNThdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTA1OCwgMTA2MF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMDYwLCAxMDgwXSAoZGl2ID4gcDpmaXJzdC1jaGlsZCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTMvNCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DT01CSU5BVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDYtNywgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDctMTkvMjAsIA0KLVsxMDgwLCAxMDgzXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMDgzLCAxMDk3XSAodGV4dC1pbmRlbnQ6IDApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDEzLTE0LCANCi1bMTA5NywgMTA5OV0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwOTksIDExMDBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTEwMCwgMTEwMl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTAyLCAxMTE5XSAocDpmaXJzdC1jaGlsZCBlbSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTEzLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEzLTE0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTQtMTYvMTcsIA0KLVsxMTE5LCAxMTIyXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMTIyLCAxMTQwXSAoZm9udC13ZWlnaHQgOiBib2xkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE0LTE4LCANCi1bMTE0MCwgMTE0Ml0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzExNDIsIDExNDNdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTE0MywgMTE0NV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTQ1LCAxMTYzXSAoKiA+IGE6Zmlyc3QtY2hpbGQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1VOSVZFUlNBTDogMC0xLzIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMi0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTUsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA1LTE3LzE4LCANCi1bMTE2MywgMTE2Nl0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTE2NiwgMTE4NF0gKGZvbnQtd2VpZ2h0IDogYm9sZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNC0xOCwgDQotWzExODQsIDExODZdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMTg2LCAxMTg3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzExODcsIDExODldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTE4OSwgMTIwM10gKGE6Zmlyc3QtY2hpbGQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMS0xMy8xNCwgDQotWzEyMDMsIDEyMDZdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEyMDYsIDEyMjRdIChmb250LXdlaWdodCA6IGJvbGQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMi0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTQtMTgsIA0KLVsxMjI0LCAxMjI2XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTIyNiwgMTIyN10gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMjI3LCAxMjI5XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyMjksIDEyNDhdIChhLmV4dGVybmFsOnZpc2l0ZWQgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMTAtMTgvMTksIA0KLVsxMjQ4LCAxMjUxXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxMjUxLCAxMjYyXSAoY29sb3I6IGJsdWUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA3LTExLCANCi1bMTI2MiwgMTI2NF0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEyNjQsIDEyNjVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTI2NSwgMTI2N10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMjY3LCAxMjgxXSAoYTpmb2N1czpob3ZlciApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTcsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA3LTEzLzE0LCANCi1bMTI4MSwgMTI4NF0gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTI4NCwgMTMwMV0gKGJhY2tncm91bmQ6IHdoaXRlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEyLTE3LCANCi1bMTMwMSwgMTMwM10gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEzMDMsIDEzMDRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTMwNCwgMTMwNl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzA2LCAxMzIwXSAoaHRtbDpsYW5nKGZyKSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA0LTEzLzE0LCANCi1bMTMyMCwgMTMyM10gKHsgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8zLCANCi1bMTMyMywgMTM0MF0gKHF1b3RlczogJzw8JyAnPj4nKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMy0xNywgDQotWzEzNDAsIDEzNDJdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzQyLCAxMzQzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzNDMsIDEzNDVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTM0NSwgMTM1OV0gKGh0bWw6bGFuZyhkZSkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogNC0xMy8xNCwgDQotWzEzNTksIDEzNjJdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzEzNjIsIDEzOTVdIChxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEzLTE3LzE4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTgtMjUvMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyNi0zMywgDQotWzEzOTUsIDEzOTddICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxMzk3LCAxMzk4XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEzOTgsIDE0MDBdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQwMCwgMTQxNF0gKDpsYW5nKGZyKSA+IFEgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NPTUJJTkFUT1I6IDEwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMTItMTMvMTQsIA0KLVsxNDE0LCAxNDE3XSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxNDE3LCAxNDM0XSAocXVvdGVzOiAnPDwnICc+PicpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEzLTE3LCANCi1bMTQzNCwgMTQzNl0gKCAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE0MzYsIDE0MzddICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTQzNywgMTQzOV0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNDM5LCAxNDUzXSAoOmxhbmcoZGUpID4gUSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ09NQklOQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxMi0xMy8xNCwgDQotWzE0NTMsIDE0NTZdICh7ICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMywgDQotWzE0NTYsIDE0ODldIChxdW90ZXM6ICc+PicgJzw8JyAnXDIwMzknICdcMjAzQScpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogOC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDEzLTE3LzE4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTgtMjUvMjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyNi0zMywgDQotWzE0ODksIDE0OTFdICggICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNDkxLCAxNDkyXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE0OTIsIDE0OTRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTQ5NCwgMTUwOV0gKHA6Zmlyc3QtbGV0dGVyICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9QU0VVRE86IDEtMTQvMTUsIA0KLVsxNTA5LCAxNTEyXSAoeyAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzMsIA0KLVsxNTEyLCAxNTI2XSAoZm9udC1zaXplOiAzZW0pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDktMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMS0xNCwgDQotWzE1MjYsIDE1MjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTUyNywgMTUyOF0gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTUyOCwgMTU0N10gKGZvbnQtd2VpZ2h0OiBub3JtYWwpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMTksIA0KLVsxNTQ3LCAxNTQ5XSAoICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTU0OSwgMTU1MF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNTUwLCAxNTUyXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzE1NTIsIDE1NjldIChwLnNwZWNpYWw6YmVmb3JlICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS05LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogOS0xNi8xNywgDQotWzE1NjksIDE1NzFdICh7ICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8yLCANCi1bMTU3MSwgMTU5MV0gKGNvbnRlbnQ6ICJTcGVjaWFsISAiKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA3LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDktMjAsIA0KLVsxNTkxLCAxNTkyXSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNTkyLCAxNTkzXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE1OTMsIDE1OTVdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTU5NSwgMTYxOF0gKHAuc3BlY2lhbDpmaXJzdC1sZXR0ZXIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTksIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiA5LTIyLzIzLCANCi1bMTYxOCwgMTYyMF0gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNjIwLCAxNjM0XSAoY29sb3I6ICNmZmQ4MDApDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDUtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0g6IDctMTQsIA0KLVsxNjM0LCAxNjM1XSAoICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEsIA0KLVsxNjM1LCAxNjM2XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE2MzYsIDE2MzhdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTYzOCwgMTY0M10gKEJPRFkgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC00LzUsIA0KLVsxNjQzLCAxNjQ1XSAoeyApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMiwgDQotWzE2NDUsIDE3MDNdIChmb250LWZhbWlseTogQmFza2VydmlsbGUsICJIZWlzaSBNaW5jaG8gVzMiLCBTeW1ib2wsIHNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTEtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEzLTI0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyNC0yNS8yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDI2LTQzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA0My00NC80NSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogNDUtNTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDUxLTUyLzUzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA1My01OCwgDQotWzE3MDMsIDE3MDRdICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE3MDQsIDE3MDVdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTcwNSwgMTcwN10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzA3LCAxNzIxXSAoKjpsYW5nKGphLWpwKSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTEzLzE0LCANCi1bMTcyMSwgMTcyM10gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNzIzLCAxNzY4XSAoZm9udDogOTAwIDE0cHQvMTZwdCAiSGVpc2VpIE1pbmNobyBXOSIsIHNlcmlmKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDYtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEwLTE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxNC0xNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE1LTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMjAtMzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDM4LTM5LzQwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA0MC00NSwgDQotWzE3NjgsIDE3NjldICggKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMSwgDQotWzE3NjksIDE3NzBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTc3MCwgMTc3Ml0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzcyLCAxNzg2XSAoKjpsYW5nKHpoLXR3KSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfVU5JVkVSU0FMOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfUFNFVURPOiAxLTEzLzE0LCANCi1bMTc4NiwgMTc4OF0gKHsgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzIsIA0KLVsxNzg4LCAxODI2XSAoZm9udDogODAwIDE0cHQvMTYuNXB0ICJMaSBTdW5nIiwgc2VyaWYpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDQtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogNi05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTAtMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDE0LTE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTUtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAyMi0zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzEtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDMzLTM4LCANCi1bMTgyNiwgMTgyN10gKCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xLCANCi1bMTgyNywgMTgyOF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxODI4LCAxODMwXSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1NvdXJjZVBhcnNlclRlc3Qtc2FtcGxlMDYuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0NzdjYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi1bMCwgMTJdIChkZWNsYXJhdGlvbiApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTExLzEyLCANCi1bMTIsIDE2XSAoew0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNCwgDQotWzE2LCAzM10gKGRpbWVuc2lvbiA6IDEwMGV4KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTE3LCANCi1bMzMsIDM0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzM0LCAzN10gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMzcsIDEzM10gKGZ1bmN0aW9uIDogcmVjdCgxMDAsIDIwMCwgMzAwLCA0MDApLCBmb3JtYXQoImludGVsbGlmb250IiksIGxvY2FsKCJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA5LTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OOiAxMS0xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDE2LTE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDIxLTI0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyNC0yNS8yNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDI2LTI5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyOS0zMC8zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDMxLTM0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFOiAzNC0zNSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzUtMzYvMzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDM3LTQ0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogNDQtNTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0U6IDU3LTU4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA1OC01OS82MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogNjAtNjYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA2Ni05NSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogOTUtOTYsIA0KLVsxMzMsIDEzNF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMzQsIDEzN10gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTM3LCAxNTFdIChoYXNoIDogI2FhYmJjYykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC00LzUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9IQVNIOiA3LTE0LCANCi1bMTUxLCAxNTJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTUyLCAxNTVdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzE1NSwgMTY2XSAoaWRlbnQgOiBhbnkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNS82LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNi03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDgtMTEsIA0KLVsxNjYsIDE2N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNjcsIDE3MF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTcwLCAxODRdIChudW1iZXIgOiA5OTk5OSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA3LTgvOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDktMTQsIA0KLVsxODQsIDE4NV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxODUsIDE4OF0gKA0KLQkpDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0zLCANCi1bMTg4LCAyMDVdIChwZXJjZW50YWdlIDogMTAwJSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BFUkNFTlRBR0U6IDEzLTE3LCANCi1bMjA1LCAyMDZdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjA2LCAyMDldICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzIwOSwgMjI2XSAoc3RyaW5nIDogInN0cmluZyIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA5LTE3LCANCi1bMjI2LCAyMjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjI3LCAyMzBdICgNCi0JKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMywgDQotWzIzMCwgMjY4XSAodW5pY29kZS1yYW5nZSA6IFUrPz8sIFUrMTAwLTIyMCwgVSs0Pz8pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFOiAxNi0yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjAtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRTogMjItMzEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDMxLTMyLzMzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0U6IDMzLTM4LCANCi1bMjY4LCAyNjldICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjY5LCAyNzFdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjcxLCAyNzJdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjcyLCAyNzRdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTU291cmNlUGFyc2VyVGVzdC1zYW1wbGUwNy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ4NzlhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NTb3VyY2VQYXJzZXJUZXN0LXNhbXBsZTA3LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDQ1NCArMCwwIEBACi1bMCwgMjFdIChAY2hhcnNldCAiSVNPLTg4NTktMSIpDQotICAgIENvbnRleHRSZWdpb24tLT4gQ0hBUlNFVDogMC04LzksIENvbnRleHRSZWdpb24tLT4gU1RSSU5HOiA5LTIxLCANCi1bMjEsIDIyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUxJTUlURVI6IDAtMSwgDQotWzIyLCAyNl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsyNiwgNzBdIChAaW1wb3J0IHVybCgiLi4vc2FtcGxlMi5jc3MiKSBwcm9qZWN0aW9uLCB0dikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBJTVBPUlQ6IDAtNy84LCBDb250ZXh0UmVnaW9uLS0+IFVSSTogOC0yOS8zMCwgQ29udGV4dFJlZ2lvbi0tPiBNRURJVU06IDMwLTQwLCBDb250ZXh0UmVnaW9uLS0+IE1FRElBX1NFUEFSQVRPUjogNDAtNDEvNDIsIENvbnRleHRSZWdpb24tLT4gTUVESVVNOiA0Mi00NCwgDQotWzcwLCA3MV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVMSU1JVEVSOiAwLTEsIA0KLVs3MSwgNzVdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bNzUsIDgwXSAoQk9EWSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTQvNSwgDQotWzgwLCA4N10gKHsNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzcsIA0KLVs4NywgMTAwXSAoY29sb3IgOiBibGFjaykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMywgDQotWzEwMCwgMTAxXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEwMSwgMTA3XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsxMDcsIDEyNl0gKHRleHQtYWxpZ24gOiBjZW50ZXIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMTksIA0KLVsxMjYsIDEyN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxMjcsIDEzM10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTMzLCAxNzJdIChiYWNrZ3JvdW5kLWNvbG9yIDogcmdiKCAxODEsIDI1MywgMjExICkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNy0xOC8xOSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogMTktMjMvMjQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyNC0yNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjctMjgvMjksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyOS0zMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzItMzMvMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAzNC0zNy8zOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogMzgtMzksIA0KLVsxNzIsIDE3NF0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzQsIDE3NV0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxNzUsIDE3OV0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsxNzksIDE4Ml0gKFVMICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMi8zLCANCi1bMTgyLCAxODldICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bMTg5LCAyMDJdIChjb2xvciA6IGJsYWNrKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiA4LTEzLCANCi1bMjAyLCAyMDNdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMjAzLCAyMDldICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzIwOSwgMjUxXSAobGlzdC1zdHlsZS1pbWFnZSA6IHVybCgiaW1hZ2VzL2xfYTAxLmdpZiIpKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE2LzE3LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVVJJOiAxOS00MiwgDQotWzI1MSwgMjUyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzI1MiwgMjU4XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsyNTgsIDI4N10gKGxpc3Qtc3R5bGUtcG9zaXRpb24gOiBvdXRzaWRlKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMjAtMjEvMjIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDIyLTI5LCANCi1bMjg3LCAyODldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMjg5LCAyOTBdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMjkwLCAyOTRdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMjk0LCAyOTddIChIMSApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTIvMywgDQotWzI5NywgMzA0XSAoew0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvNywgDQotWzMwNCwgMzE3XSAoY29sb3IgOiB3aGl0ZSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogOC0xMywgDQotWzMxNywgMzE4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzMxOCwgMzI0XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVszMjQsIDM0M10gKHRleHQtYWxpZ24gOiBjZW50ZXIpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTAvMTEsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMS0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTMtMTksIA0KLVszNDMsIDM0NF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVszNDQsIDM1MF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMzUwLCAzNzddIChib3JkZXItbGVmdC1jb2xvciA6ICM5OTY2NjYpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTcvMTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxOC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9IQVNIOiAyMC0yNywgDQotWzM3NywgMzc4XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzM3OCwgMzg0XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVszODQsIDQwMV0gKHBhZGRpbmctdG9wIDogMHB4KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxNC0xNywgDQotWzQwMSwgNDAyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzQwMiwgNDA4XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs0MDgsIDQyN10gKHBhZGRpbmctcmlnaHQgOiAxY20pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDE2LTE5LCANCi1bNDI3LCA0MjhdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNDI4LCA0MzRdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzQzNCwgNDUyXSAocGFkZGluZy1ib3R0b20gOiAyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTUtMTYvMTcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxNy0xOCwgDQotWzQ1MiwgNDUzXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzQ1MywgNDU5XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs0NTksIDQ3N10gKHBhZGRpbmctbGVmdCA6IDNlbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEzLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTUtMTgsIA0KLVs0NzcsIDQ3OF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs0NzgsIDQ4NF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNDg0LCA1MDRdIChib3JkZXItc3R5bGUgOiBzb2xpZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMi8xMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEzLTE0LzE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNS0yMCwgDQotWzUwNCwgNTA1XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzUwNSwgNTExXSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs1MTEsIDUzNV0gKGJvcmRlci10b3Atd2lkdGggOiA0LjVleCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xNi8xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE3LTE4LzE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTktMjQsIA0KLVs1MzUsIDUzNl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs1MzYsIDU0Ml0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNTQyLCA1NjZdIChib3JkZXItcmlnaHQtd2lkdGggOiA1aW4pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDIxLTI0LCANCi1bNTY2LCA1NjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNTY3LCA1NzNdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzU3MywgNjAxXSAoYm9yZGVyLWJvdHRvbS13aWR0aCA6IDYuMDJtbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDIwLTIxLzIyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMjItMjgsIA0KLVs2MDEsIDYwMl0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs2MDIsIDYwOF0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bNjA4LCA2MjldIChib3JkZXItbGVmdC13aWR0aCA6IDcpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTcvMTgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxOC0xOS8yMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVI6IDIwLTIxLCANCi1bNjI5LCA2MzFdICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bNjMxLCA2MzJdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bNjMyLCA2MzZdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bNjM2LCA2NDZdIChIMTpiZWZvcmUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMi05LzEwLCANCi1bNjQ2LCA2NTNdICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bNjUzLCA2OTddIChjb250ZW50IDogIkNoYXB0ZXIgIiBjb3VudGVyKCBjaGFwdGVyICkgIi4gIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiAxMC0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogMjEtMjkvMzAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDMwLTM3LzM4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFOiAzOC0zOS80MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkc6IDQwLTQ0LCANCi1bNjk3LCA2OThdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNjk4LCA3MDRdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzcwNCwgNzMxXSAoY291bnRlci1pbmNyZW1lbnQgOiBjaGFwdGVyKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTE3LzE4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTgtMTkvMjAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDIwLTI3LCANCi1bNzMxLCA3MzJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bNzMyLCA3MzhdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzczOCwgNzYxXSAoY291bnRlci1yZXNldCA6IHNlY3Rpb24pDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxNC0xNS8xNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTYtMjMsIA0KLVs3NjEsIDc2M10gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVs3NjMsIDc2NF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs3NjQsIDc2OF0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVs3NjgsIDc3OV0gKElNRzpiZWZvcmUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1BTRVVETzogMy0xMC8xMSwgDQotWzc3OSwgNzgwXSAoeykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMSwgDQotWzc4MCwgNzk5XSAoY29udGVudCA6IGF0dHIoYWx0KSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDEwLTE1LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAxNS0xOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogMTgtMTksIA0KLVs3OTksIDgwMF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVs4MDAsIDgwNF0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVs4MDQsIDgxNV0gKERJVi5zYW1wbGUgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0zLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAzLTEwLzExLCANCi1bODE1LCA4MjJdICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bODIyLCA4NjNdIChmb250LWZhbWlseSA6ICJSb2Jzb24gQ2VsdGljIiwgc2Fucy1zZXJpZikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTQtMjksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1I6IDI5LTMwLzMxLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UOiAzMS00MSwgDQotWzg2MywgODY0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzg2NCwgODcwXSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVs4NzAsIDg4OV0gKHBvc2l0aW9uIDogYWJzb2x1dGUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtOC85LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogOS0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTEtMTksIA0KLVs4ODksIDg5MF0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs4OTAsIDg5Nl0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bODk2LCA5MTBdIChsZWZ0IDogODMzLjVwYykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC00LzUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA1LTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDctMTQsIA0KLVs5MTAsIDkxMV0gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs5MTEsIDkxN10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bOTE3LCA5MjZdICh0b3AgOiA5MCUpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtMy80LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEVSQ0VOVEFHRTogNi05LCANCi1bOTI2LCA5MjddICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bOTI3LCA5MzNdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzkzMywgOTQ2XSAod2lkdGggOiAxMDBwdCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDgtMTMsIA0KLVs5NDYsIDk0N10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVs5NDcsIDk1M10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bOTUzLCA5NzFdIChoZWlnaHQgOiAxMTAuNzc3cHgpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiA5LTE4LCANCi1bOTcxLCA5NzJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bOTcyLCA5NzhdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzk3OCwgMTAxNV0gKGNsaXAgOiByZWN0KCAtNXB4LCA4MHB4LCAxMzBweCwgMHB4ICkpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNC81LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNS02LzcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDctMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMy0xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxOS0yMywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjMtMjQvMjUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAyNS0zMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzAtMzEvMzIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAzMi0zNS8zNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogMzYtMzcsIA0KLVsxMDE1LCAxMDE3XSAoDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMiwgDQotWzEwMTcsIDEwMThdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTAxOCwgMTAyMl0gKA0KLQ0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTQsIA0KLVsxMDIyLCAxMDMzXSAoQGZvbnQtZmFjZSApDQotICAgIENvbnRleHRSZWdpb24tLT4gRk9OVF9GQUNFOiAwLTEwLzExLCANCi1bMTAzMywgMTA0MF0gKHsNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzcsIA0KLVsxMDQwLCAxMDY1XSAoZm9udC1mYW1pbHkgOiAiU3dpc3MgNzIxIikNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMTQtMjUsIA0KLVsxMDY1LCAxMDY2XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEwNjYsIDEwNzJdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzEwNzIsIDExNThdIChzcmMgOiB1cmwoInN3aXNzNzIxdC5wZnIiKSBmb3JtYXQoImludGVsbGlmb250IiksIGxvY2FsKCJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0zLzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA0LTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VUkk6IDYtMjYvMjcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT046IDI3LTM0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORzogMzQtNDcsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0U6IDQ3LTQ4LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiA0OC00OS81MCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTjogNTAtNTYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HOiA1Ni04NSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRTogODUtODYsIA0KLVsxMTU4LCAxMTU5XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzExNTksIDExNjVdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzExNjUsIDEyMDNdICh1bmljb2RlLXJhbmdlIDogVSs/PywgVSsxMDAtMjIwLCBVKzQ/PykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMy8xNCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDE0LTE1LzE2LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0U6IDE2LTIwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAyMC0yMS8yMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFOiAyMi0zMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzEtMzIvMzMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRTogMzMtMzgsIA0KLVsxMjAzLCAxMjA0XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEyMDQsIDEyMTBdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzEyMTAsIDEyNDddIChmb250LXdlaWdodCA6IDEwMCwgMjAwLCAzMDAsIDQwMCwgNTAwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTExLzEyLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTItMTMvMTQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxNC0xNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMTctMTgvMTksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAxOS0yMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjItMjMvMjQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyNC0yNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMjctMjgvMjksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAyOS0zMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUjogMzItMzMvMzQsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSOiAzNC0zNywgDQotWzEyNDcsIDEyNDldICgNCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0yLCANCi1bMTI0OSwgMTI1MF0gKH0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUkJSQUNFOiAwLTEsIA0KLVsxMjUwLCAxMjU0XSAoDQotDQotKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNCwgDQotWzEyNTQsIDEyNjZdIChAcGFnZSA6bGVmdCApDQotICAgIENvbnRleHRSZWdpb24tLT4gUEFHRTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gQ1NTX1BBR0VfU0VMRUNUT1I6IDYtMTEvMTIsIA0KLVsxMjY2LCAxMjY3XSAoeykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMSwgDQotWzEyNjcsIDEyODRdIChtYXJnaW4tbGVmdCA6IDRjbSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDEyLTEzLzE0LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogMTQtMTcsIA0KLVsxMjg0LCAxMjg1XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzEyODUsIDEyODldICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi1bMTI4OSwgMTMwMl0gKEBtZWRpYSBhdXJhbCApDQotICAgIENvbnRleHRSZWdpb24tLT4gTUVESUE6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IE1FRElVTTogNy0xMi8xMywgDQotWzEzMDIsIDEzMDldICh7DQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS83LCANCi1bMTMwOSwgMTMzMl0gKEgxLCBIMiwgSDMsIEg0LCBINSwgSDYgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0yLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1NFUEFSQVRPUjogMi0zLzQsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiA0LTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDgtMTAsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDEyLTE0LCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX1NFUEFSQVRPUjogMTQtMTUvMTYsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAxNi0xOCwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9TRVBBUkFUT1I6IDE4LTE5LzIwLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMjAtMjIvMjMsIA0KLVsxMzMyLCAxMzQzXSAoew0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzExLCANCi1bMTM0MywgMTM2OV0gKHZvaWNlLWZhbWlseSA6IHBhdWwsIGNoaWxkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTMtMTQvMTUsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDE1LTE5LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SOiAxOS0yMC8yMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMjEtMjYsIA0KLVsxMzY5LCAxMzcwXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzEzNzAsIDEzODBdICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTM4MCwgMTM5MV0gKHN0cmVzcyA6IDIwKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTYvNywgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDctOC85LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogOS0xMSwgDQotWzEzOTEsIDEzOTJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTM5MiwgMTQwMl0gKA0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMTAsIA0KLVsxNDAyLCAxNDE1XSAocmljaG5lc3MgOiA5MCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA5LTEwLzExLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUjogMTEtMTMsIA0KLVsxNDE1LCAxNDE2XSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE0MTYsIDE0MjZdICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTQyNiwgMTQ1M10gKGN1ZS1iZWZvcmUgOiB1cmwoInBpbmcuYXUiKSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC0xMC8xMSwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDExLTEyLzEzLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX1VSSTogMTMtMjcsIA0KLVsxNDUzLCAxNDU5XSAoDQotICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTYsIA0KLVsxNDU5LCAxNDYwXSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE0NjAsIDE0NjZdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzE0NjYsIDE0NzRdIChQLmhlaWRpICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9FTEVNRU5UX05BTUU6IDAtMSwgQ29udGV4dFJlZ2lvbi0tPiBTRUxFQ1RPUl9DTEFTUzogMS03LzgsIA0KLVsxNDc0LCAxNDg1XSAoew0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IExCUkFDRTogMC0xLzExLCANCi1bMTQ4NSwgMTUwNl0gKGF6aW11dGggOiBjZW50ZXItbGVmdCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC03LzgsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA4LTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDEwLTIxLCANCi1bMTUwNiwgMTUwN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNTA3LCAxNTE3XSAoDQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xMCwgDQotWzE1MTcsIDE1MzZdIChlbGV2YXRpb24gOiAxMi4zZGVnKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTE5LCANCi1bMTUzNiwgMTUzN10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNTM3LCAxNTQ3XSAoDQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xMCwgDQotWzE1NDcsIDE1NjRdIChwYXVzZSA6IDMwbXMgMS42cykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC01LzYsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiA2LTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDgtMTIvMTMsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMy0xNywgDQotWzE1NjQsIDE1NzBdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzE1NzAsIDE1NzFdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTU3MSwgMTU3N10gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTU3NywgMTU4NV0gKFAucGV0ZXIgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0VMRU1FTlRfTkFNRTogMC0xLCBDb250ZXh0UmVnaW9uLS0+IFNFTEVDVE9SX0NMQVNTOiAxLTcvOCwgDQotWzE1ODUsIDE1OTZdICh7DQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gTEJSQUNFOiAwLTEvMTEsIA0KLVsxNTk2LCAxNjExXSAoYXppbXV0aCA6IHJpZ2h0KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTcvOCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDgtOS8xMCwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9JREVOVDogMTAtMTUsIA0KLVsxNjExLCAxNjEyXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE2MTIsIDE2MjJdICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTYyMiwgMTY0Ml0gKGVsZXZhdGlvbiA6IC0wLjM2cmFkKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTkvMTAsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fU0VQQVJBVE9SOiAxMC0xMS8xMiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT046IDEyLTIwLCANCi1bMTY0MiwgMTY0M10gKDspDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fREVMSU1JVEVSOiAwLTEsIA0KLVsxNjQzLCAxNjUzXSAoDQotICAgICAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC0xMCwgDQotWzE2NTMsIDE2NjZdIChwaXRjaCA6IDIxMEh6KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogOC0xMywgDQotWzE2NjYsIDE2NzJdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzE2NzIsIDE2NzNdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTY3MywgMTY3OV0gKA0KLSAgICApDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC02LCANCi1bMTY3OSwgMTY4Nl0gKFAuZ29hdCApDQotICAgIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfRUxFTUVOVF9OQU1FOiAwLTEsIENvbnRleHRSZWdpb24tLT4gU0VMRUNUT1JfQ0xBU1M6IDEtNi83LCANCi1bMTY4NiwgMTY5N10gKHsNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBMQlJBQ0U6IDAtMS8xMSwgDQotWzE2OTcsIDE3MTJdICh2b2x1bWUgOiB4LXNvZnQpDQotICAgIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fUFJPUEVSVFk6IDAtNi83LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogNy04LzksIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfSURFTlQ6IDktMTUsIA0KLVsxNzEyLCAxNzEzXSAoOykNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9ERUxJTUlURVI6IDAtMSwgDQotWzE3MTMsIDE3MjNdICgNCi0gICAgICAgICkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTEwLCANCi1bMTcyMywgMTc0MV0gKGVsZXZhdGlvbiA6IDY2Z3JhZCkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9QUk9QRVJUWTogMC05LzEwLCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1NFUEFSQVRPUjogMTAtMTEvMTIsIENvbnRleHRSZWdpb24tLT4gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OOiAxMi0xOCwgDQotWzE3NDEsIDE3NDJdICg7KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX0RFTElNSVRFUjogMC0xLCANCi1bMTc0MiwgMTc1Ml0gKA0KLSAgICAgICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtMTAsIA0KLVsxNzUyLCAxNzY3XSAocGl0Y2ggOiAwLjE3a0h6KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1BST1BFUlRZOiAwLTUvNiwgQ29udGV4dFJlZ2lvbi0tPiBERUNMQVJBVElPTl9TRVBBUkFUT1I6IDYtNy84LCBDb250ZXh0UmVnaW9uLS0+IERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTjogOC0xNSwgDQotWzE3NjcsIDE3NzNdICgNCi0gICAgKQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFM6IDAtNiwgDQotWzE3NzMsIDE3NzRdICh9KQ0KLSAgICBDb250ZXh0UmVnaW9uLS0+IFJCUkFDRTogMC0xLCANCi1bMTc3NCwgMTc3Nl0gKA0KLSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBTOiAwLTIsIA0KLVsxNzc2LCAxNzc3XSAofSkNCi0gICAgQ29udGV4dFJlZ2lvbi0tPiBSQlJBQ0U6IDAtMSwgDQotWzE3NzcsIDE3ODFdICgNCi0NCi0pDQotICAgIENvbnRleHRSZWdpb24tLT4gUzogMC00LCANCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDEuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDEuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MDNhNDM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAxLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMCwgMg0KLVsgXSBTIC0gMiwgMQ0KLVt7XSBMQlJBQ0UgLSAzLCAxDQotWw0KLQ0KLQldIFMgLSA0LCA1DQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDksIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQsIDENCi1bIF0gUyAtIDE1LCAxDQotW3doaXRlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2LCA1DQotWw0KLQldIFMgLSAyMSwgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAyNCwgMQ0KLVsNCi0NCi0JXSBTIC0gMjUsIDUNCi1bYmFja2dyb3VuZC1jb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzMCwgMTYNCi1bIF0gUyAtIDQ2LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQ3LCAxDQotWyBdIFMgLSA0OCwgMQ0KLVtibGFja10gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA0OSwgNQ0KLVsNCi0JDQotXSBTIC0gNTQsIDUNCi1bfV0gUkJSQUNFIC0gNTksIDENCi1bDQotXSBTIC0gNjAsIDINCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDIuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGY2MDQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTAyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLVtAaW1wb3J0XSBJTVBPUlQgLSAwLCA3DQotWyBdIFMgLSA3LCAxDQotW3VybCgiaG9nZS5jc3MiKV0gVVJJIC0gOCwgMTUNCi1bO10gREVMSU1JVEVSIC0gMjMsIDENCi1bDQotXSBTIC0gMjQsIDINCi1bQGltcG9ydF0gSU1QT1JUIC0gMjYsIDcNCi1bIF0gUyAtIDMzLCAxDQotWy8qIGNvbW1lbnQgKi9dIENPTU1FTlQgLSAzNCwgMTMNCi1bIF0gUyAtIDQ3LCAxDQotW3VybChob2dlLmNzcyldIFVSSSAtIDQ4LCAxMw0KLVs7XSBERUxJTUlURVIgLSA2MSwgMQ0KLVsNCi1dIFMgLSA2MiwgMg0KLVtAaW1wb3J0XSBJTVBPUlQgLSA2NCwgNw0KLVsgXSBTIC0gNzEsIDENCi1bImhvZ2UuY3NzIl0gU1RSSU5HIC0gNzIsIDEwDQotWyBdIFMgLSA4MiwgMQ0KLVsvKiBjb21tZW50ICovXSBDT01NRU5UIC0gODMsIDEzDQotWztdIERFTElNSVRFUiAtIDk2LCAxDQotWw0KLV0gUyAtIDk3LCAyDQotW0BJTVBPUlRdIElNUE9SVCAtIDk5LCA3DQotWyBdIFMgLSAxMDYsIDENCi1bJ2hvZ2UuY3NzJ10gU1RSSU5HIC0gMTA3LCAxMA0KLVsgXSBTIC0gMTE3LCAxDQotWyxdIHVuZGVmaW5lZCAtIDExOCwgMQ0KLVttZWRpYTFdIE1FRElVTSAtIDExOSwgNg0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxMjUsIDENCi1bbWVkaWEyXSBNRURJVU0gLSAxMjYsIDYNCi1bLF0gTUVESUFfU0VQQVJBVE9SIC0gMTMyLCAxDQotWyxdIHVuZGVmaW5lZCAtIDEzMywgMQ0KLVttZWRpYTNdIE1FRElVTSAtIDEzNCwgNg0KLVsgXSBTIC0gMTQwLCAxDQotW21dIHVuZGVmaW5lZCAtIDE0MSwgMQ0KLVtlXSB1bmRlZmluZWQgLSAxNDIsIDENCi1bZF0gdW5kZWZpbmVkIC0gMTQzLCAxDQotW2ldIHVuZGVmaW5lZCAtIDE0NCwgMQ0KLVthXSB1bmRlZmluZWQgLSAxNDUsIDENCi1bNF0gdW5kZWZpbmVkIC0gMTQ2LCAxDQotWyxdIE1FRElBX1NFUEFSQVRPUiAtIDE0NywgMQ0KLVttZWRpYTVdIE1FRElVTSAtIDE0OCwgNg0KLVsgXSBTIC0gMTU0LCAxDQotW0BpbXBvcnRdIElNUE9SVCAtIDE1NSwgNw0KLVsgXSBTIC0gMTYyLCAxDQotW21dIHVuZGVmaW5lZCAtIDE2MywgMQ0KLVtlXSB1bmRlZmluZWQgLSAxNjQsIDENCi1bZF0gdW5kZWZpbmVkIC0gMTY1LCAxDQotW2ldIHVuZGVmaW5lZCAtIDE2NiwgMQ0KLVthXSB1bmRlZmluZWQgLSAxNjcsIDENCi1bNl0gdW5kZWZpbmVkIC0gMTY4LCAxDQotWztdIERFTElNSVRFUiAtIDE2OSwgMQ0KLVsNCi0NCi1dIFMgLSAxNzAsIDQNCi1bPCEtLV0gQ0RPIC0gMTc0LCA0DQotWyBdIFMgLSAxNzgsIDENCi1bLyogaG9nZWhvZ2UgKi9dIENPTU1FTlQgLSAxNzksIDE0DQotWw0KLQ0KLV0gUyAtIDE5MywgNA0KLVstLT5dIENEQyAtIDE5NywgMw0KLVsNCi0NCi1dIFMgLSAyMDAsIDQNCi1bLyogY29tbWVudCAyICovXSBDT01NRU5UIC0gMjA0LCAxNQ0KLVsNCi1dIFMgLSAyMTksIDINCi1ba3Vzb10gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjIxLCA0DQotWw0KLV0gUyAtIDIyNSwgMg0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwMy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwMy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNhM2UxMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTI0ICswLDAgQEAKLVtAaW1wb3J0XSBJTVBPUlQgLSAwLCA3DQotWyBdIFMgLSA3LCAxDQotW3VybCgiLi4vc2FtcGxlMi5jc3MiKV0gVVJJIC0gOCwgMjENCi1bO10gREVMSU1JVEVSIC0gMjksIDENCi1bDQotDQotXSBTIC0gMzAsIDQNCi1bLyogU2FtcGxlIFN0eWxlcyAqL10gQ09NTUVOVCAtIDM0LCAxOQ0KLVsNCi0NCi1dIFMgLSA1MywgNA0KLVtCT0RZXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA1NywgNA0KLVsgXSBTIC0gNjEsIDENCi1be10gTEJSQUNFIC0gNjIsIDENCi1bDQotCV0gUyAtIDYzLCAzDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDY2LCA1DQotWyBdIFMgLSA3MSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3MiwgMQ0KLVsgXSBTIC0gNzMsIDENCi1bYmxhY2tdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzQsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNzksIDENCi1bDQotCV0gUyAtIDgwLCAzDQotW2JhY2tncm91bmQtY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gODMsIDE2DQotWyBdIFMgLSA5OSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDAsIDENCi1bIF0gUyAtIDEwMSwgMQ0KLVtyZ2IoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDEwMiwgNA0KLVsxODFdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEwNiwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEwOSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTEwLCAxDQotWzI1M10gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTExLCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTE0LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMTUsIDENCi1bMjExXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMTYsIDMNCi1bKV0gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0UgLSAxMTksIDENCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTIwLCAxDQotWw0KLQldIFMgLSAxMjEsIDMNCi1bdGV4dC1hbGlnbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjQsIDEwDQotWyBdIFMgLSAxMzQsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTM1LCAxDQotWyBdIFMgLSAxMzYsIDENCi1bY2VudGVyXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEzNywgNg0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNDMsIDENCi1bDQotCV0gUyAtIDE0NCwgMw0KLVtmb250LWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNDcsIDExDQotWyBdIFMgLSAxNTgsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTU5LCAxDQotWyBdIFMgLSAxNjAsIDENCi1bIkhlaXNlaSBNaW5jaG8gVzMiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNjEsIDE4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTc5LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxODAsIDENCi1bc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTgxLCA1DQotWw0KLV0gUyAtIDE4NiwgMg0KLVt9XSBSQlJBQ0UgLSAxODgsIDENCi1bDQotDQotXSBTIC0gMTg5LCA0DQotW0BwYWdlXSBQQUdFIC0gMTkzLCA1DQotWyBdIFMgLSAxOTgsIDENCi1bOmxlZnRdIENTU19QQUdFX1NFTEVDVE9SIC0gMTk5LCA1DQotWyBdIFMgLSAyMDQsIDENCi1be10gTEJSQUNFIC0gMjA1LCAxDQotWyBdIFMgLSAyMDYsIDENCi1bbWFyZ2luLWxlZnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjA3LCAxMQ0KLVsgXSBTIC0gMjE4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDIxOSwgMQ0KLVsgXSBTIC0gMjIwLCAxDQotWzRjbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMjIxLCAzDQotWyBdIFMgLSAyMjQsIDENCi1bfV0gUkJSQUNFIC0gMjI1LCAxDQotWw0KLQ0KLV0gUyAtIDIyNiwgNA0KLVtAbWVkaWFdIE1FRElBIC0gMjMwLCA2DQotWyBdIFMgLSAyMzYsIDENCi1bYXVyYWxdIE1FRElVTSAtIDIzNywgNQ0KLVsgXSBTIC0gMjQyLCAxDQotW3tdIExCUkFDRSAtIDI0MywgMQ0KLVsNCi0JXSBTIC0gMjQ0LCAzDQotW1BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI0NywgMQ0KLVsuaGVpZGldIFNFTEVDVE9SX0NMQVNTIC0gMjQ4LCA2DQotWyBdIFMgLSAyNTQsIDENCi1be10gTEJSQUNFIC0gMjU1LCAxDQotWw0KLQkJXSBTIC0gMjU2LCA0DQotW2F6aW11dGhdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjYwLCA3DQotWyBdIFMgLSAyNjcsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjY4LCAxDQotWyBdIFMgLSAyNjksIDENCi1bY2VudGVyLWxlZnRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMjcwLCAxMQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAyODEsIDENCi1bDQotCQldIFMgLSAyODIsIDQNCi1bZWxldmF0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDI4NiwgOQ0KLVsgXSBTIC0gMjk1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI5NiwgMQ0KLVsgXSBTIC0gMjk3LCAxDQotWzEyLjNkZWddIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDI5OCwgNw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAzMDUsIDENCi1bDQotCQldIFMgLSAzMDYsIDQNCi1bcGF1c2VdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzEwLCA1DQotWyBdIFMgLSAzMTUsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzE2LCAxDQotWyBdIFMgLSAzMTcsIDENCi1bMzBtc10gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMzE4LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAzMjIsIDENCi1bMS42c10gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMzIzLCA0DQotWw0KLQldIFMgLSAzMjcsIDMNCi1bfV0gUkJSQUNFIC0gMzMwLCAxDQotWw0KLV0gUyAtIDMzMSwgMg0KLVt9XSBSQlJBQ0UgLSAzMzMsIDENCi1bDQotXSBTIC0gMzM0LCAyDQotDQotLS0tLS0tLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA0LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ1ZDJlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw3MDYgKzAsMCBAQAotW0BjaGFyc2V0XSBDSEFSU0VUIC0gMCwgOA0KLVsgXSBTIC0gOCwgMQ0KLVsiSVNPLTg4NTktMSJdIFNUUklORyAtIDksIDEyDQotWztdIERFTElNSVRFUiAtIDIxLCAxDQotWw0KLQ0KLV0gUyAtIDIyLCA0DQotW0BpbXBvcnRdIElNUE9SVCAtIDI2LCA3DQotWyBdIFMgLSAzMywgMQ0KLVt1cmwoImhvZ2UuY3NzIildIFVSSSAtIDM0LCAxNQ0KLVs7XSBERUxJTUlURVIgLSA0OSwgMQ0KLVsNCi1dIFMgLSA1MCwgMg0KLVtAaW1wb3J0XSBJTVBPUlQgLSA1MiwgNw0KLVsgXSBTIC0gNTksIDENCi1bLyogY29tbWVudCAqL10gQ09NTUVOVCAtIDYwLCAxMw0KLVsgXSBTIC0gNzMsIDENCi1bdXJsKGhvZ2UuY3NzKV0gVVJJIC0gNzQsIDEzDQotWztdIERFTElNSVRFUiAtIDg3LCAxDQotWw0KLV0gUyAtIDg4LCAyDQotW0BpbXBvcnRdIElNUE9SVCAtIDkwLCA3DQotWyBdIFMgLSA5NywgMQ0KLVsiaG9nZS5jc3MiXSBTVFJJTkcgLSA5OCwgMTANCi1bIF0gUyAtIDEwOCwgMQ0KLVsvKiBjb21tZW50ICovXSBDT01NRU5UIC0gMTA5LCAxMw0KLVs7XSBERUxJTUlURVIgLSAxMjIsIDENCi1bDQotXSBTIC0gMTIzLCAyDQotW0BJTVBPUlRdIElNUE9SVCAtIDEyNSwgNw0KLVsgXSBTIC0gMTMyLCAxDQotWydob2dlLmNzcyddIFNUUklORyAtIDEzMywgMTANCi1bIF0gUyAtIDE0MywgMQ0KLVttZWRpYTFdIE1FRElVTSAtIDE0NCwgNg0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxNTAsIDENCi1bbWVkaWEyXSBNRURJVU0gLSAxNTEsIDYNCi1bIF0gUyAtIDE1NywgMQ0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSAxNTgsIDENCi1bIF0gUyAtIDE1OSwgMQ0KLVttZWRpYTNdIE1FRElVTSAtIDE2MCwgNg0KLVs7XSBERUxJTUlURVIgLSAxNjYsIDENCi1bDQotDQotXSBTIC0gMTY3LCA0DQotW0BtZWRpYV0gTUVESUEgLSAxNzEsIDYNCi1bIF0gUyAtIDE3NywgMQ0KLVtwcmludF0gTUVESVVNIC0gMTc4LCA1DQotWyBdIFMgLSAxODMsIDENCi1be10gTEJSQUNFIC0gMTg0LCAxDQotWw0KLQ0KLV0gUyAtIDE4NSwgNA0KLVt9XSBSQlJBQ0UgLSAxODksIDENCi1bDQotDQotXSBTIC0gMTkwLCA0DQotW0BwYWdlXSBQQUdFIC0gMTk0LCA1DQotWyBdIFMgLSAxOTksIDENCi1bOmxlZnRdIENTU19QQUdFX1NFTEVDVE9SIC0gMjAwLCA1DQotWyBdIFMgLSAyMDUsIDENCi1be10gTEJSQUNFIC0gMjA2LCAxDQotWw0KLQ0KLV0gUyAtIDIwNywgNA0KLVt9XSBSQlJBQ0UgLSAyMTEsIDENCi1bDQotDQotXSBTIC0gMjEyLCA0DQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyMTYsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMjE4LCAxDQotWyBdIFMgLSAyMTksIDENCi1baDJdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDIyMCwgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAyMjIsIDENCi1bIF0gUyAtIDIyMywgMQ0KLVtoM10gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjI0LCAyDQotWyBdIFMgLSAyMjYsIDENCi1be10gTEJSQUNFIC0gMjI3LCAxDQotWyAgXSBTIC0gMjI4LCAyDQotW2ZvbnQtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDIzMCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjQxLCAxDQotWyBdIFMgLSAyNDIsIDENCi1bc2Fucy1zZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAyNDMsIDEwDQotWyAgXSBTIC0gMjUzLCAyDQotW31dIFJCUkFDRSAtIDI1NSwgMQ0KLVsNCi1dIFMgLSAyNTYsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI1OCwgMg0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMjYwLCAxDQotW2VtXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyNjEsIDINCi1bIF0gUyAtIDI2MywgMQ0KLVt7XSBMQlJBQ0UgLSAyNjQsIDENCi1bICBdIFMgLSAyNjUsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjY3LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI3MiwgMQ0KLVsgXSBTIC0gMjczLCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMjc0LCA0DQotWyAgXSBTIC0gMjc4LCAyDQotW31dIFJCUkFDRSAtIDI4MCwgMQ0KLVsNCi1dIFMgLSAyODEsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyODMsIDMNCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDI4NiwgMQ0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyODcsIDENCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDI4OCwgMQ0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAyODksIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gMjkwLCAxDQotW2hyZWZdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gMjkxLCA0DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSAyOTUsIDENCi1bIF0gUyAtIDI5NiwgMQ0KLVt7XSBMQlJBQ0UgLSAyOTcsIDENCi1bICBdIFMgLSAyOTgsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzAwLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMwNSwgMQ0KLVsgXSBTIC0gMzA2LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMzA3LCA0DQotWyAgXSBTIC0gMzExLCAyDQotW31dIFJCUkFDRSAtIDMxMywgMQ0KLVsNCi1dIFMgLSAzMTQsIDINCi1bYm9keV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzE2LCA0DQotWyBdIFMgLSAzMjAsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDMyMSwgMQ0KLVsgXSBTIC0gMzIyLCAxDQotW1BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDMyMywgMQ0KLVsgXSBTIC0gMzI0LCAxDQotW3tdIExCUkFDRSAtIDMyNSwgMQ0KLVsgIF0gUyAtIDMyNiwgMg0KLVtsaW5lLWhlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzMjgsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMzOSwgMQ0KLVsgXSBTIC0gMzQwLCAxDQotWzEuM10gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMzQxLCAzDQotWyAgXSBTIC0gMzQ0LCAyDQotW31dIFJCUkFDRSAtIDM0NiwgMQ0KLVsNCi1dIFMgLSAzNDcsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNDksIDMNCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM1MiwgMQ0KLVtvbF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzUzLCAyDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzNTUsIDENCi1bbGldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM1NiwgMg0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzU4LCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM1OSwgMQ0KLVsgXSBTIC0gMzYwLCAxDQotW3tdIExCUkFDRSAtIDM2MSwgMQ0KLVsgXSBTIC0gMzYyLCAxDQotW31dIFJCUkFDRSAtIDM2MywgMQ0KLVsNCi1dIFMgLSAzNjQsIDINCi1bbWF0aF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzY2LCA0DQotWyBdIFMgLSAzNzAsIDENCi1bK10gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM3MSwgMQ0KLVsgXSBTIC0gMzcyLCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM3MywgMQ0KLVsgXSBTIC0gMzc0LCAxDQotW3tdIExCUkFDRSAtIDM3NSwgMQ0KLVsgIF0gUyAtIDM3NiwgMg0KLVt0ZXh0LWluZGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzNzgsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDM4OSwgMQ0KLVsgXSBTIC0gMzkwLCAxDQotWzBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDM5MSwgMQ0KLVsgIF0gUyAtIDM5MiwgMg0KLVt9XSBSQlJBQ0UgLSAzOTQsIDENCi1bDQotXSBTIC0gMzk1LCAyDQotW2gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzOTcsIDINCi1bLm9wZW5lcl0gU0VMRUNUT1JfQ0xBU1MgLSAzOTksIDcNCi1bIF0gUyAtIDQwNiwgMQ0KLVsrXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gNDA3LCAxDQotWyBdIFMgLSA0MDgsIDENCi1baDJdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDQwOSwgMg0KLVsgXSBTIC0gNDExLCAxDQotW3tdIExCUkFDRSAtIDQxMiwgMQ0KLVsgIF0gUyAtIDQxMywgMg0KLVttYXJnaW4tdG9wXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQxNSwgMTANCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDI1LCAxDQotWyBdIFMgLSA0MjYsIDENCi1bLTVtbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNDI3LCA0DQotWyAgXSBTIC0gNDMxLCAyDQotW31dIFJCUkFDRSAtIDQzMywgMQ0KLVsNCi1dIFMgLSA0MzQsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDQzNiwgMg0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA0MzgsIDENCi1bdGl0bGVdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNDM5LCA1DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA0NDQsIDENCi1bIF0gUyAtIDQ0NSwgMQ0KLVt7XSBMQlJBQ0UgLSA0NDYsIDENCi1bICBdIFMgLSA0NDcsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDQ5LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQ1NCwgMQ0KLVsgXSBTIC0gNDU1LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNDU2LCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDQ2MCwgMQ0KLVsgIF0gUyAtIDQ2MSwgMg0KLVt9XSBSQlJBQ0UgLSA0NjMsIDENCi1bDQotXSBTIC0gNDY0LCAyDQotW3NwYW5dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDQ2NiwgNA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA0NzAsIDENCi1bY2xhc3NdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNDcxLCA1DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDQ3NiwgMQ0KLVtleGFtcGxlXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA0NzcsIDcNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDQ4NCwgMQ0KLVsgXSBTIC0gNDg1LCAxDQotW3tdIExCUkFDRSAtIDQ4NiwgMQ0KLVsgIF0gUyAtIDQ4NywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA0ODksIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDk0LCAxDQotWyBdIFMgLSA0OTUsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA0OTYsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNTAwLCAxDQotWyAgXSBTIC0gNTAxLCAyDQotW31dIFJCUkFDRSAtIDUwMywgMQ0KLVsNCi1dIFMgLSA1MDQsIDINCi1bc3Bhbl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNTA2LCA0DQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDUxMCwgMQ0KLVtoZWxsb10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA1MTEsIDUNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNTE2LCAxDQotWyJDbGV2ZWxhbmQiXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA1MTcsIDExDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA1MjgsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNTI5LCAxDQotW2dvb2RieWVdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNTMwLCA3DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDUzNywgMQ0KLVsiQ29sdW1idXMiXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA1MzgsIDEwDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA1NDgsIDENCi1bIF0gUyAtIDU0OSwgMQ0KLVt7XSBMQlJBQ0UgLSA1NTAsIDENCi1bICBdIFMgLSA1NTEsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNTUzLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDU1OCwgMQ0KLVsgXSBTIC0gNTU5LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNTYwLCA0DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDU2NCwgMQ0KLVsgIF0gUyAtIDU2NSwgMg0KLVt9XSBSQlJBQ0UgLSA1NjcsIDENCi1bDQotXSBTIC0gNTY4LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDU3MCwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA1NzEsIDENCi1bcmVsXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDU3MiwgMw0KLVt+PV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNTc1LCAyDQotWyJjb3B5cmlnaHQiXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA1NzcsIDExDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA1ODgsIDENCi1bIF0gUyAtIDU4OSwgMQ0KLVt7XSBMQlJBQ0UgLSA1OTAsIDENCi1bICBdIFMgLSA1OTEsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNTkzLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDU5OCwgMQ0KLVsgXSBTIC0gNTk5LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNjAwLCA0DQotWyAgXSBTIC0gNjA0LCAyDQotW31dIFJCUkFDRSAtIDYwNiwgMQ0KLVsNCi1dIFMgLSA2MDcsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNjA5LCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDYxMCwgMQ0KLVtocmVmXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDYxMSwgNA0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA2MTUsIDENCi1bImh0dHA6Ly93d3cudzMub3JnLyJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDYxNiwgMjANCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDYzNiwgMQ0KLVsgXSBTIC0gNjM3LCAxDQotW3tdIExCUkFDRSAtIDYzOCwgMQ0KLVsgIF0gUyAtIDYzOSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA2NDEsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNjQ2LCAxDQotWyBdIFMgLSA2NDcsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA2NDgsIDQNCi1bICBdIFMgLSA2NTIsIDINCi1bfV0gUkJSQUNFIC0gNjU0LCAxDQotWw0KLV0gUyAtIDY1NSwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSA2NTcsIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNjU4LCAxDQotW2xhbmddIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNjU5LCA0DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDY2MywgMQ0KLVtmcl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNjY0LCAyDQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA2NjYsIDENCi1bIF0gUyAtIDY2NywgMQ0KLVt7XSBMQlJBQ0UgLSA2NjgsIDENCi1bICBdIFMgLSA2NjksIDINCi1bZGlzcGxheV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA2NzEsIDcNCi1bIF0gUyAtIDY3OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA2NzksIDENCi1bIF0gUyAtIDY4MCwgMQ0KLVtub25lXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDY4MSwgNA0KLVsgIF0gUyAtIDY4NSwgMg0KLVt9XSBSQlJBQ0UgLSA2ODcsIDENCi1bDQotXSBTIC0gNjg4LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDY5MCwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA2OTEsIDENCi1bbGFuZ10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA2OTIsIDQNCi1bfD1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDY5NiwgMg0KLVsiZW4iXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA2OTgsIDQNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDcwMiwgMQ0KLVsgXSBTIC0gNzAzLCAxDQotW3tdIExCUkFDRSAtIDcwNCwgMQ0KLVsgIF0gUyAtIDcwNSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA3MDcsIDUNCi1bIF0gUyAtIDcxMiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3MTMsIDENCi1bIF0gUyAtIDcxNCwgMQ0KLVtyZWRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzE1LCAzDQotWyAgXSBTIC0gNzE4LCAyDQotW31dIFJCUkFDRSAtIDcyMCwgMQ0KLVsNCi1dIFMgLSA3MjEsIDINCi1bRElBTE9HVUVdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDcyMywgOA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA3MzEsIDENCi1bY2hhcmFjdGVyXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDczMiwgOQ0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA3NDEsIDENCi1bcm9tZW9dIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDc0MiwgNQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNzQ3LCAxDQotWw0KLV0gUyAtIDc0OCwgMg0KLVt7XSBMQlJBQ0UgLSA3NTAsIDENCi1bICBdIFMgLSA3NTEsIDINCi1bdm9pY2UtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDc1MywgMTINCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNzY1LCAxDQotWyBdIFMgLSA3NjYsIDENCi1bIkxhd3JlbmNlIE9saXZpZXIiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA3NjcsIDE4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNzg1LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA3ODYsIDENCi1bY2hhcmxlc10gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA3ODcsIDcNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA3OTQsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDc5NSwgMQ0KLVttYWxlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDc5NiwgNA0KLVsgIF0gUyAtIDgwMCwgMg0KLVt9XSBSQlJBQ0UgLSA4MDIsIDENCi1bDQotXSBTIC0gODAzLCAyDQotW0RJQUxPR1VFXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA4MDUsIDgNCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gODEzLCAxDQotWyBdIFMgLSA4MTQsIDENCi1bY2hhcmFjdGVyXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDgxNSwgOQ0KLVsgXSBTIC0gODI0LCAxDQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDgyNSwgMQ0KLVsgXSBTIC0gODI2LCAxDQotW2p1bGlldF0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gODI3LCA2DQotWyBdIFMgLSA4MzMsIDENCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDgzNCwgMQ0KLVsNCi1dIFMgLSA4MzUsIDINCi1be10gTEJSQUNFIC0gODM3LCAxDQotWyAgXSBTIC0gODM4LCAyDQotW3ZvaWNlLWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA4NDAsIDEyDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDg1MiwgMQ0KLVsgXSBTIC0gODUzLCAxDQotWyJWaXZpZW4gTGVpZ2giXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA4NTQsIDE0DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gODY4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA4NjksIDENCi1bdmljdG9yaWFdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gODcwLCA4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gODc4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA4NzksIDENCi1bZmVtYWxlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDg4MCwgNg0KLVsgIF0gUyAtIDg4NiwgMg0KLVt9XSBSQlJBQ0UgLSA4ODgsIDENCi1bDQotXSBTIC0gODg5LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDg5MSwgMQ0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gODkyLCA5DQotWyBdIFMgLSA5MDEsIDENCi1be10gTEJSQUNFIC0gOTAyLCAxDQotWyAgXSBTIC0gOTAzLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDkwNSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5MTAsIDENCi1bIF0gUyAtIDkxMSwgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5MTIsIDUNCi1bICBdIFMgLSA5MTcsIDINCi1bfV0gUkJSQUNFIC0gOTE5LCAxDQotWw0KLV0gUyAtIDkyMCwgMg0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gOTIyLCA5DQotWyBdIFMgLSA5MzEsIDENCi1be10gTEJSQUNFIC0gOTMyLCAxDQotWyAgXSBTIC0gOTMzLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDkzNSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA5NDAsIDENCi1bIF0gUyAtIDk0MSwgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5NDIsIDUNCi1bICBdIFMgLSA5NDcsIDINCi1bfV0gUkJSQUNFIC0gOTQ5LCAxDQotWw0KLV0gUyAtIDk1MCwgMg0KLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gOTUyLCAyDQotWy5wYXN0b3JhbF0gU0VMRUNUT1JfQ0xBU1MgLSA5NTQsIDkNCi1bIF0gUyAtIDk2MywgMQ0KLVt7XSBMQlJBQ0UgLSA5NjQsIDENCi1bICBdIFMgLSA5NjUsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTY3LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDk3MiwgMQ0KLVsgXSBTIC0gOTczLCAxDQotW2dyZWVuXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDk3NCwgNQ0KLVsgIF0gUyAtIDk3OSwgMg0KLVt9XSBSQlJBQ0UgLSA5ODEsIDENCi1bDQotXSBTIC0gOTgyLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDk4NCwgMQ0KLVsucGFzdG9yYWxdIFNFTEVDVE9SX0NMQVNTIC0gOTg1LCA5DQotWy5tYXJpbmVdIFNFTEVDVE9SX0NMQVNTIC0gOTk0LCA3DQotWyBdIFMgLSAxMDAxLCAxDQotW3tdIExCUkFDRSAtIDEwMDIsIDENCi1bICBdIFMgLSAxMDAzLCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwMDUsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTAxMCwgMQ0KLVsgXSBTIC0gMTAxMSwgMQ0KLVtncmVlbl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMDEyLCA1DQotWyAgXSBTIC0gMTAxNywgMg0KLVt9XSBSQlJBQ0UgLSAxMDE5LCAxDQotWw0KLV0gUyAtIDEwMjAsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEwMjIsIDINCi1bI2NoYXB0ZXIxXSBTRUxFQ1RPUl9JRCAtIDEwMjQsIDkNCi1bIF0gUyAtIDEwMzMsIDENCi1be10gTEJSQUNFIC0gMTAzNCwgMQ0KLVsgIF0gUyAtIDEwMzUsIDINCi1bdGV4dC1hbGlnbl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDM3LCAxMA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDQ3LCAxDQotWyBdIFMgLSAxMDQ4LCAxDQotW2NlbnRlcl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMDQ5LCA2DQotWyAgXSBTIC0gMTA1NSwgMg0KLVt9XSBSQlJBQ0UgLSAxMDU3LCAxDQotWw0KLV0gUyAtIDEwNTgsIDINCi1bZGl2XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMDYwLCAzDQotWyBdIFMgLSAxMDYzLCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxMDY0LCAxDQotWyBdIFMgLSAxMDY1LCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEwNjYsIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMDY3LCAxMg0KLVsgXSBTIC0gMTA3OSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMDgwLCAxDQotWyAgXSBTIC0gMTA4MSwgMg0KLVt0ZXh0LWluZGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMDgzLCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDk0LCAxDQotWyBdIFMgLSAxMDk1LCAxDQotWzBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEwOTYsIDENCi1bICBdIFMgLSAxMDk3LCAyDQotW31dIFJCUkFDRSAtIDEwOTksIDENCi1bDQotXSBTIC0gMTEwMCwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMTAyLCAxDQotWzpmaXJzdC1jaGlsZF0gU0VMRUNUT1JfUFNFVURPIC0gMTEwMywgMTINCi1bIF0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDExMTUsIDENCi1bZW1dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExMTYsIDINCi1bIF0gUyAtIDExMTgsIDENCi1be10gTEJSQUNFIC0gMTExOSwgMQ0KLVsgIF0gUyAtIDExMjAsIDINCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTEyMiwgMTENCi1bIF0gUyAtIDExMzMsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTEzNCwgMQ0KLVsgXSBTIC0gMTEzNSwgMQ0KLVtib2xkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDExMzYsIDQNCi1bICBdIFMgLSAxMTQwLCAyDQotW31dIFJCUkFDRSAtIDExNDIsIDENCi1bDQotXSBTIC0gMTE0MywgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAxMTQ1LCAxDQotWyBdIFMgLSAxMTQ2LCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxMTQ3LCAxDQotWyBdIFMgLSAxMTQ4LCAxDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExNDksIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMTUwLCAxMg0KLVsgXSBTIC0gMTE2MiwgMQ0KLVt7XSBMQlJBQ0UgLSAxMTYzLCAxDQotWyAgXSBTIC0gMTE2NCwgMg0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMTY2LCAxMQ0KLVsgXSBTIC0gMTE3NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMTc4LCAxDQotWyBdIFMgLSAxMTc5LCAxDQotW2JvbGRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTE4MCwgNA0KLVsgIF0gUyAtIDExODQsIDINCi1bfV0gUkJSQUNFIC0gMTE4NiwgMQ0KLVsNCi1dIFMgLSAxMTg3LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExODksIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMTkwLCAxMg0KLVsgXSBTIC0gMTIwMiwgMQ0KLVt7XSBMQlJBQ0UgLSAxMjAzLCAxDQotWyAgXSBTIC0gMTIwNCwgMg0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjA2LCAxMQ0KLVsgXSBTIC0gMTIxNywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjE4LCAxDQotWyBdIFMgLSAxMjE5LCAxDQotW2JvbGRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTIyMCwgNA0KLVsgIF0gUyAtIDEyMjQsIDINCi1bfV0gUkJSQUNFIC0gMTIyNiwgMQ0KLVsNCi1dIFMgLSAxMjI3LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEyMjksIDENCi1bLmV4dGVybmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDEyMzAsIDkNCi1bOnZpc2l0ZWRdIFNFTEVDVE9SX1BTRVVETyAtIDEyMzksIDgNCi1bIF0gUyAtIDEyNDcsIDENCi1be10gTEJSQUNFIC0gMTI0OCwgMQ0KLVsgIF0gUyAtIDEyNDksIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTI1MSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMjU2LCAxDQotWyBdIFMgLSAxMjU3LCAxDQotW2JsdWVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTI1OCwgNA0KLVsgIF0gUyAtIDEyNjIsIDINCi1bfV0gUkJSQUNFIC0gMTI2NCwgMQ0KLVsNCi1dIFMgLSAxMjY1LCAyDQotW2FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEyNjcsIDENCi1bOmZvY3VzXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMjY4LCA2DQotWzpob3Zlcl0gU0VMRUNUT1JfUFNFVURPIC0gMTI3NCwgNg0KLVsgXSBTIC0gMTI4MCwgMQ0KLVt7XSBMQlJBQ0UgLSAxMjgxLCAxDQotWyAgXSBTIC0gMTI4MiwgMg0KLVtiYWNrZ3JvdW5kXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyODQsIDEwDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyOTQsIDENCi1bIF0gUyAtIDEyOTUsIDENCi1bd2hpdGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTI5NiwgNQ0KLVsgIF0gUyAtIDEzMDEsIDINCi1bfV0gUkJSQUNFIC0gMTMwMywgMQ0KLVsNCi1dIFMgLSAxMzA0LCAyDQotW2h0bWxdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMDYsIDQNCi1bOmxhbmcoZnIpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMzEwLCA5DQotWyBdIFMgLSAxMzE5LCAxDQotW3tdIExCUkFDRSAtIDEzMjAsIDENCi1bICBdIFMgLSAxMzIxLCAyDQotW3F1b3Rlc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMzIzLCA2DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEzMjksIDENCi1bIF0gUyAtIDEzMzAsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTMzMSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTMzNSwgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzM2LCA0DQotWyAgXSBTIC0gMTM0MCwgMg0KLVt9XSBSQlJBQ0UgLSAxMzQyLCAxDQotWw0KLV0gUyAtIDEzNDMsIDINCi1baHRtbF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTM0NSwgNA0KLVs6bGFuZyhkZSldIFNFTEVDVE9SX1BTRVVETyAtIDEzNDksIDkNCi1bIF0gUyAtIDEzNTgsIDENCi1be10gTEJSQUNFIC0gMTM1OSwgMQ0KLVsgIF0gUyAtIDEzNjAsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzNjIsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTM2OCwgMQ0KLVsgXSBTIC0gMTM2OSwgMQ0KLVsnPj4nXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzcwLCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzc0LCAxDQotWyc8PCddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzNzUsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzNzksIDENCi1bJ1wyMDM5J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTM4MCwgNw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTM4NywgMQ0KLVsnXDIwM0EnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzg4LCA3DQotWyAgXSBTIC0gMTM5NSwgMg0KLVt9XSBSQlJBQ0UgLSAxMzk3LCAxDQotWw0KLV0gUyAtIDEzOTgsIDINCi1bOmxhbmcoZnIpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNDAwLCA5DQotWyBdIFMgLSAxNDA5LCAxDQotWz5dIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAxNDEwLCAxDQotWyBdIFMgLSAxNDExLCAxDQotW1FdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE0MTIsIDENCi1bIF0gUyAtIDE0MTMsIDENCi1be10gTEJSQUNFIC0gMTQxNCwgMQ0KLVsgIF0gUyAtIDE0MTUsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE0MTcsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQyMywgMQ0KLVsgXSBTIC0gMTQyNCwgMQ0KLVsnPDwnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDI1LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDI5LCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0MzAsIDQNCi1bICBdIFMgLSAxNDM0LCAyDQotW31dIFJCUkFDRSAtIDE0MzYsIDENCi1bDQotXSBTIC0gMTQzNywgMg0KLVs6bGFuZyhkZSldIFNFTEVDVE9SX1BTRVVETyAtIDE0MzksIDkNCi1bIF0gUyAtIDE0NDgsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDE0NDksIDENCi1bIF0gUyAtIDE0NTAsIDENCi1bUV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTQ1MSwgMQ0KLVsgXSBTIC0gMTQ1MiwgMQ0KLVt7XSBMQlJBQ0UgLSAxNDUzLCAxDQotWyAgXSBTIC0gMTQ1NCwgMg0KLVtxdW90ZXNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQ1NiwgNg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNDYyLCAxDQotWyBdIFMgLSAxNDYzLCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0NjQsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE0NjgsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQ2OSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTQ3MywgMQ0KLVsnXDIwMzknXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDc0LCA3DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDgxLCAxDQotWydcMjAzQSddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0ODIsIDcNCi1bICBdIFMgLSAxNDg5LCAyDQotW31dIFJCUkFDRSAtIDE0OTEsIDENCi1bDQotXSBTIC0gMTQ5MiwgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNDk0LCAxDQotWzpmaXJzdC1sZXR0ZXJdIFNFTEVDVE9SX1BTRVVETyAtIDE0OTUsIDEzDQotWyBdIFMgLSAxNTA4LCAxDQotW3tdIExCUkFDRSAtIDE1MDksIDENCi1bICBdIFMgLSAxNTEwLCAyDQotW2ZvbnQtc2l6ZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTEyLCA5DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1MjEsIDENCi1bIF0gUyAtIDE1MjIsIDENCi1bM2VtXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNTIzLCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE1MjYsIDENCi1bIF0gUyAtIDE1MjcsIDENCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTUyOCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTUzOSwgMQ0KLVsgXSBTIC0gMTU0MCwgMQ0KLVtub3JtYWxdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTU0MSwgNg0KLVsgIF0gUyAtIDE1NDcsIDINCi1bfV0gUkJSQUNFIC0gMTU0OSwgMQ0KLVsNCi1dIFMgLSAxNTUwLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE1NTIsIDENCi1bLnNwZWNpYWxdIFNFTEVDVE9SX0NMQVNTIC0gMTU1MywgOA0KLVs6YmVmb3JlXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNTYxLCA3DQotWyBdIFMgLSAxNTY4LCAxDQotW3tdIExCUkFDRSAtIDE1NjksIDENCi1bIF0gUyAtIDE1NzAsIDENCi1bY29udGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTcxLCA3DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1NzgsIDENCi1bIF0gUyAtIDE1NzksIDENCi1bIlNwZWNpYWwhICJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE1ODAsIDExDQotWyBdIFMgLSAxNTkxLCAxDQotW31dIFJCUkFDRSAtIDE1OTIsIDENCi1bDQotXSBTIC0gMTU5MywgMg0KLVtwXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNTk1LCAxDQotWy5zcGVjaWFsXSBTRUxFQ1RPUl9DTEFTUyAtIDE1OTYsIDgNCi1bOmZpcnN0LWxldHRlcl0gU0VMRUNUT1JfUFNFVURPIC0gMTYwNCwgMTMNCi1bIF0gUyAtIDE2MTcsIDENCi1be10gTEJSQUNFIC0gMTYxOCwgMQ0KLVsgXSBTIC0gMTYxOSwgMQ0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNjIwLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE2MjUsIDENCi1bIF0gUyAtIDE2MjYsIDENCi1bI2ZmZDgwMF0gREVDTEFSQVRJT05fVkFMVUVfSEFTSCAtIDE2MjcsIDcNCi1bIF0gUyAtIDE2MzQsIDENCi1bfV0gUkJSQUNFIC0gMTYzNSwgMQ0KLVsNCi1dIFMgLSAxNjM2LCAyDQotW0JPRFldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE2MzgsIDQNCi1bIF0gUyAtIDE2NDIsIDENCi1be10gTEJSQUNFIC0gMTY0MywgMQ0KLVsgXSBTIC0gMTY0NCwgMQ0KLVtmb250LWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNjQ1LCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjU2LCAxDQotWyBdIFMgLSAxNjU3LCAxDQotW0Jhc2tlcnZpbGxlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2NTgsIDExDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTY2OSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY3MCwgMQ0KLVsiSGVpc2kgTWluY2hvIFczIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTY3MSwgMTcNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjg4LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNjg5LCAxDQotW1N5bWJvbF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNjkwLCA2DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTY5NiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY5NywgMQ0KLVtzZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNjk4LCA1DQotWyBdIFMgLSAxNzAzLCAxDQotW31dIFJCUkFDRSAtIDE3MDQsIDENCi1bDQotXSBTIC0gMTcwNSwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAxNzA3LCAxDQotWzpsYW5nKGphLWpwKV0gU0VMRUNUT1JfUFNFVURPIC0gMTcwOCwgMTINCi1bIF0gUyAtIDE3MjAsIDENCi1be10gTEJSQUNFIC0gMTcyMSwgMQ0KLVsgXSBTIC0gMTcyMiwgMQ0KLVtmb250XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE3MjMsIDQNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTcyNywgMQ0KLVsgXSBTIC0gMTcyOCwgMQ0KLVs5MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE3MjksIDMNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3MzIsIDENCi1bMTRwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTczMywgNA0KLVsvXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE3MzcsIDENCi1bMTZwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTczOCwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTc0MiwgMQ0KLVsiSGVpc2VpIE1pbmNobyBXOSJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE3NDMsIDE4DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTc2MSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTc2MiwgMQ0KLVtzZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNzYzLCA1DQotWyBdIFMgLSAxNzY4LCAxDQotW31dIFJCUkFDRSAtIDE3NjksIDENCi1bDQotXSBTIC0gMTc3MCwgMg0KLVsqXSBTRUxFQ1RPUl9VTklWRVJTQUwgLSAxNzcyLCAxDQotWzpsYW5nKHpoLXR3KV0gU0VMRUNUT1JfUFNFVURPIC0gMTc3MywgMTINCi1bIF0gUyAtIDE3ODUsIDENCi1be10gTEJSQUNFIC0gMTc4NiwgMQ0KLVsgXSBTIC0gMTc4NywgMQ0KLVtmb250XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE3ODgsIDQNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTc5MiwgMQ0KLVsgXSBTIC0gMTc5MywgMQ0KLVs4MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE3OTQsIDMNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE3OTcsIDENCi1bMTRwdF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTc5OCwgNA0KLVsvXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE4MDIsIDENCi1bMTYuNXB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxODAzLCA2DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxODA5LCAxDQotWyJMaSBTdW5nIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTgxMCwgOQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE4MTksIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE4MjAsIDENCi1bc2VyaWZdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTgyMSwgNQ0KLVsgXSBTIC0gMTgyNiwgMQ0KLVt9XSBSQlJBQ0UgLSAxODI3LCAxDQotWw0KLV0gUyAtIDE4MjgsIDINCi0NCi0tLS0tLS0tDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDUuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDVkMmU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9yZXN1bHRzL0NTU1RleHRQYXJzZXJUZXN0LXNhbXBsZTA1LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcwNiArMCwwIEBACi1bQGNoYXJzZXRdIENIQVJTRVQgLSAwLCA4DQotWyBdIFMgLSA4LCAxDQotWyJJU08tODg1OS0xIl0gU1RSSU5HIC0gOSwgMTINCi1bO10gREVMSU1JVEVSIC0gMjEsIDENCi1bDQotDQotXSBTIC0gMjIsIDQNCi1bQGltcG9ydF0gSU1QT1JUIC0gMjYsIDcNCi1bIF0gUyAtIDMzLCAxDQotW3VybCgiaG9nZS5jc3MiKV0gVVJJIC0gMzQsIDE1DQotWztdIERFTElNSVRFUiAtIDQ5LCAxDQotWw0KLV0gUyAtIDUwLCAyDQotW0BpbXBvcnRdIElNUE9SVCAtIDUyLCA3DQotWyBdIFMgLSA1OSwgMQ0KLVsvKiBjb21tZW50ICovXSBDT01NRU5UIC0gNjAsIDEzDQotWyBdIFMgLSA3MywgMQ0KLVt1cmwoaG9nZS5jc3MpXSBVUkkgLSA3NCwgMTMNCi1bO10gREVMSU1JVEVSIC0gODcsIDENCi1bDQotXSBTIC0gODgsIDINCi1bQGltcG9ydF0gSU1QT1JUIC0gOTAsIDcNCi1bIF0gUyAtIDk3LCAxDQotWyJob2dlLmNzcyJdIFNUUklORyAtIDk4LCAxMA0KLVsgXSBTIC0gMTA4LCAxDQotWy8qIGNvbW1lbnQgKi9dIENPTU1FTlQgLSAxMDksIDEzDQotWztdIERFTElNSVRFUiAtIDEyMiwgMQ0KLVsNCi1dIFMgLSAxMjMsIDINCi1bQElNUE9SVF0gSU1QT1JUIC0gMTI1LCA3DQotWyBdIFMgLSAxMzIsIDENCi1bJ2hvZ2UuY3NzJ10gU1RSSU5HIC0gMTMzLCAxMA0KLVsgXSBTIC0gMTQzLCAxDQotW21lZGlhMV0gTUVESVVNIC0gMTQ0LCA2DQotWyxdIE1FRElBX1NFUEFSQVRPUiAtIDE1MCwgMQ0KLVttZWRpYTJdIE1FRElVTSAtIDE1MSwgNg0KLVsgXSBTIC0gMTU3LCAxDQotWyxdIE1FRElBX1NFUEFSQVRPUiAtIDE1OCwgMQ0KLVsgXSBTIC0gMTU5LCAxDQotW21lZGlhM10gTUVESVVNIC0gMTYwLCA2DQotWztdIERFTElNSVRFUiAtIDE2NiwgMQ0KLVsNCi0NCi1dIFMgLSAxNjcsIDQNCi1bQG1lZGlhXSBNRURJQSAtIDE3MSwgNg0KLVsgXSBTIC0gMTc3LCAxDQotW3ByaW50XSBNRURJVU0gLSAxNzgsIDUNCi1bIF0gUyAtIDE4MywgMQ0KLVt7XSBMQlJBQ0UgLSAxODQsIDENCi1bDQotDQotXSBTIC0gMTg1LCA0DQotW31dIFJCUkFDRSAtIDE4OSwgMQ0KLVsNCi0NCi1dIFMgLSAxOTAsIDQNCi1bQHBhZ2VdIFBBR0UgLSAxOTQsIDUNCi1bIF0gUyAtIDE5OSwgMQ0KLVs6bGVmdF0gQ1NTX1BBR0VfU0VMRUNUT1IgLSAyMDAsIDUNCi1bIF0gUyAtIDIwNSwgMQ0KLVt7XSBMQlJBQ0UgLSAyMDYsIDENCi1bDQotDQotXSBTIC0gMjA3LCA0DQotW31dIFJCUkFDRSAtIDIxMSwgMQ0KLVsNCi0NCi1dIFMgLSAyMTIsIDQNCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDIxNiwgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAyMTgsIDENCi1bIF0gUyAtIDIxOSwgMQ0KLVtoMl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjIwLCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDIyMiwgMQ0KLVsgXSBTIC0gMjIzLCAxDQotW2gzXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAyMjQsIDINCi1bIF0gUyAtIDIyNiwgMQ0KLVt7XSBMQlJBQ0UgLSAyMjcsIDENCi1bICBdIFMgLSAyMjgsIDINCi1bZm9udC1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMjMwLCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyNDEsIDENCi1bIF0gUyAtIDI0MiwgMQ0KLVtzYW5zLXNlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDI0MywgMTANCi1bICBdIFMgLSAyNTMsIDINCi1bfV0gUkJSQUNFIC0gMjU1LCAxDQotWw0KLV0gUyAtIDI1NiwgMg0KLVtoMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjU4LCAyDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAyNjAsIDENCi1bZW1dIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI2MSwgMg0KLVsgXSBTIC0gMjYzLCAxDQotW3tdIExCUkFDRSAtIDI2NCwgMQ0KLVsgIF0gUyAtIDI2NSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyNjcsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjcyLCAxDQotWyBdIFMgLSAyNzMsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAyNzQsIDQNCi1bICBdIFMgLSAyNzgsIDINCi1bfV0gUkJSQUNFIC0gMjgwLCAxDQotWw0KLV0gUyAtIDI4MSwgMg0KLVtkaXZdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI4MywgMw0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMjg2LCAxDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDI4NywgMQ0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMjg4LCAxDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDI4OSwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSAyOTAsIDENCi1baHJlZl0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSAyOTEsIDQNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDI5NSwgMQ0KLVsgXSBTIC0gMjk2LCAxDQotW3tdIExCUkFDRSAtIDI5NywgMQ0KLVsgIF0gUyAtIDI5OCwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAzMDAsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzA1LCAxDQotWyBdIFMgLSAzMDYsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAzMDcsIDQNCi1bICBdIFMgLSAzMTEsIDINCi1bfV0gUkJSQUNFIC0gMzEzLCAxDQotWw0KLV0gUyAtIDMxNCwgMg0KLVtib2R5XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzMTYsIDQNCi1bIF0gUyAtIDMyMCwgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzIxLCAxDQotWyBdIFMgLSAzMjIsIDENCi1bUF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzIzLCAxDQotWyBdIFMgLSAzMjQsIDENCi1be10gTEJSQUNFIC0gMzI1LCAxDQotWyAgXSBTIC0gMzI2LCAyDQotW2xpbmUtaGVpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDMyOCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzM5LCAxDQotWyBdIFMgLSAzNDAsIDENCi1bMS4zXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAzNDEsIDMNCi1bICBdIFMgLSAzNDQsIDINCi1bfV0gUkJSQUNFIC0gMzQ2LCAxDQotWw0KLV0gUyAtIDM0NywgMg0KLVtkaXZdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM0OSwgMw0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzUyLCAxDQotW29sXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNTMsIDINCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDM1NSwgMQ0KLVtsaV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzU2LCAyDQotWyBdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSAzNTgsIDENCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzU5LCAxDQotWyBdIFMgLSAzNjAsIDENCi1be10gTEJSQUNFIC0gMzYxLCAxDQotWyBdIFMgLSAzNjIsIDENCi1bfV0gUkJSQUNFIC0gMzYzLCAxDQotWw0KLV0gUyAtIDM2NCwgMg0KLVttYXRoXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAzNjYsIDQNCi1bIF0gUyAtIDM3MCwgMQ0KLVsrXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMzcxLCAxDQotWyBdIFMgLSAzNzIsIDENCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMzczLCAxDQotWyBdIFMgLSAzNzQsIDENCi1be10gTEJSQUNFIC0gMzc1LCAxDQotWyAgXSBTIC0gMzc2LCAyDQotW3RleHQtaW5kZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDM3OCwgMTENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzg5LCAxDQotWyBdIFMgLSAzOTAsIDENCi1bMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMzkxLCAxDQotWyAgXSBTIC0gMzkyLCAyDQotW31dIFJCUkFDRSAtIDM5NCwgMQ0KLVsNCi1dIFMgLSAzOTUsIDINCi1baDFdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDM5NywgMg0KLVsub3BlbmVyXSBTRUxFQ1RPUl9DTEFTUyAtIDM5OSwgNw0KLVsgXSBTIC0gNDA2LCAxDQotWytdIFNFTEVDVE9SX0NPTUJJTkFUT1IgLSA0MDcsIDENCi1bIF0gUyAtIDQwOCwgMQ0KLVtoMl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNDA5LCAyDQotWyBdIFMgLSA0MTEsIDENCi1be10gTEJSQUNFIC0gNDEyLCAxDQotWyAgXSBTIC0gNDEzLCAyDQotW21hcmdpbi10b3BdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDE1LCAxMA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0MjUsIDENCi1bIF0gUyAtIDQyNiwgMQ0KLVstNW1tXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA0MjcsIDQNCi1bICBdIFMgLSA0MzEsIDINCi1bfV0gUkJSQUNFIC0gNDMzLCAxDQotWw0KLV0gUyAtIDQzNCwgMg0KLVtoMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNDM2LCAyDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDQzOCwgMQ0KLVt0aXRsZV0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA0MzksIDUNCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDQ0NCwgMQ0KLVsgXSBTIC0gNDQ1LCAxDQotW3tdIExCUkFDRSAtIDQ0NiwgMQ0KLVsgIF0gUyAtIDQ0NywgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA0NDksIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNDU0LCAxDQotWyBdIFMgLSA0NTUsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA0NTYsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNDYwLCAxDQotWyAgXSBTIC0gNDYxLCAyDQotW31dIFJCUkFDRSAtIDQ2MywgMQ0KLVsNCi1dIFMgLSA0NjQsIDINCi1bc3Bhbl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNDY2LCA0DQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDQ3MCwgMQ0KLVtjbGFzc10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA0NzEsIDUNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNDc2LCAxDQotW2V4YW1wbGVdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDQ3NywgNw0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNDg0LCAxDQotWyBdIFMgLSA0ODUsIDENCi1be10gTEJSQUNFIC0gNDg2LCAxDQotWyAgXSBTIC0gNDg3LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQ4OSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0OTQsIDENCi1bIF0gUyAtIDQ5NSwgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDQ5NiwgNA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA1MDAsIDENCi1bICBdIFMgLSA1MDEsIDINCi1bfV0gUkJSQUNFIC0gNTAzLCAxDQotWw0KLV0gUyAtIDUwNCwgMg0KLVtzcGFuXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA1MDYsIDQNCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNTEwLCAxDQotW2hlbGxvXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDUxMSwgNQ0KLVs9XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA1MTYsIDENCi1bIkNsZXZlbGFuZCJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDUxNywgMTENCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDUyOCwgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA1MjksIDENCi1bZ29vZGJ5ZV0gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA1MzAsIDcNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNTM3LCAxDQotWyJDb2x1bWJ1cyJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDUzOCwgMTANCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDU0OCwgMQ0KLVsgXSBTIC0gNTQ5LCAxDQotW3tdIExCUkFDRSAtIDU1MCwgMQ0KLVsgIF0gUyAtIDU1MSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1NTMsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTU4LCAxDQotWyBdIFMgLSA1NTksIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA1NjAsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNTY0LCAxDQotWyAgXSBTIC0gNTY1LCAyDQotW31dIFJCUkFDRSAtIDU2NywgMQ0KLVsNCi1dIFMgLSA1NjgsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNTcwLCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDU3MSwgMQ0KLVtyZWxdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNTcyLCAzDQotW349XSBTRUxFQ1RPUl9BVFRSSUJVVEVfT1BFUkFUT1IgLSA1NzUsIDINCi1bImNvcHlyaWdodCJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDU3NywgMTENCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDU4OCwgMQ0KLVsgXSBTIC0gNTg5LCAxDQotW3tdIExCUkFDRSAtIDU5MCwgMQ0KLVsgIF0gUyAtIDU5MSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1OTMsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTk4LCAxDQotWyBdIFMgLSA1OTksIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA2MDAsIDQNCi1bICBdIFMgLSA2MDQsIDINCi1bfV0gUkJSQUNFIC0gNjA2LCAxDQotWw0KLV0gUyAtIDYwNywgMg0KLVthXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA2MDksIDENCi1bW10gU0VMRUNUT1JfQVRUUklCVVRFX1NUQVJUIC0gNjEwLCAxDQotW2hyZWZdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNjExLCA0DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDYxNSwgMQ0KLVsiaHR0cDovL3d3dy53My5vcmcvIl0gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNjE2LCAyMA0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNjM2LCAxDQotWyBdIFMgLSA2MzcsIDENCi1be10gTEJSQUNFIC0gNjM4LCAxDQotWyAgXSBTIC0gNjM5LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDY0MSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA2NDYsIDENCi1bIF0gUyAtIDY0NywgMQ0KLVtibHVlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDY0OCwgNA0KLVsgIF0gUyAtIDY1MiwgMg0KLVt9XSBSQlJBQ0UgLSA2NTQsIDENCi1bDQotXSBTIC0gNjU1LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDY1NywgMQ0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA2NTgsIDENCi1bbGFuZ10gU0VMRUNUT1JfQVRUUklCVVRFX05BTUUgLSA2NTksIDQNCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNjYzLCAxDQotW2ZyXSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA2NjQsIDINCi1bXV0gU0VMRUNUT1JfQVRUUklCVVRFX0VORCAtIDY2NiwgMQ0KLVsgXSBTIC0gNjY3LCAxDQotW3tdIExCUkFDRSAtIDY2OCwgMQ0KLVsgIF0gUyAtIDY2OSwgMg0KLVtkaXNwbGF5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDY3MSwgNw0KLVsgXSBTIC0gNjc4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDY3OSwgMQ0KLVsgXSBTIC0gNjgwLCAxDQotW25vbmVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNjgxLCA0DQotWyAgXSBTIC0gNjg1LCAyDQotW31dIFJCUkFDRSAtIDY4NywgMQ0KLVsNCi1dIFMgLSA2ODgsIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gNjkwLCAxDQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDY5MSwgMQ0KLVtsYW5nXSBTRUxFQ1RPUl9BVFRSSUJVVEVfTkFNRSAtIDY5MiwgNA0KLVt8PV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gNjk2LCAyDQotWyJlbiJdIFNFTEVDVE9SX0FUVFJJQlVURV9WQUxVRSAtIDY5OCwgNA0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gNzAyLCAxDQotWyBdIFMgLSA3MDMsIDENCi1be10gTEJSQUNFIC0gNzA0LCAxDQotWyAgXSBTIC0gNzA1LCAyDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDcwNywgNQ0KLVsgXSBTIC0gNzEyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDcxMywgMQ0KLVsgXSBTIC0gNzE0LCAxDQotW3JlZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA3MTUsIDMNCi1bICBdIFMgLSA3MTgsIDINCi1bfV0gUkJSQUNFIC0gNzIwLCAxDQotWw0KLV0gUyAtIDcyMSwgMg0KLVtESUFMT0dVRV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNzIzLCA4DQotW1tdIFNFTEVDVE9SX0FUVFJJQlVURV9TVEFSVCAtIDczMSwgMQ0KLVtjaGFyYWN0ZXJdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gNzMyLCA5DQotWz1dIFNFTEVDVE9SX0FUVFJJQlVURV9PUEVSQVRPUiAtIDc0MSwgMQ0KLVtyb21lb10gU0VMRUNUT1JfQVRUUklCVVRFX1ZBTFVFIC0gNzQyLCA1DQotW11dIFNFTEVDVE9SX0FUVFJJQlVURV9FTkQgLSA3NDcsIDENCi1bDQotXSBTIC0gNzQ4LCAyDQotW3tdIExCUkFDRSAtIDc1MCwgMQ0KLVsgIF0gUyAtIDc1MSwgMg0KLVt2b2ljZS1mYW1pbHldIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNzUzLCAxMg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA3NjUsIDENCi1bIF0gUyAtIDc2NiwgMQ0KLVsiTGF3cmVuY2UgT2xpdmllciJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDc2NywgMTgNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA3ODUsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDc4NiwgMQ0KLVtjaGFybGVzXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDc4NywgNw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDc5NCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNzk1LCAxDQotW21hbGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzk2LCA0DQotWyAgXSBTIC0gODAwLCAyDQotW31dIFJCUkFDRSAtIDgwMiwgMQ0KLVsNCi1dIFMgLSA4MDMsIDINCi1bRElBTE9HVUVdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDgwNSwgOA0KLVtbXSBTRUxFQ1RPUl9BVFRSSUJVVEVfU1RBUlQgLSA4MTMsIDENCi1bIF0gUyAtIDgxNCwgMQ0KLVtjaGFyYWN0ZXJdIFNFTEVDVE9SX0FUVFJJQlVURV9OQU1FIC0gODE1LCA5DQotWyBdIFMgLSA4MjQsIDENCi1bPV0gU0VMRUNUT1JfQVRUUklCVVRFX09QRVJBVE9SIC0gODI1LCAxDQotWyBdIFMgLSA4MjYsIDENCi1banVsaWV0XSBTRUxFQ1RPUl9BVFRSSUJVVEVfVkFMVUUgLSA4MjcsIDYNCi1bIF0gUyAtIDgzMywgMQ0KLVtdXSBTRUxFQ1RPUl9BVFRSSUJVVEVfRU5EIC0gODM0LCAxDQotWw0KLV0gUyAtIDgzNSwgMg0KLVt7XSBMQlJBQ0UgLSA4MzcsIDENCi1bICBdIFMgLSA4MzgsIDINCi1bdm9pY2UtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDg0MCwgMTINCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gODUyLCAxDQotWyBdIFMgLSA4NTMsIDENCi1bIlZpdmllbiBMZWlnaCJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDg1NCwgMTQNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA4NjgsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDg2OSwgMQ0KLVt2aWN0b3JpYV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA4NzAsIDgNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA4NzgsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDg3OSwgMQ0KLVtmZW1hbGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gODgwLCA2DQotWyAgXSBTIC0gODg2LCAyDQotW31dIFJCUkFDRSAtIDg4OCwgMQ0KLVsNCi1dIFMgLSA4ODksIDINCi1bKl0gU0VMRUNUT1JfVU5JVkVSU0FMIC0gODkxLCAxDQotWy5wYXN0b3JhbF0gU0VMRUNUT1JfQ0xBU1MgLSA4OTIsIDkNCi1bIF0gUyAtIDkwMSwgMQ0KLVt7XSBMQlJBQ0UgLSA5MDIsIDENCi1bICBdIFMgLSA5MDMsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTA1LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkxMCwgMQ0KLVsgXSBTIC0gOTExLCAxDQotW2dyZWVuXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDkxMiwgNQ0KLVsgIF0gUyAtIDkxNywgMg0KLVt9XSBSQlJBQ0UgLSA5MTksIDENCi1bDQotXSBTIC0gOTIwLCAyDQotWy5wYXN0b3JhbF0gU0VMRUNUT1JfQ0xBU1MgLSA5MjIsIDkNCi1bIF0gUyAtIDkzMSwgMQ0KLVt7XSBMQlJBQ0UgLSA5MzIsIDENCi1bICBdIFMgLSA5MzMsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTM1LCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDk0MCwgMQ0KLVsgXSBTIC0gOTQxLCAxDQotW2dyZWVuXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDk0MiwgNQ0KLVsgIF0gUyAtIDk0NywgMg0KLVt9XSBSQlJBQ0UgLSA5NDksIDENCi1bDQotXSBTIC0gOTUwLCAyDQotW0gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA5NTIsIDINCi1bLnBhc3RvcmFsXSBTRUxFQ1RPUl9DTEFTUyAtIDk1NCwgOQ0KLVsgXSBTIC0gOTYzLCAxDQotW3tdIExCUkFDRSAtIDk2NCwgMQ0KLVsgIF0gUyAtIDk2NSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA5NjcsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTcyLCAxDQotWyBdIFMgLSA5NzMsIDENCi1bZ3JlZW5dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gOTc0LCA1DQotWyAgXSBTIC0gOTc5LCAyDQotW31dIFJCUkFDRSAtIDk4MSwgMQ0KLVsNCi1dIFMgLSA5ODIsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gOTg0LCAxDQotWy5wYXN0b3JhbF0gU0VMRUNUT1JfQ0xBU1MgLSA5ODUsIDkNCi1bLm1hcmluZV0gU0VMRUNUT1JfQ0xBU1MgLSA5OTQsIDcNCi1bIF0gUyAtIDEwMDEsIDENCi1be10gTEJSQUNFIC0gMTAwMiwgMQ0KLVsgIF0gUyAtIDEwMDMsIDINCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTAwNSwgNQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMDEwLCAxDQotWyBdIFMgLSAxMDExLCAxDQotW2dyZWVuXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEwMTIsIDUNCi1bICBdIFMgLSAxMDE3LCAyDQotW31dIFJCUkFDRSAtIDEwMTksIDENCi1bDQotXSBTIC0gMTAyMCwgMg0KLVtoMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTAyMiwgMg0KLVsjY2hhcHRlcjFdIFNFTEVDVE9SX0lEIC0gMTAyNCwgOQ0KLVsgXSBTIC0gMTAzMywgMQ0KLVt7XSBMQlJBQ0UgLSAxMDM0LCAxDQotWyAgXSBTIC0gMTAzNSwgMg0KLVt0ZXh0LWFsaWduXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwMzcsIDEwDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwNDcsIDENCi1bIF0gUyAtIDEwNDgsIDENCi1bY2VudGVyXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDEwNDksIDYNCi1bICBdIFMgLSAxMDU1LCAyDQotW31dIFJCUkFDRSAtIDEwNTcsIDENCi1bDQotXSBTIC0gMTA1OCwgMg0KLVtkaXZdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEwNjAsIDMNCi1bIF0gUyAtIDEwNjMsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDEwNjQsIDENCi1bIF0gUyAtIDEwNjUsIDENCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTA2NiwgMQ0KLVs6Zmlyc3QtY2hpbGRdIFNFTEVDVE9SX1BTRVVETyAtIDEwNjcsIDEyDQotWyBdIFMgLSAxMDc5LCAxDQotW3tdIExCUkFDRSAtIDEwODAsIDENCi1bICBdIFMgLSAxMDgxLCAyDQotW3RleHQtaW5kZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwODMsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwOTQsIDENCi1bIF0gUyAtIDEwOTUsIDENCi1bMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTA5NiwgMQ0KLVsgIF0gUyAtIDEwOTcsIDINCi1bfV0gUkJSQUNFIC0gMTA5OSwgMQ0KLVsNCi1dIFMgLSAxMTAwLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDExMDIsIDENCi1bOmZpcnN0LWNoaWxkXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMTAzLCAxMg0KLVsgXSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTExNSwgMQ0KLVtlbV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTExNiwgMg0KLVsgXSBTIC0gMTExOCwgMQ0KLVt7XSBMQlJBQ0UgLSAxMTE5LCAxDQotWyAgXSBTIC0gMTEyMCwgMg0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMTIyLCAxMQ0KLVsgXSBTIC0gMTEzMywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMTM0LCAxDQotWyBdIFMgLSAxMTM1LCAxDQotW2JvbGRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTEzNiwgNA0KLVsgIF0gUyAtIDExNDAsIDINCi1bfV0gUkJSQUNFIC0gMTE0MiwgMQ0KLVsNCi1dIFMgLSAxMTQzLCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDExNDUsIDENCi1bIF0gUyAtIDExNDYsIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDExNDcsIDENCi1bIF0gUyAtIDExNDgsIDENCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTE0OSwgMQ0KLVs6Zmlyc3QtY2hpbGRdIFNFTEVDVE9SX1BTRVVETyAtIDExNTAsIDEyDQotWyBdIFMgLSAxMTYyLCAxDQotW3tdIExCUkFDRSAtIDExNjMsIDENCi1bICBdIFMgLSAxMTY0LCAyDQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDExNjYsIDExDQotWyBdIFMgLSAxMTc3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDExNzgsIDENCi1bIF0gUyAtIDExNzksIDENCi1bYm9sZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMTgwLCA0DQotWyAgXSBTIC0gMTE4NCwgMg0KLVt9XSBSQlJBQ0UgLSAxMTg2LCAxDQotWw0KLV0gUyAtIDExODcsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTE4OSwgMQ0KLVs6Zmlyc3QtY2hpbGRdIFNFTEVDVE9SX1BTRVVETyAtIDExOTAsIDEyDQotWyBdIFMgLSAxMjAyLCAxDQotW3tdIExCUkFDRSAtIDEyMDMsIDENCi1bICBdIFMgLSAxMjA0LCAyDQotW2ZvbnQtd2VpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyMDYsIDExDQotWyBdIFMgLSAxMjE3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyMTgsIDENCi1bIF0gUyAtIDEyMTksIDENCi1bYm9sZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMjIwLCA0DQotWyAgXSBTIC0gMTIyNCwgMg0KLVt9XSBSQlJBQ0UgLSAxMjI2LCAxDQotWw0KLV0gUyAtIDEyMjcsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTIyOSwgMQ0KLVsuZXh0ZXJuYWxdIFNFTEVDVE9SX0NMQVNTIC0gMTIzMCwgOQ0KLVs6dmlzaXRlZF0gU0VMRUNUT1JfUFNFVURPIC0gMTIzOSwgOA0KLVsgXSBTIC0gMTI0NywgMQ0KLVt7XSBMQlJBQ0UgLSAxMjQ4LCAxDQotWyAgXSBTIC0gMTI0OSwgMg0KLVtjb2xvcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxMjUxLCA1DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyNTYsIDENCi1bIF0gUyAtIDEyNTcsIDENCi1bYmx1ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMjU4LCA0DQotWyAgXSBTIC0gMTI2MiwgMg0KLVt9XSBSQlJBQ0UgLSAxMjY0LCAxDQotWw0KLV0gUyAtIDEyNjUsIDINCi1bYV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTI2NywgMQ0KLVs6Zm9jdXNdIFNFTEVDVE9SX1BTRVVETyAtIDEyNjgsIDYNCi1bOmhvdmVyXSBTRUxFQ1RPUl9QU0VVRE8gLSAxMjc0LCA2DQotWyBdIFMgLSAxMjgwLCAxDQotW3tdIExCUkFDRSAtIDEyODEsIDENCi1bICBdIFMgLSAxMjgyLCAyDQotW2JhY2tncm91bmRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTI4NCwgMTANCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTI5NCwgMQ0KLVsgXSBTIC0gMTI5NSwgMQ0KLVt3aGl0ZV0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMjk2LCA1DQotWyAgXSBTIC0gMTMwMSwgMg0KLVt9XSBSQlJBQ0UgLSAxMzAzLCAxDQotWw0KLV0gUyAtIDEzMDQsIDINCi1baHRtbF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTMwNiwgNA0KLVs6bGFuZyhmcildIFNFTEVDVE9SX1BTRVVETyAtIDEzMTAsIDkNCi1bIF0gUyAtIDEzMTksIDENCi1be10gTEJSQUNFIC0gMTMyMCwgMQ0KLVsgIF0gUyAtIDEzMjEsIDINCi1bcXVvdGVzXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzMjMsIDYNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTMyOSwgMQ0KLVsgXSBTIC0gMTMzMCwgMQ0KLVsnPDwnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzMxLCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzM1LCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzMzYsIDQNCi1bICBdIFMgLSAxMzQwLCAyDQotW31dIFJCUkFDRSAtIDEzNDIsIDENCi1bDQotXSBTIC0gMTM0MywgMg0KLVtodG1sXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzQ1LCA0DQotWzpsYW5nKGRlKV0gU0VMRUNUT1JfUFNFVURPIC0gMTM0OSwgOQ0KLVsgXSBTIC0gMTM1OCwgMQ0KLVt7XSBMQlJBQ0UgLSAxMzU5LCAxDQotWyAgXSBTIC0gMTM2MCwgMg0KLVtxdW90ZXNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTM2MiwgNg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMzY4LCAxDQotWyBdIFMgLSAxMzY5LCAxDQotWyc+PiddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzNzAsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEzNzQsIDENCi1bJzw8J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTM3NSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTM3OSwgMQ0KLVsnXDIwMzknXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMzgwLCA3DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMzg3LCAxDQotWydcMjAzQSddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEzODgsIDcNCi1bICBdIFMgLSAxMzk1LCAyDQotW31dIFJCUkFDRSAtIDEzOTcsIDENCi1bDQotXSBTIC0gMTM5OCwgMg0KLVs6bGFuZyhmcildIFNFTEVDVE9SX1BTRVVETyAtIDE0MDAsIDkNCi1bIF0gUyAtIDE0MDksIDENCi1bPl0gU0VMRUNUT1JfQ09NQklOQVRPUiAtIDE0MTAsIDENCi1bIF0gUyAtIDE0MTEsIDENCi1bUV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTQxMiwgMQ0KLVsgXSBTIC0gMTQxMywgMQ0KLVt7XSBMQlJBQ0UgLSAxNDE0LCAxDQotWyAgXSBTIC0gMTQxNSwgMg0KLVtxdW90ZXNdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQxNywgNg0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNDIzLCAxDQotWyBdIFMgLSAxNDI0LCAxDQotWyc8PCddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0MjUsIDQNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE0MjksIDENCi1bJz4+J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQzMCwgNA0KLVsgIF0gUyAtIDE0MzQsIDINCi1bfV0gUkJSQUNFIC0gMTQzNiwgMQ0KLVsNCi1dIFMgLSAxNDM3LCAyDQotWzpsYW5nKGRlKV0gU0VMRUNUT1JfUFNFVURPIC0gMTQzOSwgOQ0KLVsgXSBTIC0gMTQ0OCwgMQ0KLVs+XSBTRUxFQ1RPUl9DT01CSU5BVE9SIC0gMTQ0OSwgMQ0KLVsgXSBTIC0gMTQ1MCwgMQ0KLVtRXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNDUxLCAxDQotWyBdIFMgLSAxNDUyLCAxDQotW3tdIExCUkFDRSAtIDE0NTMsIDENCi1bICBdIFMgLSAxNDU0LCAyDQotW3F1b3Rlc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNDU2LCA2DQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0NjIsIDENCi1bIF0gUyAtIDE0NjMsIDENCi1bJz4+J10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQ2NCwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTQ2OCwgMQ0KLVsnPDwnXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNDY5LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNDczLCAxDQotWydcMjAzOSddIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDE0NzQsIDcNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE0ODEsIDENCi1bJ1wyMDNBJ10gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTQ4MiwgNw0KLVsgIF0gUyAtIDE0ODksIDINCi1bfV0gUkJSQUNFIC0gMTQ5MSwgMQ0KLVsNCi1dIFMgLSAxNDkyLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE0OTQsIDENCi1bOmZpcnN0LWxldHRlcl0gU0VMRUNUT1JfUFNFVURPIC0gMTQ5NSwgMTMNCi1bIF0gUyAtIDE1MDgsIDENCi1be10gTEJSQUNFIC0gMTUwOSwgMQ0KLVsgIF0gUyAtIDE1MTAsIDINCi1bZm9udC1zaXplXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE1MTIsIDkNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTUyMSwgMQ0KLVsgXSBTIC0gMTUyMiwgMQ0KLVszZW1dIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE1MjMsIDMNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTUyNiwgMQ0KLVsgXSBTIC0gMTUyNywgMQ0KLVtmb250LXdlaWdodF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTI4LCAxMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNTM5LCAxDQotWyBdIFMgLSAxNTQwLCAxDQotW25vcm1hbF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNTQxLCA2DQotWyAgXSBTIC0gMTU0NywgMg0KLVt9XSBSQlJBQ0UgLSAxNTQ5LCAxDQotWw0KLV0gUyAtIDE1NTAsIDINCi1bcF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTU1MiwgMQ0KLVsuc3BlY2lhbF0gU0VMRUNUT1JfQ0xBU1MgLSAxNTUzLCA4DQotWzpiZWZvcmVdIFNFTEVDVE9SX1BTRVVETyAtIDE1NjEsIDcNCi1bIF0gUyAtIDE1NjgsIDENCi1be10gTEJSQUNFIC0gMTU2OSwgMQ0KLVsgXSBTIC0gMTU3MCwgMQ0KLVtjb250ZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE1NzEsIDcNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTU3OCwgMQ0KLVsgXSBTIC0gMTU3OSwgMQ0KLVsiU3BlY2lhbCEgIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTU4MCwgMTENCi1bIF0gUyAtIDE1OTEsIDENCi1bfV0gUkJSQUNFIC0gMTU5MiwgMQ0KLVsNCi1dIFMgLSAxNTkzLCAyDQotW3BdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE1OTUsIDENCi1bLnNwZWNpYWxdIFNFTEVDVE9SX0NMQVNTIC0gMTU5NiwgOA0KLVs6Zmlyc3QtbGV0dGVyXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNjA0LCAxMw0KLVsgXSBTIC0gMTYxNywgMQ0KLVt7XSBMQlJBQ0UgLSAxNjE4LCAxDQotWyBdIFMgLSAxNjE5LCAxDQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2MjAsIDUNCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTYyNSwgMQ0KLVsgXSBTIC0gMTYyNiwgMQ0KLVsjZmZkODAwXSBERUNMQVJBVElPTl9WQUxVRV9IQVNIIC0gMTYyNywgNw0KLVsgXSBTIC0gMTYzNCwgMQ0KLVt9XSBSQlJBQ0UgLSAxNjM1LCAxDQotWw0KLV0gUyAtIDE2MzYsIDINCi1bQk9EWV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTYzOCwgNA0KLVsgXSBTIC0gMTY0MiwgMQ0KLVt7XSBMQlJBQ0UgLSAxNjQzLCAxDQotWyBdIFMgLSAxNjQ0LCAxDQotW2ZvbnQtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2NDUsIDExDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE2NTYsIDENCi1bIF0gUyAtIDE2NTcsIDENCi1bQmFza2VydmlsbGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTY1OCwgMTENCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjY5LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNjcwLCAxDQotWyJIZWlzaSBNaW5jaG8gVzMiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxNjcxLCAxNw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE2ODgsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2ODksIDENCi1bU3ltYm9sXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2OTAsIDYNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjk2LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNjk3LCAxDQotW3NlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE2OTgsIDUNCi1bIF0gUyAtIDE3MDMsIDENCi1bfV0gUkJSQUNFIC0gMTcwNCwgMQ0KLVsNCi1dIFMgLSAxNzA1LCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDE3MDcsIDENCi1bOmxhbmcoamEtanApXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNzA4LCAxMg0KLVsgXSBTIC0gMTcyMCwgMQ0KLVt7XSBMQlJBQ0UgLSAxNzIxLCAxDQotWyBdIFMgLSAxNzIyLCAxDQotW2ZvbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTcyMywgNA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzI3LCAxDQotWyBdIFMgLSAxNzI4LCAxDQotWzkwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTcyOSwgMw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTczMiwgMQ0KLVsxNHB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNzMzLCA0DQotWy9dIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTczNywgMQ0KLVsxNnB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNzM4LCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzQyLCAxDQotWyJIZWlzZWkgTWluY2hvIFc5Il0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gMTc0MywgMTgNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNzYxLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzYyLCAxDQotW3NlcmlmXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE3NjMsIDUNCi1bIF0gUyAtIDE3NjgsIDENCi1bfV0gUkJSQUNFIC0gMTc2OSwgMQ0KLVsNCi1dIFMgLSAxNzcwLCAyDQotWypdIFNFTEVDVE9SX1VOSVZFUlNBTCAtIDE3NzIsIDENCi1bOmxhbmcoemgtdHcpXSBTRUxFQ1RPUl9QU0VVRE8gLSAxNzczLCAxMg0KLVsgXSBTIC0gMTc4NSwgMQ0KLVt7XSBMQlJBQ0UgLSAxNzg2LCAxDQotWyBdIFMgLSAxNzg3LCAxDQotW2ZvbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTc4OCwgNA0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzkyLCAxDQotWyBdIFMgLSAxNzkzLCAxDQotWzgwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTc5NCwgMw0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTc5NywgMQ0KLVsxNHB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNzk4LCA0DQotWy9dIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTgwMiwgMQ0KLVsxNi41cHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE4MDMsIDYNCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE4MDksIDENCi1bIkxpIFN1bmciXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxODEwLCA5DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTgxOSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTgyMCwgMQ0KLVtzZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxODIxLCA1DQotWyBdIFMgLSAxODI2LCAxDQotW31dIFJCUkFDRSAtIDE4MjcsIDENCi1bDQotXSBTIC0gMTgyOCwgMg0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyMjE3YzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDYuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLVtkZWNsYXJhdGlvbl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMCwgMTENCi1bIF0gUyAtIDExLCAxDQotW3tdIExCUkFDRSAtIDEyLCAxDQotWw0KLQldIFMgLSAxMywgMw0KLVtkaW1lbnNpb25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTYsIDkNCi1bIF0gUyAtIDI1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDI2LCAxDQotWyBdIFMgLSAyNywgMQ0KLVsxMDBleF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMjgsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMzMsIDENCi1bDQotCV0gUyAtIDM0LCAzDQotW2Z1bmN0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDM3LCA4DQotWyBdIFMgLSA0NSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NiwgMQ0KLVsgXSBTIC0gNDcsIDENCi1bcmVjdChdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gNDgsIDUNCi1bMTAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSA1MywgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDU2LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA1NywgMQ0KLVsyMDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDU4LCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNjEsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDYyLCAxDQotWzMwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gNjMsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA2NiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNjcsIDENCi1bNDAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSA2OCwgMw0KLVspXSBERUNMQVJBVElPTl9WQUxVRV9QQVJFTlRIRVNJU19DTE9TRSAtIDcxLCAxDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gNzIsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDczLCAxDQotW2Zvcm1hdChdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gNzQsIDcNCi1bImludGVsbGlmb250Il0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gODEsIDEzDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gOTQsIDENCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSA5NSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gOTYsIDENCi1bbG9jYWwoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDk3LCA2DQotWyJFeGNlbHNpb3IgQ3lyaWxsbGljIFVwcmlnaHQiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAxMDMsIDI5DQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gMTMyLCAxDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEzMywgMQ0KLVsNCi0JXSBTIC0gMTM0LCAzDQotW2hhc2hdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTM3LCA0DQotWyBdIFMgLSAxNDEsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQyLCAxDQotWyBdIFMgLSAxNDMsIDENCi1bI2FhYmJjY10gREVDTEFSQVRJT05fVkFMVUVfSEFTSCAtIDE0NCwgNw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNTEsIDENCi1bDQotCV0gUyAtIDE1MiwgMw0KLVtpZGVudF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTUsIDUNCi1bIF0gUyAtIDE2MCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjEsIDENCi1bIF0gUyAtIDE2MiwgMQ0KLVthbnldIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTYzLCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE2NiwgMQ0KLVsNCi0JXSBTIC0gMTY3LCAzDQotW251bWJlcl0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNzAsIDYNCi1bIF0gUyAtIDE3NiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzcsIDENCi1bIF0gUyAtIDE3OCwgMQ0KLVs5OTk5OV0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTc5LCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE4NCwgMQ0KLVsNCi0JXSBTIC0gMTg1LCAzDQotW3BlcmNlbnRhZ2VdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTg4LCAxMA0KLVsgXSBTIC0gMTk4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE5OSwgMQ0KLVsgXSBTIC0gMjAwLCAxDQotWzEwMCVdIERFQ0xBUkFUSU9OX1ZBTFVFX1BFUkNFTlRBR0UgLSAyMDEsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjA1LCAxDQotWw0KLQldIFMgLSAyMDYsIDMNCi1bc3RyaW5nXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDIwOSwgNg0KLVsgXSBTIC0gMjE1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDIxNiwgMQ0KLVsgXSBTIC0gMjE3LCAxDQotWyJzdHJpbmciXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSAyMTgsIDgNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMjI2LCAxDQotWw0KLQldIFMgLSAyMjcsIDMNCi1bdW5pY29kZS1yYW5nZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAyMzAsIDEzDQotWyBdIFMgLSAyNDMsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMjQ0LCAxDQotWyBdIFMgLSAyNDUsIDENCi1bVSs/P10gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRSAtIDI0NiwgNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDI1MCwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMjUxLCAxDQotW1UrMTAwLTIyMF0gREVDTEFSQVRJT05fVkFMVUVfVU5JQ09ERV9SQU5HRSAtIDI1MiwgOQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDI2MSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMjYyLCAxDQotW1UrND8/XSBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFIC0gMjYzLCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDI2OCwgMQ0KLVsNCi1dIFMgLSAyNjksIDINCi1bfV0gUkJSQUNFIC0gMjcxLCAxDQotWw0KLV0gUyAtIDI3MiwgMg0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvcmVzdWx0cy9DU1NUZXh0UGFyc2VyVGVzdC1zYW1wbGUwNy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZWQ1YjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3Jlc3VsdHMvQ1NTVGV4dFBhcnNlclRlc3Qtc2FtcGxlMDcuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTgzICswLDAgQEAKLVtAY2hhcnNldF0gQ0hBUlNFVCAtIDAsIDgNCi1bIF0gUyAtIDgsIDENCi1bIklTTy04ODU5LTEiXSBTVFJJTkcgLSA5LCAxMg0KLVs7XSBERUxJTUlURVIgLSAyMSwgMQ0KLVsNCi0NCi1dIFMgLSAyMiwgNA0KLVtAaW1wb3J0XSBJTVBPUlQgLSAyNiwgNw0KLVsgXSBTIC0gMzMsIDENCi1bdXJsKCIuLi9zYW1wbGUyLmNzcyIpXSBVUkkgLSAzNCwgMjENCi1bIF0gUyAtIDU1LCAxDQotW3Byb2plY3Rpb25dIE1FRElVTSAtIDU2LCAxMA0KLVssXSBNRURJQV9TRVBBUkFUT1IgLSA2NiwgMQ0KLVsgXSBTIC0gNjcsIDENCi1bdHZdIE1FRElVTSAtIDY4LCAyDQotWztdIERFTElNSVRFUiAtIDcwLCAxDQotWw0KLQ0KLV0gUyAtIDcxLCA0DQotW0JPRFldIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDc1LCA0DQotWyBdIFMgLSA3OSwgMQ0KLVt7XSBMQlJBQ0UgLSA4MCwgMQ0KLVsNCi0gICAgXSBTIC0gODEsIDYNCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gODcsIDUNCi1bIF0gUyAtIDkyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkzLCAxDQotWyBdIFMgLSA5NCwgMQ0KLVtibGFja10gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA5NSwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMDAsIDENCi1bDQotICAgIF0gUyAtIDEwMSwgNg0KLVt0ZXh0LWFsaWduXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwNywgMTANCi1bIF0gUyAtIDExNywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMTgsIDENCi1bIF0gUyAtIDExOSwgMQ0KLVtjZW50ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTIwLCA2DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEyNiwgMQ0KLVsNCi0gICAgXSBTIC0gMTI3LCA2DQotW2JhY2tncm91bmQtY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTMzLCAxNg0KLVsgXSBTIC0gMTQ5LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1MCwgMQ0KLVsgXSBTIC0gMTUxLCAxDQotW3JnYihdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gMTUyLCA0DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNTYsIDENCi1bMTgxXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxNTcsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxNjAsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDE2MSwgMQ0KLVsyNTNdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE2MiwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDE2NSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTY2LCAxDQotWzIxMV0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTY3LCAzDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxNzAsIDENCi1bKV0gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0UgLSAxNzEsIDENCi1bDQotXSBTIC0gMTcyLCAyDQotW31dIFJCUkFDRSAtIDE3NCwgMQ0KLVsNCi0NCi1dIFMgLSAxNzUsIDQNCi1bVUxdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDE3OSwgMg0KLVsgXSBTIC0gMTgxLCAxDQotW3tdIExCUkFDRSAtIDE4MiwgMQ0KLVsNCi0gICAgXSBTIC0gMTgzLCA2DQotW2NvbG9yXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE4OSwgNQ0KLVsgXSBTIC0gMTk0LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE5NSwgMQ0KLVsgXSBTIC0gMTk2LCAxDQotW2JsYWNrXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDE5NywgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAyMDIsIDENCi1bDQotICAgIF0gUyAtIDIwMywgNg0KLVtsaXN0LXN0eWxlLWltYWdlXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDIwOSwgMTYNCi1bIF0gUyAtIDIyNSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyMjYsIDENCi1bIF0gUyAtIDIyNywgMQ0KLVt1cmwoImltYWdlcy9sX2EwMS5naWYiKV0gREVDTEFSQVRJT05fVkFMVUVfVVJJIC0gMjI4LCAyMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAyNTEsIDENCi1bDQotICAgIF0gUyAtIDI1MiwgNg0KLVtsaXN0LXN0eWxlLXBvc2l0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDI1OCwgMTkNCi1bIF0gUyAtIDI3NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAyNzgsIDENCi1bIF0gUyAtIDI3OSwgMQ0KLVtvdXRzaWRlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDI4MCwgNw0KLVsNCi1dIFMgLSAyODcsIDINCi1bfV0gUkJSQUNFIC0gMjg5LCAxDQotWw0KLQ0KLV0gUyAtIDI5MCwgNA0KLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMjk0LCAyDQotWyBdIFMgLSAyOTYsIDENCi1be10gTEJSQUNFIC0gMjk3LCAxDQotWw0KLSAgICBdIFMgLSAyOTgsIDYNCi1bY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzA0LCA1DQotWyBdIFMgLSAzMDksIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMzEwLCAxDQotWyBdIFMgLSAzMTEsIDENCi1bd2hpdGVdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMzEyLCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDMxNywgMQ0KLVsNCi0gICAgXSBTIC0gMzE4LCA2DQotW3RleHQtYWxpZ25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzI0LCAxMA0KLVsgXSBTIC0gMzM0LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDMzNSwgMQ0KLVsgXSBTIC0gMzM2LCAxDQotW2NlbnRlcl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAzMzcsIDYNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMzQzLCAxDQotWw0KLSAgICBdIFMgLSAzNDQsIDYNCi1bYm9yZGVyLWxlZnQtY29sb3JdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzUwLCAxNw0KLVsgXSBTIC0gMzY3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDM2OCwgMQ0KLVsgXSBTIC0gMzY5LCAxDQotWyM5OTY2NjZdIERFQ0xBUkFUSU9OX1ZBTFVFX0hBU0ggLSAzNzAsIDcNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMzc3LCAxDQotWw0KLSAgICBdIFMgLSAzNzgsIDYNCi1bcGFkZGluZy10b3BdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMzg0LCAxMQ0KLVsgXSBTIC0gMzk1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDM5NiwgMQ0KLVsgXSBTIC0gMzk3LCAxDQotWzBweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMzk4LCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDQwMSwgMQ0KLVsNCi0gICAgXSBTIC0gNDAyLCA2DQotW3BhZGRpbmctcmlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDA4LCAxMw0KLVsgXSBTIC0gNDIxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQyMiwgMQ0KLVsgXSBTIC0gNDIzLCAxDQotWzFjbV0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNDI0LCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDQyNywgMQ0KLVsNCi0gICAgXSBTIC0gNDI4LCA2DQotW3BhZGRpbmctYm90dG9tXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQzNCwgMTQNCi1bIF0gUyAtIDQ0OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NDksIDENCi1bIF0gUyAtIDQ1MCwgMQ0KLVsyXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSA0NTEsIDENCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNDUyLCAxDQotWw0KLSAgICBdIFMgLSA0NTMsIDYNCi1bcGFkZGluZy1sZWZ0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDQ1OSwgMTINCi1bIF0gUyAtIDQ3MSwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA0NzIsIDENCi1bIF0gUyAtIDQ3MywgMQ0KLVszZW1dIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDQ3NCwgMw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA0NzcsIDENCi1bDQotICAgIF0gUyAtIDQ3OCwgNg0KLVtib3JkZXItc3R5bGVdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNDg0LCAxMg0KLVsgXSBTIC0gNDk2LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDQ5NywgMQ0KLVsgXSBTIC0gNDk4LCAxDQotW3NvbGlkXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDQ5OSwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA1MDQsIDENCi1bDQotICAgIF0gUyAtIDUwNSwgNg0KLVtib3JkZXItdG9wLXdpZHRoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDUxMSwgMTYNCi1bIF0gUyAtIDUyNywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSA1MjgsIDENCi1bIF0gUyAtIDUyOSwgMQ0KLVs0LjVleF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gNTMwLCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDUzNSwgMQ0KLVsNCi0gICAgXSBTIC0gNTM2LCA2DQotW2JvcmRlci1yaWdodC13aWR0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1NDIsIDE4DQotWyBdIFMgLSA1NjAsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTYxLCAxDQotWyBdIFMgLSA1NjIsIDENCi1bNWluXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA1NjMsIDMNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNTY2LCAxDQotWw0KLSAgICBdIFMgLSA1NjcsIDYNCi1bYm9yZGVyLWJvdHRvbS13aWR0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA1NzMsIDE5DQotWyBdIFMgLSA1OTIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNTkzLCAxDQotWyBdIFMgLSA1OTQsIDENCi1bNi4wMm1tXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA1OTUsIDYNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNjAxLCAxDQotWw0KLSAgICBdIFMgLSA2MDIsIDYNCi1bYm9yZGVyLWxlZnQtd2lkdGhdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNjA4LCAxNw0KLVsgXSBTIC0gNjI1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDYyNiwgMQ0KLVsgXSBTIC0gNjI3LCAxDQotWzddIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDYyOCwgMQ0KLVsNCi1dIFMgLSA2MjksIDINCi1bfV0gUkJSQUNFIC0gNjMxLCAxDQotWw0KLQ0KLV0gUyAtIDYzMiwgNA0KLVtIMV0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNjM2LCAyDQotWzpiZWZvcmVdIFNFTEVDVE9SX1BTRVVETyAtIDYzOCwgNw0KLVsgXSBTIC0gNjQ1LCAxDQotW3tdIExCUkFDRSAtIDY0NiwgMQ0KLVsNCi0gICAgXSBTIC0gNjQ3LCA2DQotW2NvbnRlbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNjUzLCA3DQotWyBdIFMgLSA2NjAsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gNjYxLCAxDQotWyBdIFMgLSA2NjIsIDENCi1bIkNoYXB0ZXIgIl0gREVDTEFSQVRJT05fVkFMVUVfU1RSSU5HIC0gNjYzLCAxMA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNjczLCAxDQotW2NvdW50ZXIoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDY3NCwgOA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gNjgyLCAxDQotW2NoYXB0ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNjgzLCA3DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA2OTAsIDENCi1bKV0gREVDTEFSQVRJT05fVkFMVUVfUEFSRU5USEVTSVNfQ0xPU0UgLSA2OTEsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDY5MiwgMQ0KLVsiLiAiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA2OTMsIDQNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gNjk3LCAxDQotWw0KLSAgICBdIFMgLSA2OTgsIDYNCi1bY291bnRlci1pbmNyZW1lbnRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNzA0LCAxNw0KLVsgXSBTIC0gNzIxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDcyMiwgMQ0KLVsgXSBTIC0gNzIzLCAxDQotW2NoYXB0ZXJdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzI0LCA3DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDczMSwgMQ0KLVsNCi0gICAgXSBTIC0gNzMyLCA2DQotW2NvdW50ZXItcmVzZXRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gNzM4LCAxMw0KLVsgXSBTIC0gNzUxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDc1MiwgMQ0KLVsgXSBTIC0gNzUzLCAxDQotW3NlY3Rpb25dIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzU0LCA3DQotWw0KLV0gUyAtIDc2MSwgMg0KLVt9XSBSQlJBQ0UgLSA3NjMsIDENCi1bDQotDQotXSBTIC0gNzY0LCA0DQotW0lNR10gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gNzY4LCAzDQotWzpiZWZvcmVdIFNFTEVDVE9SX1BTRVVETyAtIDc3MSwgNw0KLVsgXSBTIC0gNzc4LCAxDQotW3tdIExCUkFDRSAtIDc3OSwgMQ0KLVtjb250ZW50XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDc4MCwgNw0KLVsgXSBTIC0gNzg3LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDc4OCwgMQ0KLVsgXSBTIC0gNzg5LCAxDQotW2F0dHIoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDc5MCwgNQ0KLVthbHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gNzk1LCAzDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gNzk4LCAxDQotW31dIFJCUkFDRSAtIDc5OSwgMQ0KLVsNCi0NCi1dIFMgLSA4MDAsIDQNCi1bRElWXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSA4MDQsIDMNCi1bLnNhbXBsZV0gU0VMRUNUT1JfQ0xBU1MgLSA4MDcsIDcNCi1bIF0gUyAtIDgxNCwgMQ0KLVt7XSBMQlJBQ0UgLSA4MTUsIDENCi1bDQotICAgIF0gUyAtIDgxNiwgNg0KLVtmb250LWZhbWlseV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSA4MjIsIDExDQotWyBdIFMgLSA4MzMsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gODM0LCAxDQotWyBdIFMgLSA4MzUsIDENCi1bIlJvYnNvbiBDZWx0aWMiXSBERUNMQVJBVElPTl9WQUxVRV9TVFJJTkcgLSA4MzYsIDE1DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gODUxLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA4NTIsIDENCi1bc2Fucy1zZXJpZl0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSA4NTMsIDEwDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDg2MywgMQ0KLVsNCi0gICAgXSBTIC0gODY0LCA2DQotW3Bvc2l0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDg3MCwgOA0KLVsgXSBTIC0gODc4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDg3OSwgMQ0KLVsgXSBTIC0gODgwLCAxDQotW2Fic29sdXRlXSBERUNMQVJBVElPTl9WQUxVRV9JREVOVCAtIDg4MSwgOA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA4ODksIDENCi1bDQotICAgIF0gUyAtIDg5MCwgNg0KLVtsZWZ0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDg5NiwgNA0KLVsgXSBTIC0gOTAwLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkwMSwgMQ0KLVsgXSBTIC0gOTAyLCAxDQotWzgzMy41cGNdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDkwMywgNw0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSA5MTAsIDENCi1bDQotICAgIF0gUyAtIDkxMSwgNg0KLVt0b3BdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTE3LCAzDQotWyBdIFMgLSA5MjAsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTIxLCAxDQotWyBdIFMgLSA5MjIsIDENCi1bOTAlXSBERUNMQVJBVElPTl9WQUxVRV9QRVJDRU5UQUdFIC0gOTIzLCAzDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDkyNiwgMQ0KLVsNCi0gICAgXSBTIC0gOTI3LCA2DQotW3dpZHRoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDkzMywgNQ0KLVsgXSBTIC0gOTM4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDkzOSwgMQ0KLVsgXSBTIC0gOTQwLCAxDQotWzEwMHB0XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSA5NDEsIDUNCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gOTQ2LCAxDQotWw0KLSAgICBdIFMgLSA5NDcsIDYNCi1baGVpZ2h0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDk1MywgNg0KLVsgXSBTIC0gOTU5LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDk2MCwgMQ0KLVsgXSBTIC0gOTYxLCAxDQotWzExMC43NzdweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gOTYyLCA5DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDk3MSwgMQ0KLVsNCi0gICAgXSBTIC0gOTcyLCA2DQotW2NsaXBdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gOTc4LCA0DQotWyBdIFMgLSA5ODIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gOTgzLCAxDQotWyBdIFMgLSA5ODQsIDENCi1bcmVjdChdIERFQ0xBUkFUSU9OX1ZBTFVFX0ZVTkNUSU9OIC0gOTg1LCA1DQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA5OTAsIDENCi1bLTVweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gOTkxLCA0DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gOTk1LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSA5OTYsIDENCi1bODBweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gOTk3LCA0DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTAwMSwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTAwMiwgMQ0KLVsxMzBweF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTAwMywgNQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEwMDgsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEwMDksIDENCi1bMHB4XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxMDEwLCAzDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMDEzLCAxDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gMTAxNCwgMQ0KLVsNCi1dIFMgLSAxMDE1LCAyDQotW31dIFJCUkFDRSAtIDEwMTcsIDENCi1bDQotDQotXSBTIC0gMTAxOCwgNA0KLVtAZm9udC1mYWNlXSBGT05UX0ZBQ0UgLSAxMDIyLCAxMA0KLVsgXSBTIC0gMTAzMiwgMQ0KLVt7XSBMQlJBQ0UgLSAxMDMzLCAxDQotWw0KLSAgICBdIFMgLSAxMDM0LCA2DQotW2ZvbnQtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwNDAsIDExDQotWyBdIFMgLSAxMDUxLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEwNTIsIDENCi1bIF0gUyAtIDEwNTMsIDENCi1bIlN3aXNzIDcyMSJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDEwNTQsIDExDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEwNjUsIDENCi1bDQotICAgIF0gUyAtIDEwNjYsIDYNCi1bc3JjXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEwNzIsIDMNCi1bIF0gUyAtIDEwNzUsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTA3NiwgMQ0KLVsgXSBTIC0gMTA3NywgMQ0KLVt1cmwoInN3aXNzNzIxdC5wZnIiKV0gREVDTEFSQVRJT05fVkFMVUVfVVJJIC0gMTA3OCwgMjANCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEwOTgsIDENCi1bZm9ybWF0KF0gREVDTEFSQVRJT05fVkFMVUVfRlVOQ1RJT04gLSAxMDk5LCA3DQotWyJpbnRlbGxpZm9udCJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDExMDYsIDEzDQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gMTExOSwgMQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDExMjAsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDExMjEsIDENCi1bbG9jYWwoXSBERUNMQVJBVElPTl9WQUxVRV9GVU5DVElPTiAtIDExMjIsIDYNCi1bIkV4Y2Vsc2lvciBDeXJpbGxsaWMgVXByaWdodCJdIERFQ0xBUkFUSU9OX1ZBTFVFX1NUUklORyAtIDExMjgsIDI5DQotWyldIERFQ0xBUkFUSU9OX1ZBTFVFX1BBUkVOVEhFU0lTX0NMT1NFIC0gMTE1NywgMQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxMTU4LCAxDQotWw0KLSAgICBdIFMgLSAxMTU5LCA2DQotW3VuaWNvZGUtcmFuZ2VdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTE2NSwgMTMNCi1bIF0gUyAtIDExNzgsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTE3OSwgMQ0KLVsgXSBTIC0gMTE4MCwgMQ0KLVtVKz8/XSBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFIC0gMTE4MSwgNA0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDExODUsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDExODYsIDENCi1bVSsxMDAtMjIwXSBERUNMQVJBVElPTl9WQUxVRV9VTklDT0RFX1JBTkdFIC0gMTE4NywgOQ0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDExOTYsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDExOTcsIDENCi1bVSs0Pz9dIERFQ0xBUkFUSU9OX1ZBTFVFX1VOSUNPREVfUkFOR0UgLSAxMTk4LCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEyMDMsIDENCi1bDQotICAgIF0gUyAtIDEyMDQsIDYNCi1bZm9udC13ZWlnaHRdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTIxMCwgMTENCi1bIF0gUyAtIDEyMjEsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTIyMiwgMQ0KLVsgXSBTIC0gMTIyMywgMQ0KLVsxMDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEyMjQsIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMjI3LCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMjI4LCAxDQotWzIwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTIyOSwgMw0KLVssXSBERUNMQVJBVElPTl9WQUxVRV9PUEVSQVRPUiAtIDEyMzIsIDENCi1bIF0gREVDTEFSQVRJT05fVkFMVUVfUyAtIDEyMzMsIDENCi1bMzAwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMjM0LCAzDQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTIzNywgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTIzOCwgMQ0KLVs0MDBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDEyMzksIDMNCi1bLF0gREVDTEFSQVRJT05fVkFMVUVfT1BFUkFUT1IgLSAxMjQyLCAxDQotWyBdIERFQ0xBUkFUSU9OX1ZBTFVFX1MgLSAxMjQzLCAxDQotWzUwMF0gREVDTEFSQVRJT05fVkFMVUVfTlVNQkVSIC0gMTI0NCwgMw0KLVsNCi1dIFMgLSAxMjQ3LCAyDQotW31dIFJCUkFDRSAtIDEyNDksIDENCi1bDQotDQotXSBTIC0gMTI1MCwgNA0KLVtAcGFnZV0gUEFHRSAtIDEyNTQsIDUNCi1bIF0gUyAtIDEyNTksIDENCi1bOmxlZnRdIENTU19QQUdFX1NFTEVDVE9SIC0gMTI2MCwgNQ0KLVsgXSBTIC0gMTI2NSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMjY2LCAxDQotW21hcmdpbi1sZWZ0XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEyNjcsIDExDQotWyBdIFMgLSAxMjc4LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEyNzksIDENCi1bIF0gUyAtIDEyODAsIDENCi1bNGNtXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxMjgxLCAzDQotW31dIFJCUkFDRSAtIDEyODQsIDENCi1bDQotDQotXSBTIC0gMTI4NSwgNA0KLVtAbWVkaWFdIE1FRElBIC0gMTI4OSwgNg0KLVsgXSBTIC0gMTI5NSwgMQ0KLVthdXJhbF0gTUVESVVNIC0gMTI5NiwgNQ0KLVsgXSBTIC0gMTMwMSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMzAyLCAxDQotWw0KLSAgICBdIFMgLSAxMzAzLCA2DQotW0gxXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzA5LCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDEzMTEsIDENCi1bIF0gUyAtIDEzMTIsIDENCi1bSDJdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMTMsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMTMxNSwgMQ0KLVsgXSBTIC0gMTMxNiwgMQ0KLVtIM10gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTMxNywgMg0KLVssXSBTRUxFQ1RPUl9TRVBBUkFUT1IgLSAxMzE5LCAxDQotWyBdIFMgLSAxMzIwLCAxDQotW0g0XSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxMzIxLCAyDQotWyxdIFNFTEVDVE9SX1NFUEFSQVRPUiAtIDEzMjMsIDENCi1bIF0gUyAtIDEzMjQsIDENCi1bSDVdIFNFTEVDVE9SX0VMRU1FTlRfTkFNRSAtIDEzMjUsIDINCi1bLF0gU0VMRUNUT1JfU0VQQVJBVE9SIC0gMTMyNywgMQ0KLVsgXSBTIC0gMTMyOCwgMQ0KLVtINl0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTMyOSwgMg0KLVsgXSBTIC0gMTMzMSwgMQ0KLVt7XSBMQlJBQ0UgLSAxMzMyLCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTMzMywgMTANCi1bdm9pY2UtZmFtaWx5XSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDEzNDMsIDEyDQotWyBdIFMgLSAxMzU1LCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDEzNTYsIDENCi1bIF0gUyAtIDEzNTcsIDENCi1bcGF1bF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMzU4LCA0DQotWyxdIERFQ0xBUkFUSU9OX1ZBTFVFX09QRVJBVE9SIC0gMTM2MiwgMQ0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTM2MywgMQ0KLVtjaGlsZF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxMzY0LCA1DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEzNjksIDENCi1bDQotICAgICAgICBdIFMgLSAxMzcwLCAxMA0KLVtzdHJlc3NdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTM4MCwgNg0KLVsgXSBTIC0gMTM4NiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxMzg3LCAxDQotWyBdIFMgLSAxMzg4LCAxDQotWzIwXSBERUNMQVJBVElPTl9WQUxVRV9OVU1CRVIgLSAxMzg5LCAyDQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDEzOTEsIDENCi1bDQotICAgICAgICBdIFMgLSAxMzkyLCAxMA0KLVtyaWNobmVzc10gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNDAyLCA4DQotWyBdIFMgLSAxNDEwLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE0MTEsIDENCi1bIF0gUyAtIDE0MTIsIDENCi1bOTBdIERFQ0xBUkFUSU9OX1ZBTFVFX05VTUJFUiAtIDE0MTMsIDINCi1bO10gREVDTEFSQVRJT05fREVMSU1JVEVSIC0gMTQxNSwgMQ0KLVsNCi0gICAgICAgIF0gUyAtIDE0MTYsIDEwDQotW2N1ZS1iZWZvcmVdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTQyNiwgMTANCi1bIF0gUyAtIDE0MzYsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQzNywgMQ0KLVsgXSBTIC0gMTQzOCwgMQ0KLVt1cmwoInBpbmcuYXUiKV0gREVDTEFSQVRJT05fVkFMVUVfVVJJIC0gMTQzOSwgMTQNCi1bDQotICAgIF0gUyAtIDE0NTMsIDYNCi1bfV0gUkJSQUNFIC0gMTQ1OSwgMQ0KLVsNCi0gICAgXSBTIC0gMTQ2MCwgNg0KLVtQXSBTRUxFQ1RPUl9FTEVNRU5UX05BTUUgLSAxNDY2LCAxDQotWy5oZWlkaV0gU0VMRUNUT1JfQ0xBU1MgLSAxNDY3LCA2DQotWyBdIFMgLSAxNDczLCAxDQotW3tdIExCUkFDRSAtIDE0NzQsIDENCi1bDQotICAgICAgICBdIFMgLSAxNDc1LCAxMA0KLVthemltdXRoXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE0ODUsIDcNCi1bIF0gUyAtIDE0OTIsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTQ5MywgMQ0KLVsgXSBTIC0gMTQ5NCwgMQ0KLVtjZW50ZXItbGVmdF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNDk1LCAxMQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNTA2LCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTUwNywgMTANCi1bZWxldmF0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE1MTcsIDkNCi1bIF0gUyAtIDE1MjYsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTUyNywgMQ0KLVsgXSBTIC0gMTUyOCwgMQ0KLVsxMi4zZGVnXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNTI5LCA3DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE1MzYsIDENCi1bDQotICAgICAgICBdIFMgLSAxNTM3LCAxMA0KLVtwYXVzZV0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTQ3LCA1DQotWyBdIFMgLSAxNTUyLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE1NTMsIDENCi1bIF0gUyAtIDE1NTQsIDENCi1bMzBtc10gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTU1NSwgNA0KLVsgXSBERUNMQVJBVElPTl9WQUxVRV9TIC0gMTU1OSwgMQ0KLVsxLjZzXSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNTYwLCA0DQotWw0KLSAgICBdIFMgLSAxNTY0LCA2DQotW31dIFJCUkFDRSAtIDE1NzAsIDENCi1bDQotICAgIF0gUyAtIDE1NzEsIDYNCi1bUF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTU3NywgMQ0KLVsucGV0ZXJdIFNFTEVDVE9SX0NMQVNTIC0gMTU3OCwgNg0KLVsgXSBTIC0gMTU4NCwgMQ0KLVt7XSBMQlJBQ0UgLSAxNTg1LCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTU4NiwgMTANCi1bYXppbXV0aF0gREVDTEFSQVRJT05fUFJPUEVSVFkgLSAxNTk2LCA3DQotWyBdIFMgLSAxNjAzLCAxDQotWzpdIERFQ0xBUkFUSU9OX1NFUEFSQVRPUiAtIDE2MDQsIDENCi1bIF0gUyAtIDE2MDUsIDENCi1bcmlnaHRdIERFQ0xBUkFUSU9OX1ZBTFVFX0lERU5UIC0gMTYwNiwgNQ0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNjExLCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTYxMiwgMTANCi1bZWxldmF0aW9uXSBERUNMQVJBVElPTl9QUk9QRVJUWSAtIDE2MjIsIDkNCi1bIF0gUyAtIDE2MzEsIDENCi1bOl0gREVDTEFSQVRJT05fU0VQQVJBVE9SIC0gMTYzMiwgMQ0KLVsgXSBTIC0gMTYzMywgMQ0KLVstMC4zNnJhZF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTYzNCwgOA0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNjQyLCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTY0MywgMTANCi1bcGl0Y2hdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTY1MywgNQ0KLVsgXSBTIC0gMTY1OCwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNjU5LCAxDQotWyBdIFMgLSAxNjYwLCAxDQotWzIxMEh6XSBERUNMQVJBVElPTl9WQUxVRV9ESU1FTlNJT04gLSAxNjYxLCA1DQotWw0KLSAgICBdIFMgLSAxNjY2LCA2DQotW31dIFJCUkFDRSAtIDE2NzIsIDENCi1bDQotICAgIF0gUyAtIDE2NzMsIDYNCi1bUF0gU0VMRUNUT1JfRUxFTUVOVF9OQU1FIC0gMTY3OSwgMQ0KLVsuZ29hdF0gU0VMRUNUT1JfQ0xBU1MgLSAxNjgwLCA1DQotWyBdIFMgLSAxNjg1LCAxDQotW3tdIExCUkFDRSAtIDE2ODYsIDENCi1bDQotICAgICAgICBdIFMgLSAxNjg3LCAxMA0KLVt2b2x1bWVdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTY5NywgNg0KLVsgXSBTIC0gMTcwMywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzA0LCAxDQotWyBdIFMgLSAxNzA1LCAxDQotW3gtc29mdF0gREVDTEFSQVRJT05fVkFMVUVfSURFTlQgLSAxNzA2LCA2DQotWztdIERFQ0xBUkFUSU9OX0RFTElNSVRFUiAtIDE3MTIsIDENCi1bDQotICAgICAgICBdIFMgLSAxNzEzLCAxMA0KLVtlbGV2YXRpb25dIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTcyMywgOQ0KLVsgXSBTIC0gMTczMiwgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzMzLCAxDQotWyBdIFMgLSAxNzM0LCAxDQotWzY2Z3JhZF0gREVDTEFSQVRJT05fVkFMVUVfRElNRU5TSU9OIC0gMTczNSwgNg0KLVs7XSBERUNMQVJBVElPTl9ERUxJTUlURVIgLSAxNzQxLCAxDQotWw0KLSAgICAgICAgXSBTIC0gMTc0MiwgMTANCi1bcGl0Y2hdIERFQ0xBUkFUSU9OX1BST1BFUlRZIC0gMTc1MiwgNQ0KLVsgXSBTIC0gMTc1NywgMQ0KLVs6XSBERUNMQVJBVElPTl9TRVBBUkFUT1IgLSAxNzU4LCAxDQotWyBdIFMgLSAxNzU5LCAxDQotWzAuMTdrSHpdIERFQ0xBUkFUSU9OX1ZBTFVFX0RJTUVOU0lPTiAtIDE3NjAsIDcNCi1bDQotICAgIF0gUyAtIDE3NjcsIDYNCi1bfV0gUkJSQUNFIC0gMTc3MywgMQ0KLVsNCi1dIFMgLSAxNzc0LCAyDQotW31dIFJCUkFDRSAtIDE3NzYsIDENCi1bDQotDQotXSBTIC0gMTc3NywgNA0KLQ0KLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDEuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAxLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2M4OTgyNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDEuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1IMSB7DQotDQotCWNvbG9yOiB3aGl0ZQ0KLQk7DQotDQotCWJhY2tncm91bmQtY29sb3IgOiBibGFjaw0KLQkNCi19DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAyLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwMi5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNGM0ZGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLUBpbXBvcnQgdXJsKCJob2dlLmNzcyIpOw0KLUBpbXBvcnQgLyogY29tbWVudCAqLyB1cmwoaG9nZS5jc3MpOw0KLUBpbXBvcnQgImhvZ2UuY3NzIiAvKiBjb21tZW50ICovOw0KLUBJTVBPUlQgJ2hvZ2UuY3NzJyAsbWVkaWExLG1lZGlhMiwsbWVkaWEzIG1lZGlhNCxtZWRpYTUgQGltcG9ydCBtZWRpYTY7DQotDQotPCEtLSAvKiBob2dlaG9nZSAqLw0KLQ0KLS0tPg0KLQ0KLS8qIGNvbW1lbnQgMiAqLw0KLWt1c28NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTAzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU3Y2NjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotQGltcG9ydCB1cmwoIi4uL3NhbXBsZTIuY3NzIik7DQotDQotLyogU2FtcGxlIFN0eWxlcyAqLw0KLQ0KLUJPRFkgew0KLQljb2xvciA6IGJsYWNrOw0KLQliYWNrZ3JvdW5kLWNvbG9yIDogcmdiKDE4MSwgMjUzLCAyMTEpOw0KLQl0ZXh0LWFsaWduIDogY2VudGVyOw0KLQlmb250LWZhbWlseSA6ICJIZWlzZWkgTWluY2hvIFczIiwgc2VyaWYNCi19DQotDQotQHBhZ2UgOmxlZnQgeyBtYXJnaW4tbGVmdCA6IDRjbSB9DQotDQotQG1lZGlhIGF1cmFsIHsNCi0JUC5oZWlkaSB7DQotCQlhemltdXRoIDogY2VudGVyLWxlZnQ7DQotCQllbGV2YXRpb24gOiAxMi4zZGVnOw0KLQkJcGF1c2UgOiAzMG1zIDEuNnMNCi0JfQ0KLX0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA0LmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJkZTRmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTEiOw0KLQ0KLUBpbXBvcnQgdXJsKCJob2dlLmNzcyIpOw0KLUBpbXBvcnQgLyogY29tbWVudCAqLyB1cmwoaG9nZS5jc3MpOw0KLUBpbXBvcnQgImhvZ2UuY3NzIiAvKiBjb21tZW50ICovOw0KLUBJTVBPUlQgJ2hvZ2UuY3NzJyBtZWRpYTEsbWVkaWEyICwgbWVkaWEzOw0KLQ0KLUBtZWRpYSBwcmludCB7DQotDQotfQ0KLQ0KLUBwYWdlIDpsZWZ0IHsNCi0NCi19DQotDQotaDEsIGgyLCBoMyB7ICBmb250LWZhbWlseTogc2Fucy1zZXJpZiAgfQ0KLWgxIGVtIHsgIGNvbG9yOiBibHVlICB9DQotZGl2IHAgKltocmVmXSB7ICBjb2xvcjogYmx1ZSAgfQ0KLWJvZHkgPiBQIHsgIGxpbmUtaGVpZ2h0OiAxLjMgIH0NCi1kaXYgb2w+bGkgcCB7IH0NCi1tYXRoICsgcCB7ICB0ZXh0LWluZGVudDogMCAgfQ0KLWgxLm9wZW5lciArIGgyIHsgIG1hcmdpbi10b3A6IC01bW0gIH0NCi1oMVt0aXRsZV0geyAgY29sb3I6IGJsdWU7ICB9DQotc3BhbltjbGFzcz1leGFtcGxlXSB7ICBjb2xvcjogYmx1ZTsgIH0NCi1zcGFuW2hlbGxvPSJDbGV2ZWxhbmQiXVtnb29kYnllPSJDb2x1bWJ1cyJdIHsgIGNvbG9yOiBibHVlOyAgfQ0KLWFbcmVsfj0iY29weXJpZ2h0Il0geyAgY29sb3I6IGJsdWUgIH0NCi1hW2hyZWY9Imh0dHA6Ly93d3cudzMub3JnLyJdIHsgIGNvbG9yOiBibHVlICB9DQotKltsYW5nPWZyXSB7ICBkaXNwbGF5IDogbm9uZSAgfQ0KLSpbbGFuZ3w9ImVuIl0geyAgY29sb3IgOiByZWQgIH0NCi1ESUFMT0dVRVtjaGFyYWN0ZXI9cm9tZW9dDQoteyAgdm9pY2UtZmFtaWx5OiAiTGF3cmVuY2UgT2xpdmllciIsIGNoYXJsZXMsIG1hbGUgIH0NCi1ESUFMT0dVRVsgY2hhcmFjdGVyID0ganVsaWV0IF0NCi17ICB2b2ljZS1mYW1pbHk6ICJWaXZpZW4gTGVpZ2giLCB2aWN0b3JpYSwgZmVtYWxlICB9DQotKi5wYXN0b3JhbCB7ICBjb2xvcjogZ3JlZW4gIH0NCi0ucGFzdG9yYWwgeyAgY29sb3I6IGdyZWVuICB9DQotSDEucGFzdG9yYWwgeyAgY29sb3I6IGdyZWVuICB9DQotcC5wYXN0b3JhbC5tYXJpbmUgeyAgY29sb3I6IGdyZWVuICB9DQotaDEjY2hhcHRlcjEgeyAgdGV4dC1hbGlnbjogY2VudGVyICB9DQotZGl2ID4gcDpmaXJzdC1jaGlsZCB7ICB0ZXh0LWluZGVudDogMCAgfQ0KLXA6Zmlyc3QtY2hpbGQgZW0geyAgZm9udC13ZWlnaHQgOiBib2xkICB9DQotKiA+IGE6Zmlyc3QtY2hpbGQgeyAgZm9udC13ZWlnaHQgOiBib2xkICB9DQotYTpmaXJzdC1jaGlsZCB7ICBmb250LXdlaWdodCA6IGJvbGQgIH0NCi1hLmV4dGVybmFsOnZpc2l0ZWQgeyAgY29sb3I6IGJsdWUgIH0NCi1hOmZvY3VzOmhvdmVyIHsgIGJhY2tncm91bmQ6IHdoaXRlICB9DQotaHRtbDpsYW5nKGZyKSB7ICBxdW90ZXM6ICc8PCcgJz4+JyAgfQ0KLWh0bWw6bGFuZyhkZSkgeyAgcXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnICB9DQotOmxhbmcoZnIpID4gUSB7ICBxdW90ZXM6ICc8PCcgJz4+JyAgfQ0KLTpsYW5nKGRlKSA+IFEgeyAgcXVvdGVzOiAnPj4nICc8PCcgJ1wyMDM5JyAnXDIwM0EnICB9DQotcDpmaXJzdC1sZXR0ZXIgeyAgZm9udC1zaXplOiAzZW07IGZvbnQtd2VpZ2h0OiBub3JtYWwgIH0NCi1wLnNwZWNpYWw6YmVmb3JlIHsgY29udGVudDogIlNwZWNpYWwhICIgfQ0KLXAuc3BlY2lhbDpmaXJzdC1sZXR0ZXIgeyBjb2xvcjogI2ZmZDgwMCB9DQotQk9EWSB7IGZvbnQtZmFtaWx5OiBCYXNrZXJ2aWxsZSwgIkhlaXNpIE1pbmNobyBXMyIsIFN5bWJvbCwgc2VyaWYgfQ0KLSo6bGFuZyhqYS1qcCkgeyBmb250OiA5MDAgMTRwdC8xNnB0ICJIZWlzZWkgTWluY2hvIFc5Iiwgc2VyaWYgfQ0KLSo6bGFuZyh6aC10dykgeyBmb250OiA4MDAgMTRwdC8xNi41cHQgIkxpIFN1bmciLCBzZXJpZiB9DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA1LmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyZGU0ZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdGVzdGZpbGVzL3NhbXBsZTA1LmNzcworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tODg1OS0xIjsNCi0NCi1AaW1wb3J0IHVybCgiaG9nZS5jc3MiKTsNCi1AaW1wb3J0IC8qIGNvbW1lbnQgKi8gdXJsKGhvZ2UuY3NzKTsNCi1AaW1wb3J0ICJob2dlLmNzcyIgLyogY29tbWVudCAqLzsNCi1ASU1QT1JUICdob2dlLmNzcycgbWVkaWExLG1lZGlhMiAsIG1lZGlhMzsNCi0NCi1AbWVkaWEgcHJpbnQgew0KLQ0KLX0NCi0NCi1AcGFnZSA6bGVmdCB7DQotDQotfQ0KLQ0KLWgxLCBoMiwgaDMgeyAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWYgIH0NCi1oMSBlbSB7ICBjb2xvcjogYmx1ZSAgfQ0KLWRpdiBwICpbaHJlZl0geyAgY29sb3I6IGJsdWUgIH0NCi1ib2R5ID4gUCB7ICBsaW5lLWhlaWdodDogMS4zICB9DQotZGl2IG9sPmxpIHAgeyB9DQotbWF0aCArIHAgeyAgdGV4dC1pbmRlbnQ6IDAgIH0NCi1oMS5vcGVuZXIgKyBoMiB7ICBtYXJnaW4tdG9wOiAtNW1tICB9DQotaDFbdGl0bGVdIHsgIGNvbG9yOiBibHVlOyAgfQ0KLXNwYW5bY2xhc3M9ZXhhbXBsZV0geyAgY29sb3I6IGJsdWU7ICB9DQotc3BhbltoZWxsbz0iQ2xldmVsYW5kIl1bZ29vZGJ5ZT0iQ29sdW1idXMiXSB7ICBjb2xvcjogYmx1ZTsgIH0NCi1hW3JlbH49ImNvcHlyaWdodCJdIHsgIGNvbG9yOiBibHVlICB9DQotYVtocmVmPSJodHRwOi8vd3d3LnczLm9yZy8iXSB7ICBjb2xvcjogYmx1ZSAgfQ0KLSpbbGFuZz1mcl0geyAgZGlzcGxheSA6IG5vbmUgIH0NCi0qW2xhbmd8PSJlbiJdIHsgIGNvbG9yIDogcmVkICB9DQotRElBTE9HVUVbY2hhcmFjdGVyPXJvbWVvXQ0KLXsgIHZvaWNlLWZhbWlseTogIkxhd3JlbmNlIE9saXZpZXIiLCBjaGFybGVzLCBtYWxlICB9DQotRElBTE9HVUVbIGNoYXJhY3RlciA9IGp1bGlldCBdDQoteyAgdm9pY2UtZmFtaWx5OiAiVml2aWVuIExlaWdoIiwgdmljdG9yaWEsIGZlbWFsZSAgfQ0KLSoucGFzdG9yYWwgeyAgY29sb3I6IGdyZWVuICB9DQotLnBhc3RvcmFsIHsgIGNvbG9yOiBncmVlbiAgfQ0KLUgxLnBhc3RvcmFsIHsgIGNvbG9yOiBncmVlbiAgfQ0KLXAucGFzdG9yYWwubWFyaW5lIHsgIGNvbG9yOiBncmVlbiAgfQ0KLWgxI2NoYXB0ZXIxIHsgIHRleHQtYWxpZ246IGNlbnRlciAgfQ0KLWRpdiA+IHA6Zmlyc3QtY2hpbGQgeyAgdGV4dC1pbmRlbnQ6IDAgIH0NCi1wOmZpcnN0LWNoaWxkIGVtIHsgIGZvbnQtd2VpZ2h0IDogYm9sZCAgfQ0KLSogPiBhOmZpcnN0LWNoaWxkIHsgIGZvbnQtd2VpZ2h0IDogYm9sZCAgfQ0KLWE6Zmlyc3QtY2hpbGQgeyAgZm9udC13ZWlnaHQgOiBib2xkICB9DQotYS5leHRlcm5hbDp2aXNpdGVkIHsgIGNvbG9yOiBibHVlICB9DQotYTpmb2N1czpob3ZlciB7ICBiYWNrZ3JvdW5kOiB3aGl0ZSAgfQ0KLWh0bWw6bGFuZyhmcikgeyAgcXVvdGVzOiAnPDwnICc+PicgIH0NCi1odG1sOmxhbmcoZGUpIHsgIHF1b3RlczogJz4+JyAnPDwnICdcMjAzOScgJ1wyMDNBJyAgfQ0KLTpsYW5nKGZyKSA+IFEgeyAgcXVvdGVzOiAnPDwnICc+PicgIH0NCi06bGFuZyhkZSkgPiBRIHsgIHF1b3RlczogJz4+JyAnPDwnICdcMjAzOScgJ1wyMDNBJyAgfQ0KLXA6Zmlyc3QtbGV0dGVyIHsgIGZvbnQtc2l6ZTogM2VtOyBmb250LXdlaWdodDogbm9ybWFsICB9DQotcC5zcGVjaWFsOmJlZm9yZSB7IGNvbnRlbnQ6ICJTcGVjaWFsISAiIH0NCi1wLnNwZWNpYWw6Zmlyc3QtbGV0dGVyIHsgY29sb3I6ICNmZmQ4MDAgfQ0KLUJPRFkgeyBmb250LWZhbWlseTogQmFza2VydmlsbGUsICJIZWlzaSBNaW5jaG8gVzMiLCBTeW1ib2wsIHNlcmlmIH0NCi0qOmxhbmcoamEtanApIHsgZm9udDogOTAwIDE0cHQvMTZwdCAiSGVpc2VpIE1pbmNobyBXOSIsIHNlcmlmIH0NCi0qOmxhbmcoemgtdHcpIHsgZm9udDogODAwIDE0cHQvMTYuNXB0ICJMaSBTdW5nIiwgc2VyaWYgfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDYuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTczY2VhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNi5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1kZWNsYXJhdGlvbiB7DQotCWRpbWVuc2lvbiA6IDEwMGV4Ow0KLQlmdW5jdGlvbiA6IHJlY3QoMTAwLCAyMDAsIDMwMCwgNDAwKSwgZm9ybWF0KCJpbnRlbGxpZm9udCIpLCBsb2NhbCgiRXhjZWxzaW9yIEN5cmlsbGxpYyBVcHJpZ2h0Iik7DQotCWhhc2ggOiAjYWFiYmNjOw0KLQlpZGVudCA6IGFueTsNCi0JbnVtYmVyIDogOTk5OTk7DQotCXBlcmNlbnRhZ2UgOiAxMDAlOw0KLQlzdHJpbmcgOiAic3RyaW5nIjsNCi0JdW5pY29kZS1yYW5nZSA6IFUrPz8sIFUrMTAwLTIyMCwgVSs0Pz87DQotfQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy90ZXN0ZmlsZXMvc2FtcGxlMDcuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDM0NzI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3Rlc3RmaWxlcy9zYW1wbGUwNy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktMSI7DQotDQotQGltcG9ydCB1cmwoIi4uL3NhbXBsZTIuY3NzIikgcHJvamVjdGlvbiwgdHY7DQotDQotQk9EWSB7DQotICAgIGNvbG9yIDogYmxhY2s7DQotICAgIHRleHQtYWxpZ24gOiBjZW50ZXI7DQotICAgIGJhY2tncm91bmQtY29sb3IgOiByZ2IoIDE4MSwgMjUzLCAyMTEgKQ0KLX0NCi0NCi1VTCB7DQotICAgIGNvbG9yIDogYmxhY2s7DQotICAgIGxpc3Qtc3R5bGUtaW1hZ2UgOiB1cmwoImltYWdlcy9sX2EwMS5naWYiKTsNCi0gICAgbGlzdC1zdHlsZS1wb3NpdGlvbiA6IG91dHNpZGUNCi19DQotDQotSDEgew0KLSAgICBjb2xvciA6IHdoaXRlOw0KLSAgICB0ZXh0LWFsaWduIDogY2VudGVyOw0KLSAgICBib3JkZXItbGVmdC1jb2xvciA6ICM5OTY2NjY7DQotICAgIHBhZGRpbmctdG9wIDogMHB4Ow0KLSAgICBwYWRkaW5nLXJpZ2h0IDogMWNtOw0KLSAgICBwYWRkaW5nLWJvdHRvbSA6IDI7DQotICAgIHBhZGRpbmctbGVmdCA6IDNlbTsNCi0gICAgYm9yZGVyLXN0eWxlIDogc29saWQ7DQotICAgIGJvcmRlci10b3Atd2lkdGggOiA0LjVleDsNCi0gICAgYm9yZGVyLXJpZ2h0LXdpZHRoIDogNWluOw0KLSAgICBib3JkZXItYm90dG9tLXdpZHRoIDogNi4wMm1tOw0KLSAgICBib3JkZXItbGVmdC13aWR0aCA6IDcNCi19DQotDQotSDE6YmVmb3JlIHsNCi0gICAgY29udGVudCA6ICJDaGFwdGVyICIgY291bnRlciggY2hhcHRlciApICIuICI7DQotICAgIGNvdW50ZXItaW5jcmVtZW50IDogY2hhcHRlcjsNCi0gICAgY291bnRlci1yZXNldCA6IHNlY3Rpb24NCi19DQotDQotSU1HOmJlZm9yZSB7Y29udGVudCA6IGF0dHIoYWx0KX0NCi0NCi1ESVYuc2FtcGxlIHsNCi0gICAgZm9udC1mYW1pbHkgOiAiUm9ic29uIENlbHRpYyIsIHNhbnMtc2VyaWY7DQotICAgIHBvc2l0aW9uIDogYWJzb2x1dGU7DQotICAgIGxlZnQgOiA4MzMuNXBjOw0KLSAgICB0b3AgOiA5MCU7DQotICAgIHdpZHRoIDogMTAwcHQ7DQotICAgIGhlaWdodCA6IDExMC43NzdweDsNCi0gICAgY2xpcCA6IHJlY3QoIC01cHgsIDgwcHgsIDEzMHB4LCAwcHggKQ0KLX0NCi0NCi1AZm9udC1mYWNlIHsNCi0gICAgZm9udC1mYW1pbHkgOiAiU3dpc3MgNzIxIjsNCi0gICAgc3JjIDogdXJsKCJzd2lzczcyMXQucGZyIikgZm9ybWF0KCJpbnRlbGxpZm9udCIpLCBsb2NhbCgiRXhjZWxzaW9yIEN5cmlsbGxpYyBVcHJpZ2h0Iik7DQotICAgIHVuaWNvZGUtcmFuZ2UgOiBVKz8/LCBVKzEwMC0yMjAsIFUrND8/Ow0KLSAgICBmb250LXdlaWdodCA6IDEwMCwgMjAwLCAzMDAsIDQwMCwgNTAwDQotfQ0KLQ0KLUBwYWdlIDpsZWZ0IHttYXJnaW4tbGVmdCA6IDRjbX0NCi0NCi1AbWVkaWEgYXVyYWwgew0KLSAgICBIMSwgSDIsIEgzLCBINCwgSDUsIEg2IHsNCi0gICAgICAgIHZvaWNlLWZhbWlseSA6IHBhdWwsIGNoaWxkOw0KLSAgICAgICAgc3RyZXNzIDogMjA7DQotICAgICAgICByaWNobmVzcyA6IDkwOw0KLSAgICAgICAgY3VlLWJlZm9yZSA6IHVybCgicGluZy5hdSIpDQotICAgIH0NCi0gICAgUC5oZWlkaSB7DQotICAgICAgICBhemltdXRoIDogY2VudGVyLWxlZnQ7DQotICAgICAgICBlbGV2YXRpb24gOiAxMi4zZGVnOw0KLSAgICAgICAgcGF1c2UgOiAzMG1zIDEuNnMNCi0gICAgfQ0KLSAgICBQLnBldGVyIHsNCi0gICAgICAgIGF6aW11dGggOiByaWdodDsNCi0gICAgICAgIGVsZXZhdGlvbiA6IC0wLjM2cmFkOw0KLSAgICAgICAgcGl0Y2ggOiAyMTBIeg0KLSAgICB9DQotICAgIFAuZ29hdCB7DQotICAgICAgICB2b2x1bWUgOiB4LXNvZnQ7DQotICAgICAgICBlbGV2YXRpb24gOiA2NmdyYWQ7DQotICAgICAgICBwaXRjaCA6IDAuMTdrSHoNCi0gICAgfQ0KLX0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL0ZpbGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2OGUwODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSUNTU01vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlVXRpbCB7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgY29tbW9uRU9MID0gIlxyXG4iOwotCi0JcHVibGljIHN0YXRpYyBGaWxlIGNyZWF0ZUZpbGUoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMiKTsgLy8kTk9OLU5MUy0xJAotCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7IC8vJE5PTi1OTFMtMSQKLQkJVVJMIGxvY2FsVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCVN0cmluZyBpbnN0YWxsUGF0aCA9IGxvY2FsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOyAvLyROT04tTkxTLTEkCi0JCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCB0b3RhbFBhdGgpOwotCQlTdHJpbmcgZmluYWxGaWxlID0gdG90YWxVUkwuZ2V0RmlsZSgpOwotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLQkvLyBwdWJsaWMgc3RhdGljIFJlYWRlciBjcmVhdGVSZWFkZXIoRmlsZSBmaWxlKSB0aHJvd3MKLQkvLyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCS8vIHJldHVybiBuZXcgRmlsZVJlYWRlcihmaWxlKTsKLQkvLyB9Ci0JLy8JCi0JLy8gcHVibGljIHN0YXRpYyBSZWFkZXIgY3JlYXRlUmVhZGVyKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSkKLQkvLyB0aHJvd3MgSU9FeGNlcHRpb24gewotCS8vIEZpbGUgZmlsZSA9IGNyZWF0ZUZpbGUoZGlyZWN0b3J5LCBmaWxlbmFtZSk7Ci0JLy8gcmV0dXJuIGNyZWF0ZVJlYWRlcihmaWxlKTsKLQkvLyB9Ci0KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBjcmVhdGVTdHJpbmcoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCVJlYWRlciBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoY3JlYXRlRmlsZShkaXJlY3RvcnksIGZpbGVuYW1lKSk7Ci0JCUJ1ZmZlcmVkUmVhZGVyIHJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihmaWxlUmVhZGVyKTsKLQkJU3RyaW5nIGxpbmU7Ci0JCXdoaWxlICgobGluZSA9IHJlYWRlci5yZWFkTGluZSgpKSAhPSBudWxsKSB7Ci0JCQlidWYuYXBwZW5kKGxpbmUpOwotCQkJYnVmLmFwcGVuZChjb21tb25FT0wpOwotCQl9Ci0JCXJldHVybiBidWYudG9TdHJpbmcoKTsKLQkJLy8gcmV0dXJuIG5ldyBEYXRhSW5wdXRTdHJlYW0obmV3Ci0JCS8vIEZpbGVJbnB1dFN0cmVhbShjcmVhdGVGaWxlKGRpcmVjdG9yeSwgZmlsZW5hbWUpKSkucmVhZFVURigpOwotCX0KLQotCXN0YXRpYyBpbnQgdW5pcXVlTnVtID0gMDsKLQotCXB1YmxpYyBzdGF0aWMgSUNTU01vZGVsIGNyZWF0ZU1vZGVsKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoInRlc3QiICsgdW5pcXVlTnVtKysgKyAiLmNzcyIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQotCQkJLy8gYWx3YXlzIHVzZSB0aGUgc2FtZSBsaW5lIGRlbGltaXRlciBmb3IgdGhlc2UgdGVzdHMsIHJlZ2FyZGxlc3MKLQkJCS8vIG9mIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihjb21tb25FT0wpOwotCi0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIChJQ1NTTW9kZWwpIG1vZGVsOwotCi0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGR1bXBTdHJpbmcoU3RyaW5nIHN0cmluZywgU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGZpbGUgPSBjcmVhdGVGaWxlKGRpcmVjdG9yeSwgZmlsZW5hbWUpOwotCQlXcml0ZXIgd3JpdGVyID0gbmV3IEZpbGVXcml0ZXIoZmlsZSk7Ci0JCXdyaXRlci53cml0ZShzdHJpbmcpOwotCQl3cml0ZXIuY2xvc2UoKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL051bGxJbnB1dFN0cmVhbS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL2NvcmUvdGVzdHMvdXRpbC9OdWxsSW5wdXRTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ5YjJmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL051bGxJbnB1dFN0cmVhbS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotCi1wdWJsaWMgY2xhc3MgTnVsbElucHV0U3RyZWFtIGV4dGVuZHMgSW5wdXRTdHJlYW0gewotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI21hcmsoaW50KQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCBtYXJrKGludCByZWFkbGltaXQpIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNtYXJrU3VwcG9ydGVkKCkKLQkgKi8KLQlwdWJsaWMgYm9vbGVhbiBtYXJrU3VwcG9ydGVkKCkgewotCQkvLyB3ZSBjYW4gbWFyayBub3RoaW5nLgotCQkvLyBhbmQsIHdlIGFyZSB1c2luZyB0aGlzIE51bGwgY2xhc3Mgc3BlY2lmaWNhbGx5IGZvcgotCQkvLyBhICJmYWtlIiByZXNldHRhYmxlIHN0cmVhbS4KLQkJcmV0dXJuIHRydWU7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBqYXZhLmlvLklucHV0U3RyZWFtI3JlYWQoKQotCSAqLwotCXB1YmxpYyBpbnQgcmVhZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZXNldCgpCi0JICovCi0JcHVibGljIHN5bmNocm9uaXplZCB2b2lkIHJlc2V0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJLy8gbm90aGluZyB0byBkbwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNza2lwKGxvbmcpCi0JICovCi0JcHVibGljIGxvbmcgc2tpcChsb25nIG4pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiAwOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3V0aWwvU3RyaW5nQ29tcGFyZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy9jb3JlL3Rlc3RzL3V0aWwvU3RyaW5nQ29tcGFyZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDRiMzcyMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvY29yZS90ZXN0cy91dGlsL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA3IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ1JlYWRlcjsKLQotcHVibGljIGNsYXNzIFN0cmluZ0NvbXBhcmVVdGlsIHsKLQotCXB1YmxpYyBib29sZWFuIGVxdWFsc0lnbm9yZUxpbmVTZXBlcmF0b3IoU3RyaW5nIHN0cmluZzEsIFN0cmluZyBzdHJpbmcyKSB7Ci0KLQkJaWYgKHN0cmluZzEgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQkJaWYgKHN0cmluZzIgPT0gbnVsbCkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmdSZWFkZXIgczFSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKHN0cmluZzEpOwotCQlTdHJpbmdSZWFkZXIgczJSZWFkZXIgPSBuZXcgU3RyaW5nUmVhZGVyKHN0cmluZzIpOwotCi0JCS8vIGFzc3VtZSB0cnVlIHVubGVzcyBmaW5kIGV2aWRlbmNlIHRvIHRoZSBjb250cmFyeQotCQlib29sZWFuIHJlc3VsdCA9IHRydWU7Ci0JCWludCBzMUNoYXIgPSAtMTsKLQkJaW50IHMyQ2hhciA9IC0xOwotCQlkbyB7Ci0KLQkJCXMxQ2hhciA9IGdldE5leHRDaGFyKHMxUmVhZGVyKTsKLQotCQkJczJDaGFyID0gZ2V0TmV4dENoYXIoczJSZWFkZXIpOwotCi0JCQlpZiAoczFDaGFyICE9IHMyQ2hhcikgewotCQkJCXJlc3VsdCA9IGZhbHNlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCXdoaWxlIChzMUNoYXIgIT0gLTEgJiYgczJDaGFyICE9IC0xKTsKLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIE1ldGhvZCBnZXROZXh0Q2hhci4KLQkgKiBAcGFyYW0gczFSZWFkZXIKLQkgKiBAcmV0dXJuIGNoYXIKLQkgKi8KLQlwcml2YXRlIGludCBnZXROZXh0Q2hhcihTdHJpbmdSZWFkZXIgcmVhZGVyKSB7Ci0JCWludCBuZXh0Q2hhciA9IC0xOwotCQl0cnkgewotCQkJbmV4dENoYXIgPSByZWFkZXIucmVhZCgpOwotCQkJd2hpbGUgKGlzRU9MKG5leHRDaGFyKSkgewotCQkJCW5leHRDaGFyID0gcmVhZGVyLnJlYWQoKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbmV4dENoYXI7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlzRU9MKGludCBhQ2hhcikgewotCQlyZXR1cm4gKGFDaGFyID09ICdcbicgfHwgYUNoYXIgPT0gJ1xyJyk7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNjUzYTNkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLnRlc3RzLkNTU0NvcmVUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjEwMWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1jc3NlbmNvZGluZ3Rlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMzU4ZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmc8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi0jU3VuIEFwciAxNiAxNDowNToyOSBFRFQgMjAwNgotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzExODM2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGNzc2VuY29kaW5ndGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLkNTU0VuY29kaW5nVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZwotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjNTk4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5NYXkgMiwgMjAwNjwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5NjAwNTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSBjc3NlbmNvZGluZ3Rlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zcmMuaW5jbHVkZXMgPSBjc3NlbmNvZGluZ3Rlc3RzLmphcgotc291cmNlLmNzc2VuY29kaW5ndGVzdHMuamFyID0gc3JjLwotb3V0cHV0LmNzc2VuY29kaW5ndGVzdHMuamFyID0gYmluLwotICAgICAgICAgICAgICAgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1M2U5NjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gQ1NTIEVuY29kaW5nIFRlc3RzIFBsdWctaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZTcyODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9DU1NFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzLkNTU0VuY29kaW5nVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcuY3NzLkNTU0hlYWRUb2tlbml6ZXJUZXN0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3MuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yQ1NTOwotCi1wdWJsaWMgY2xhc3MgQ1NTRW5jb2RpbmdUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117Q1NTRW5jb2RpbmdUZXN0ZXIuY2xhc3MsIENTU0hlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckNTUy5jbGFzc307Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgQ1NTRW5jb2RpbmdUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgQ1NTRW5jb2RpbmdUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJDU1MgRW5jb2RpbmcgVGVzdCBTdWl0ZSIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShjbGFzc2VzW2ldLCBjbGFzc2VzW2ldLmdldE5hbWUoKSkpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRoZUNsYXNzCi0JICovCi0JcHVibGljIENTU0VuY29kaW5nVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzKSB7Ci0JCXN1cGVyKHRoZUNsYXNzKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBDU1NFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENTU0VuY29kaW5nVGVzdFN1aXRlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL0NTU0VuY29kaW5nVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWVkMzI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZzsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIENTU0VuY29kaW5nVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQlwdWJsaWMgc3RhdGljIExpc3QgZ2V0QWxsVGVzdEZpbGVzKFN0cmluZyB0b3BEaXJOYW1lKSB7Ci0JCUxpc3QgcmVzdWx0ID0gbnVsbDsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIHRvcERpck5hbWU7Ci0JCUZpbGUgdG9wRGlyID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlpZiAoIXRvcERpci5pc0RpcmVjdG9yeSgpKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKHRvcERpck5hbWUgKyAiIGlzIG5vdCBhIGRpcmVjdG9yeSIpOwotCQl9Ci0JCXJlc3VsdCA9IGdldEZpbGVzSW5EaXIodG9wRGlyKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgTGlzdCBnZXRGaWxlc0luRGlyKEZpbGUgdG9wRGlyKSB7Ci0JCUxpc3QgZmlsZXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCUZpbGVbXSB0b3BGaWxlcyA9IHRvcERpci5saXN0RmlsZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0b3BGaWxlcy5sZW5ndGg7IGkrKykgewotCQkJRmlsZSBmaWxlID0gdG9wRmlsZXNbaV07Ci0JCQlpZiAoZmlsZS5pc0ZpbGUoKSkgewotCQkJCWZpbGVzLmFkZChmaWxlKTsKLQkJCX0KLQkJCWVsc2UgaWYgKGZpbGUuaXNEaXJlY3RvcnkoKSAmJiAhZmlsZS5nZXROYW1lKCkuZW5kc1dpdGgoIkNWUyIpKSB7Ci0JCQkJTGlzdCBpbm5lckZpbGVzID0gZ2V0RmlsZXNJbkRpcihmaWxlKTsKLQkJCQlmaWxlcy5hZGRBbGwoaW5uZXJGaWxlcyk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZpbGVzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IENTU0VuY29kaW5nVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5KTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0VGVzdEZpbGUoU3RyaW5nIGZpbGVwYXRoKSB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWFkZXIgZ2V0VGVzdFJlYWRlcihTdHJpbmcgZmlsZXBhdGgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCVJlYWRlciByZXN1bHQgPSBuZXcgRmlsZVJlYWRlcihsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgd29ya3NwYWNlIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JfQotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBDU1NFbmNvZGluZ1Rlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0NTU0VuY29kaW5nVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9DU1NFbmNvZGluZ1Rlc3Rlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjBiMGZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL0NTU0VuY29kaW5nVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzczsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5DU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5DU1NFbmNvZGluZ1Rlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ01lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLklSZXNvdXJjZUNoYXJzZXREZXRlY3RvcjsKLQotcHVibGljIGNsYXNzIENTU0VuY29kaW5nVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogRW5zdXJlcyB0aGF0IGFuIElucHV0U3RyZWFtIGhhcyBtYXJrL3Jlc2V0IHN1cHBvcnQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgSW5wdXRTdHJlYW0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShJbnB1dFN0cmVhbSBvcmlnaW5hbCkgewotCQlpZiAob3JpZ2luYWwgPT0gbnVsbCkKLQkJCXJldHVybiBudWxsOwotCQlpZiAob3JpZ2luYWwubWFya1N1cHBvcnRlZCgpKQotCQkJcmV0dXJuIG9yaWdpbmFsOwotCQlyZXR1cm4gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0ob3JpZ2luYWwpOwotCX0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImNzcy8iOwotCS8vIHByaXZhdGUgZmluYWwgU3RyaW5nIHBsdWdpbkxvY2F0aW9uID0KLQkvLyBUZXN0c1BsdWdpbi5nZXRJbnN0YWxsTG9jYXRpb24oKS50b1N0cmluZygpOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVIb21lID0gInRlc3RmaWxlcy8iOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVIb21lICsgZmlsZURpcjsKLQlwcml2YXRlIGludCBSRUFEX0JVRkZFUl9TSVpFID0gODAwMDsKLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlU3RyZWFtKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkSUFOQUVuY29kaW5nLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IENTU0VuY29kaW5nVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoZmlsZW5hbWUpOwotCQlpZiAoIWZpbGUuZXhpc3RzKCkpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGZpbGVuYW1lICsgIiB3YXMgbm90IGZvdW5kIik7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJLy8gSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJbnB1dFN0cmVhbSBpc3RyZWFtID0gZ2V0TWFya1N1cHBvcnRlZFN0cmVhbShpbnB1dFN0cmVhbSk7Ci0JCXRyeSB7Ci0JCQlkZXRlY3Rvci5zZXQoaXN0cmVhbSk7Ci0JCQlFbmNvZGluZ01lbWVudG8gZW5jb2RpbmdNZW1lbnRvID0gKChDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IpZGV0ZWN0b3IpLmdldEVuY29kaW5nTWVtZW50bygpOwotCi0JCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBudWxsOwotCi0JCQlpZiAoZW5jb2RpbmdNZW1lbnRvICE9IG51bGwpIHsKLQkJCQlmb3VuZElBTkFFbmNvZGluZyA9IGVuY29kaW5nTWVtZW50by5nZXREZXRlY3RlZENoYXJzZXROYW1lKCk7Ci0JCQl9Ci0JCQkvLyBJIGNoYW5nZWQgbWFueSAiZXF1YWxzIiB0byAiZXF1YWxzSWdub3JlQ2FzZSIgb24gMTEvNC8yMDAyLAotCQkJLy8gc2luY2UKLQkJCS8vIHNvbWUgaXNzdWVzIHdpdGggU0hJRlRfSklTIHZzLiBTaGlmdF9KSVMgd2VyZSBjYXVzaW5nIGZhaWx1cmVzLgotCQkJLy8gV2UgZG8gd2FudCB0byBiZSB0b2xlcmFudCBvbiBpbnB1dCwgYW5kIGFjY2VwdCBlaXRoZXIsIGJ1dCBJCi0JCQkvLyB0aGluawotCQkJLy8gdGhhdCBTdXBwb3J0ZWRKYXZhRW5jb2RpbmdzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gInJlY29tbWVuZCIKLQkJCS8vIFNoaWZ0X0pJUy4KLQkJCWJvb2xlYW4gZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZmFsc2U7Ci0JCQlpZiAoZXhwZWN0ZWRJQU5BRW5jb2RpbmcgPT0gbnVsbCkgewotCQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IGV4cGVjdGVkSUFOQUVuY29kaW5nID09IGZvdW5kSUFOQUVuY29kaW5nOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZXhwZWN0ZWRJQU5BRW5jb2RpbmcuZXF1YWxzSWdub3JlQ2FzZShmb3VuZElBTkFFbmNvZGluZyk7Ci0JCQl9Ci0KLQkJCWFzc2VydFRydWUoImVuY29kaW5nIHRlc3QgZmlsZSAiICsgZmlsZW5hbWUgKyAiIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRJQU5BRW5jb2RpbmcgKyAiIGZvdW5kOiAiICsgZm91bmRJQU5BRW5jb2RpbmcsIGV4cGVjdGVkSUFOQVJlc3VsdCk7Ci0JCQkvLyBhIHZlcnkgc2ltcGxlIHJlYWQgdGVzdCAuLi4gd2lsbCBjYXVzZSBKVW5pdCBlcnJvciAobm90IGZhaWwpCi0JCQkvLyBpZgotCQkJLy8gdGhyb3dzIGV4Y2VwdGlvbi4KLQkJCWlmIChmb3VuZElBTkFFbmNvZGluZyAhPSBudWxsKSB7Ci0JCQkJZW5zdXJlQ2FuUmVhZChmaWxlbmFtZSwgZm91bmRJQU5BRW5jb2RpbmcsIGlzdHJlYW0pOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlzdHJlYW0gIT0gbnVsbCkgewotCQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIFRoaXMgbWV0aG9kIGp1c3QgcmVhZHMgdG8gc3RyZWFtLCB0byBiZSBzdXJlIGl0IGNhbiBiZSByZWFkIHBlcgotCSAqIGVuY29kaW5nLCB3aXRob3V0IGV4Y2VwdGlvbi4KLQkgKi8KLQlwcml2YXRlIHZvaWQgZW5zdXJlQ2FuUmVhZChTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBlbmNvZGluZywgSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShlbmNvZGluZyk7Ci0JCUNoYXJzZXREZWNvZGVyIGNoYXJzZXREZWNvZGVyID0gY2hhcnNldC5uZXdEZWNvZGVyKCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uTWFsZm9ybWVkSW5wdXQoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQkJY2hhcnNldERlY29kZXIub25Vbm1hcHBhYmxlQ2hhcmFjdGVyKENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0KLQkJSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGlucHV0U3RyZWFtLCBjaGFyc2V0RGVjb2Rlcik7Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSByZWFkSW5wdXRTdHJlYW0ocmVhZGVyKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihmaWxlbmFtZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCkpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcmVhZElucHV0U3RyZWFtKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG51bVJlYWQgPSAwOwotCQljaGFyIHRCdWZmW10gPSBuZXcgY2hhcltSRUFEX0JVRkZFUl9TSVpFXTsKLQkJd2hpbGUgKChudW1SZWFkID0gcmVhZGVyLnJlYWQodEJ1ZmYsIDAsIHRCdWZmLmxlbmd0aCkpICE9IC0xKSB7Ci0JCQlidWZmZXIuYXBwZW5kKHRCdWZmLCAwLCBudW1SZWFkKTsKLQkJfQotCQlyZXR1cm4gYnVmZmVyOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCZXN0Q2FzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub25TdGFuZGFyZC5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgImVtcHR5RmlsZS5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBudWxsLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFVUNKUCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJlbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJFVUMtSlAiLCBuZXcgQ1NTUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RKSVMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiZW5jb2RpbmdfdGVzdF9qaXMuY3NzIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy0yMDIyLUpQIiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJub0VuY29kaW5nLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIG51bGwsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdG5vblN0YW5kYXJkSWxsRm9ybWVkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJJU08tODg1OS02IiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9uU3RhbmRhcmRJbGxGb3JtZWQyKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIm5vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIsIG5ldyBDU1NSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNoaWZ0SklTKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgImVuY29kaW5nX3Rlc3Rfc2ppcy5jc3MiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiU0hJRlRfSklTIiwgbmV3IENTU1Jlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9DU1NIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9DU1NIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZjdjNjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvQ1NTSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3M7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkNTU0hlYWRUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkNTU0hlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhlYWRQYXJzZXJUb2tlbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLkNTU0VuY29kaW5nVGVzdHNQbHVnaW47Ci0KLXB1YmxpYyBjbGFzcyBDU1NIZWFkVG9rZW5pemVyVGVzdGVyIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgU3RyaW5nIGZjaGFyc2V0OwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiY3NzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gdGhpcy5maWxlSG9tZSArIHRoaXMuZmlsZURpcjsKLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgZXhwZWN0ZWROYW1lLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBmaW5hbFRva2VuVHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ1NTSGVhZFRva2VuaXplciB0b2tlbml6ZXIgPSBudWxsOwotCQlSZWFkZXIgZmlsZVJlYWRlciA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlpZiAodGhpcy5ERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgICAgICIgKyBmaWxlbmFtZSk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQl9Ci0JCQlmaWxlUmVhZGVyID0gQ1NTRW5jb2RpbmdUZXN0c1BsdWdpbi5nZXRUZXN0UmVhZGVyKGZpbGVuYW1lKTsKLQkJCXRva2VuaXplciA9IG5ldyBDU1NIZWFkVG9rZW5pemVyKGZpbGVSZWFkZXIpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG9wZW5pbmcgZmlsZSBcIiIgKyBmaWxlbmFtZSArICJcIiIpOwotCQkJdGhyb3cgZTsKLQkJfQotCi0JCUhlYWRQYXJzZXJUb2tlbiByZXN1bHRUb2tlbiA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IHBhcnNlSGVhZGVyKHRva2VuaXplcik7Ci0JCVN0cmluZyByZXN1bHRWYWx1ZSA9IHRoaXMuZmNoYXJzZXQ7Ci0JCWZpbGVSZWFkZXIuY2xvc2UoKTsKLQkJaWYgKGZpbmFsVG9rZW5UeXBlICE9IG51bGwpIHsKLQkJCWFzc2VydFRydWUoImRpZCBub3QgZW5kIGFzIGV4cGVjdGVkLiBmb3VuZDogICIgKyB0b2tlbi5nZXRUeXBlKCksIGZpbmFsVG9rZW5UeXBlLmVxdWFscyh0b2tlbi5nZXRUeXBlKCkpKTsKLQkJfQotCQllbHNlIHsKLQkJCWlmIChleHBlY3RlZE5hbWUgPT0gbnVsbCkgewotCQkJCWFzc2VydFRydWUoImV4cGVjdGVkIG5vIGVuY29kaW5nLCBidXQgZm91bmQ6ICIgKyByZXN1bHRWYWx1ZSwgcmVzdWx0VG9rZW4gPT0gbnVsbCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCAiICsgZXhwZWN0ZWROYW1lICsgIiBidXQgZm91bmQgIiArIHJlc3VsdFZhbHVlLCBleHBlY3RlZE5hbWUuZXF1YWxzKHJlc3VsdFZhbHVlKSk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0xlZ2FsU3RyaW5nKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHRva2VuVHlwZSA9PSBudWxsKSB7Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQllbHNlIHsKLQkJCXJlc3VsdCA9IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogR2l2ZSdzIHByaW9yaXR5IHRvIGVuY29kaW5nIHZhbHVlLCBpZiBmb3VuZCBlbHNlLCBsb29rcyBmb3IgY29udGVudFR5cGUKLQkgKiB2YWx1ZTsKLQkgKi8KLQlwcml2YXRlIEhlYWRQYXJzZXJUb2tlbiBwYXJzZUhlYWRlcihDU1NIZWFkVG9rZW5pemVyIHRva2VuaXplcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIGZpbmFsVG9rZW4gPSBudWxsOwotCQlkbyB7Ci0JCQl0b2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCVN0cmluZyB0b2tlblR5cGUgPSB0b2tlbi5nZXRUeXBlKCk7Ci0JCQlpZiAodG9rZW5UeXBlID09IENTU0hlYWRUb2tlbml6ZXJDb25zdGFudHMuQ0hBUlNFVF9SVUxFKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJSGVhZFBhcnNlclRva2VuIHZhbHVlVG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCVN0cmluZyB2YWx1ZVRva2VuVHlwZSA9IHZhbHVlVG9rZW4uZ2V0VHlwZSgpOwotCQkJCQlpZiAoaXNMZWdhbFN0cmluZyh2YWx1ZVRva2VuVHlwZSkpIHsKLQkJCQkJCXRoaXMuZmNoYXJzZXQgPSB2YWx1ZVRva2VuLmdldFRleHQoKTsKLQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKTsKLQkJZmluYWxUb2tlbiA9IHRva2VuOwotCQlyZXR1cm4gZmluYWxUb2tlbjsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RCZXN0Q2FzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIm5vblN0YW5kYXJkLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS02Iik7Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAiZW1wdHlGaWxlLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIF90ZXN0RVVDSlAoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJlbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJFVUMtSlAiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBfdGVzdEpJUygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgImVuY29kaW5nX3Rlc3RfamlzLmNzcyI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tMjAyMi1KUCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAibm9FbmNvZGluZy5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9uU3RhbmRhcmRJbGxGb3JtZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJub25TdGFuZGFyZElsbEZvcm1lZC5jc3MiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktNiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3Rub25TdGFuZGFyZElsbEZvcm1lZDIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTYiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2hpZnRKSVMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJlbmNvZGluZ190ZXN0X3NqaXMuY3NzIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlNISUZUX0pJUyIpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9FbmNvZGluZ1BhcnNlckNvbnN0YW50cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2M2MGNkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3Rlc3RzL2VuY29kaW5nL2Nzcy9FbmNvZGluZ1BhcnNlckNvbnN0YW50cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLmNzczsKLQotCi1wdWJsaWMgaW50ZXJmYWNlIEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzIHsKLQotCWZpbmFsIFN0cmluZyBFT0YgPSAiRU9GIjsgLy8kTk9OLU5MUy0xJAotCWZpbmFsIFN0cmluZyBJbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlID0gIkludmFsaWRUZXJtaW5hdGVkU3RyaW5nVmFsdWUiOyAvLyROT04tTkxTLTEkCi0JZmluYWwgU3RyaW5nIEludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUgPSAiSW52YWxpZFRlcm1pbnRhdGVkVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSI7IC8vJE5PTi1OTFMtMSQKLQlmaW5hbCBTdHJpbmcgTUFYX0NIQVJTX1JFQUNIRUQgPSAiTUFYX0NIQVJTX1JFQUNIRUQiOyAvLyROT04tTkxTLTEkCi0JZmluYWwgU3RyaW5nIFN0cmluZ1ZhbHVlID0gInN0cnZhbCI7IC8vJE5PTi1OTFMtMSQKLQlmaW5hbCBTdHJpbmcgVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSA9ICJVbkRlbGltaXRlZFN0cmluZ1ZhbHVlIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBmaW5hbCBTdHJpbmcgVVRGMTZCRSA9ICJVVEYxNkJFIjsgLy8kTk9OLU5MUy0xJAotCXB1YmxpYyBmaW5hbCBTdHJpbmcgVVRGMTZMRSA9ICJVVEYxNkxFIjsgLy8kTk9OLU5MUy0xJAotCi0KLQlwdWJsaWMgZmluYWwgU3RyaW5nIFVURjgzQnl0ZUJPTSA9ICJVVEY4M0J5dGVCT00iOyAvLyROT04tTkxTLTEkCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdGVzdHMvZW5jb2RpbmcvY3NzL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckNTUy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yQ1NTLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0Njg3MjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy90ZXN0cy9lbmNvZGluZy9jc3MvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yQ1NTLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy5jc3M7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb250ZW50VHlwZURldGVjdGlvbjsKLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckNTUyBleHRlbmRzIFRlc3RDb250ZW50VHlwZURldGVjdGlvbiB7Ci0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgib3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmNzc3NvdXJjZSIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcyIsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuY3Nzc291cmNlIiwgInRlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5jc3Nzb3VyY2UiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzIiwgbnVsbCk7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGQ2NTMzNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nLkNTU0VuY29kaW5nVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9ImNvcmUtdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcworKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9ldWNqcC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMjU2ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiRVVDLUpQIjsNCi0NCi1CT0RZIHsNCi0JZm9udC1mYW1pbHkgOiAio82j0yCj0KW0pbelw6WvIjsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM4NDc2OGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfamlzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIklTTy0yMDIyLUpQIjsNCi0NCi1CT0RZIHsNCi0JZm9udC1mYW1pbHkgOiAiGyRCI00jUxsoQiAbJEIjUCU0JTclQyUvGyhCIjsNCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTUyOWNkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9zamlzLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIlNISUZUX0pJUyI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIoJsgnIggm+DU4NWg2KDTiI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub0VuY29kaW5nLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub0VuY29kaW5nLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNmMDZiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1CT0RZIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCAiTVMgU2FucyBTZXJpZiI7DQotCXRleHQtZGVjb3JhdGlvbjogbm9uZTsNCi0JYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7DQotfQ0KLQ0KLVREIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDEycHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQl0ZXh0LWFsaWduOiBsZWZ0Ow0KLX0NCi0NCi1USCB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JZm9udC13ZWlnaHQ6IGJvbGRlcjsNCi0JdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotSDEgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTRwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXI7DQotCXRleHQtYWxpZ246IGNlbnRlcg0KLX0NCi0NCi1IMiB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JZm9udC13ZWlnaHQ6IGJvbGRlcg0KLX0NCi0NCi1IMyB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IGl0YWxpYyAgDQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzk5N2ViLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZC5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tODg1OS02IjsNCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFhNGU0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktNjsNCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2M4YTFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZDIuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0NCi0NCi0gICAgQGNoYXJzZXQgIklTTy04ODU5LTYiOw0KLQ0KLQ0KLQ0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUxYzhmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNjIxZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1iaW4KLWJpbi5wcm9qZWN0Ci1idWlsZC54bWwKLWRldi5wcm9wZXJ0aWVzCi1vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzXzEuMC4wLmphcgotY3NzdWl0ZXN0cy5qYXIKLXRlbXAuZm9sZGVyCi1QZXJmb3JtYW5jZVJlc3VsdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNDFkMTZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJkZDhiNWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjJhYzY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3MjQ5NTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZDQ2YzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLkNTU1VJVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy51aSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZSwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaCwKLSBvcmcuZWNsaXBzZS51aS5lZGl0b3JzLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuanVuaXQKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1CdW5kbGUtQ2xhc3NQYXRoOiBjc3N1aXRlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFlNTNiOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBjc3N1aXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIHNyYy8sXAotICAgICAgICAgICAgICAgdGVzdC54bWwKLWphcnMuY29tcGlsZS5vcmRlciA9IGNzc3VpdGVzdHMuamFyCi1zb3VyY2UuY3NzdWl0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuY3NzdWl0ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFhZDFmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZQotQnVuZGxlLU5hbWUuMCA9IENTUyBVSSBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMWJlZjVjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvQ1NTVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUzsKLQotcHVibGljIGNsYXNzIENTU1VJVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgQ1NTVUlUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgQ1NTVUlUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJDU1MgVUkgVGVzdCBTdWl0ZSIpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRXhpc3RlbmNlVGVzdC5jbGFzcywgIkNTUyBVSSBFeGlzdGVuY2UgVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkNTUy5jbGFzcykpOwotCX0KLX0JClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9DU1NVSVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0NTU1VJVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjFmMGYwNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL0NTU1VJVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBsdWdpbi4qOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIENTU1VJVGVzdHNQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKLQotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBDU1NVSVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkKLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIENTU1VJVGVzdHNQbHVnaW4oKSB7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBDU1NVSVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyBhbiBpbWFnZSBkZXNjcmlwdG9yIGZvciB0aGUgaW1hZ2UgZmlsZSBhdCB0aGUgZ2l2ZW4KLQkgKiBwbHVnLWluIHJlbGF0aXZlIHBhdGguCi0JICoKLQkgKiBAcGFyYW0gcGF0aCB0aGUgcGF0aAotCSAqIEByZXR1cm4gdGhlIGltYWdlIGRlc2NyaXB0b3IKLQkgKi8KLQlwdWJsaWMgc3RhdGljIEltYWdlRGVzY3JpcHRvciBnZXRJbWFnZURlc2NyaXB0b3IoU3RyaW5nIHBhdGgpIHsKLQkJcmV0dXJuIEFic3RyYWN0VUlQbHVnaW4uaW1hZ2VEZXNjcmlwdG9yRnJvbVBsdWdpbigib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cyIsIHBhdGgpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5MzEyN2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9FeGlzdGVuY2VUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkuaW50ZXJuYWwuQ1NTVUlQbHVnaW47Ci0KLS8qKgotICogCi0gKiBAc2luY2UgMS4wCi0gKi8KLXB1YmxpYyBjbGFzcyBFeGlzdGVuY2VUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIHRlc3RzIGlmIENTU1VJUGx1Z2luIGNhbiBiZSBsb2FkZWQKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RXhpc3RzKCkgewotCQlQbHVnaW4gcCA9IENTU1VJUGx1Z2luLmdldERlZmF1bHQoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgbG9hZCBDU1MgVUkgcGx1Z2luIiwgcCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkNTUy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2Nzcy91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkNTUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGUzMGJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25DU1MuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JDU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1M7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS52aWV3cy5jb250ZW50b3V0bGluZS5DU1NDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy51aS52aWV3cy5wcm9wZXJ0aWVzLkNTU1Byb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlcjsKLQotLyoqCi0gKiBUZXN0cyByZXRyaWV2aW5nIGVkaXRvciBjb250cmlidXRpb25zIGZvciBjc3MgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkNTUyBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MpOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudE91dGxpbmVWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuQ09OVEVOVE9VVExJTkVDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIGNvbnRlbnQgb3V0bGluZSBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckNTUy5Db250ZW50VHlwZUlEX0NTUywgby5nZXRDbGFzcygpLCBDU1NDb250ZW50T3V0bGluZUNvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlBST1BFUlRZU0hFRVRDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yQ1NTLkNvbnRlbnRUeXBlSURfQ1NTKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JDU1MuQ29udGVudFR5cGVJRF9DU1MsIG8uZ2V0Q2xhc3MoKSwgQ1NTUHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24uY2xhc3MpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvY3NzL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWExYWQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9jc3MvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzEgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuY3NzLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUF1dG9FZGl0U3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0RG91YmxlQ2xpY2tTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0SG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLklDb250ZW50Rm9ybWF0dGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmtEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmluZm9ybWF0aW9uLklJbmZvcm1hdGlvblByZXNlbnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS50ZXh0LklDU1NQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uQ1NTOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MudWkuaW50ZXJuYWwuTG9nZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5MaW5lU3R5bGVQcm92aWRlcjsKLQotcHVibGljIGNsYXNzIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uQ1NTIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25DU1MgZkNvbmZpZyA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGZEaXNwbGF5RXhpc3RzID0gdHJ1ZTsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyIGZWaWV3ZXIgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25DU1MoKSB7Ci0JCXN1cGVyKCJUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkNTUyIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCXNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0KLQkJaWYgKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0KLQkJCWlmIChQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7Ci0JCQkJc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0KLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJZlZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkNTUygpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEF1dG9FZGl0U3RyYXRlZ2llcygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUF1dG9FZGl0U3RyYXRlZ3lbXSBzdHJhdGVnaWVzID0gZkNvbmZpZy5nZXRBdXRvRWRpdFN0cmF0ZWdpZXMoZlZpZXdlciwgSUNTU1BhcnRpdGlvbnMuU1RZTEUpOwotCQlhc3NlcnROb3ROdWxsKHN0cmF0ZWdpZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gYXV0byBlZGl0IHN0cmF0ZWdpZXMiLCBzdHJhdGVnaWVzLmxlbmd0aCA+IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkQ29udGVudFR5cGVzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb25maWd1cmVkQ29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKGNvbmZpZ3VyZWRDb250ZW50VHlwZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBjb250ZW50IHR5cGVzIiwgY29uZmlndXJlZENvbnRlbnRUeXBlcy5sZW5ndGggPiAxKTsKLQl9Ci0KLQkvKgotCSAqIG5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50Rm9ybWF0dGVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQ29udGVudEZvcm1hdHRlciBjZiA9IGZDb25maWcuZ2V0Q29udGVudEZvcm1hdHRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBmb3JtYXR0ZXIiLCBjZik7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYgKHN0cmF0ZWd5ICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgZG91YmxlIGNsaWNrIHN0cmF0ZWdpZXMiLCBmYWxzZSk7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua0RldGVjdG9ycygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUh5cGVybGlua0RldGVjdG9yW10gZGV0ZWN0b3JzID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtEZXRlY3RvcnMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMubGVuZ3RoID4gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEluZGVudFByZWZpeGVzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nIHByZWZpeGVzW10gPSBmQ29uZmlnLmdldEluZGVudFByZWZpeGVzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAocHJlZml4ZXMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBpbmRlbnQgcHJlZml4ZXMiLCBmYWxzZSk7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpbmZvQ3JlYXRvciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25Db250cm9sQ3JlYXRvcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpcyBudWxsIiwgaW5mb0NyZWF0b3IpOwotCX0KLQotCS8qCi0JICogbm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvblByZXNlbnRlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUluZm9ybWF0aW9uUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uUHJlc2VudGVyIGlzIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMaW5lU3R5bGVQcm92aWRlcnMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlMaW5lU3R5bGVQcm92aWRlciBwcm92aWRlcnNbXSA9IGZDb25maWcuZ2V0TGluZVN0eWxlUHJvdmlkZXJzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAocHJvdmlkZXJzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgbGluZSBzdHlsZSBwcm92aWRlcnMiLCBmYWxzZSk7Ci0JfQotCi0JLyoKLQkgKiBub3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgbm90IG51bGwiLCByKTsKLQl9Ci0KLQkvKgotCSAqIG5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dEhvdmVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlTdHJpbmdbXSBob3ZlclBhcnRpdGlvbnMgPSBuZXcgU3RyaW5nW117SUNTU1BhcnRpdGlvbnMuU1RZTEV9OwotCQlmb3IgKGludCBpID0gMDsgaSA8IGhvdmVyUGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJSVRleHRIb3ZlciBob3ZlciA9IGZDb25maWcuZ2V0VGV4dEhvdmVyKGZWaWV3ZXIsIGhvdmVyUGFydGl0aW9uc1tpXSwgU1dULk5PTkUpOwotCQkJYXNzZXJ0Tm90TnVsbCgiaG92ZXIgd2FzIG51bGwgZm9yIHBhcnRpdGlvbjogIiArIGhvdmVyUGFydGl0aW9uc1tpXSwgaG92ZXIpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5jc3MudWkudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1NTI3NGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LmNzcy51aS50ZXN0cy5DU1NVSVRlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5OTU4NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIga2luZD0iY29uIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0LyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWViZmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotYmluCi1iaW4ucHJvamVjdAotYnVpbGQueG1sCi1kZXYucHJvcGVydGllcwotZHRkdWl0ZXN0cy5qYXIKLXRlbXAuZm9sZGVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5wcm9qZWN0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5N2UwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0czwvbmFtZT4KLQk8Y29tbWVudD48L2NvbW1lbnQ+Ci0JPHByb2plY3RzPgotCTwvcHJvamVjdHM+Ci0JPGJ1aWxkU3BlYz4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFidWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5NYW5pZmVzdEJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLlNjaGVtYUJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCTwvYnVpbGRTcGVjPgotCTxuYXR1cmVzPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLnBkZS5QbHVnaW5OYXR1cmU8L25hdHVyZT4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhbmF0dXJlPC9uYXR1cmU+Ci0JPC9uYXR1cmVzPgotPC9wcm9qZWN0RGVzY3JpcHRpb24+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWVuY29kaW5nLzxwcm9qZWN0Pj1JU08tODg1OS0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWxpbmUuc2VwYXJhdG9yPVxyXG4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2JhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU2F0IEF1ZyAxOSAxNjozMTo0MyBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25JbkRlcHJlY2F0ZWRDb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uV2hlbk92ZXJyaWRpbmdEZXByZWNhdGVkTWV0aG9kPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9JbXBsaWNpdFN0cmluZ0NvbnZlcnNpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub25FeHRlcm5hbGl6ZWRTdHJpbmdMaXRlcmFsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5wb3NzaWJsZUFjY2lkZW50YWxCb29sZWFuQXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zcGVjaWFsUGFyYW1ldGVySGlkaW5nRmllbGQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdGF0aWNBY2Nlc3NSZWNlaXZlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3ludGhldGljQWNjZXNzRW11bGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmNoZWNrZWRUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5kb2N1bWVudGVkRW1wdHlCbG9jaz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlFbHNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeVR5cGVDaGVjaz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnNhZmVUeXBlT3BlcmF0aW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkSW1wb3J0PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExhYmVsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbkltcGxlbWVudGluZ0Fic3RyYWN0PWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUHJpdmF0ZU1lbWJlcj1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS52YXJhcmdzQXJndW1lbnROZWVkQ2FzdD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBhdGlibGVKREtMZXZlbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGxldGVDbGFzc3BhdGg9ZXJyb3IKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKLW9yZy5lY2xpcHNlLmpkdC51aS50ZXh0LmN1c3RvbV9jb2RlX3RlbXBsYXRlcz08P3htbCB2ZXJzaW9uXD0iMS4wIiBlbmNvZGluZ1w9IlVURi04Ij8+XHJcbjx0ZW1wbGF0ZXMvPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNTIyYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotI01vbiBBcHIgMTcgMDI6MDE6MzMgRURUIDIwMDYKLWNvbXBpbGVycy5pbmNvbXBhdGlibGUtZW52aXJvbm1lbnQ9MAotY29tcGlsZXJzLnAuYnVpbGQ9MAotY29tcGlsZXJzLnAuZGVwcmVjYXRlZD0xCi1jb21waWxlcnMucC5pbGxlZ2FsLWF0dC12YWx1ZT0wCi1jb21waWxlcnMucC5uby1yZXF1aXJlZC1hdHQ9MAotY29tcGlsZXJzLnAubm90LWV4dGVybmFsaXplZC1hdHQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnAudW5rbm93bi1jbGFzcz0wCi1jb21waWxlcnMucC51bmtub3duLWVsZW1lbnQ9MAotY29tcGlsZXJzLnAudW5rbm93bi1yZXNvdXJjZT0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWV4LXBvaW50cz0wCi1jb21waWxlcnMucC51bnJlc29sdmVkLWltcG9ydD0wCi1jb21waWxlcnMucC51bnVzZWQtZWxlbWVudC1vci1hdHRyaWJ1dGU9MAotY29tcGlsZXJzLnVzZS1wcm9qZWN0PXRydWUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDgwZTMzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotTWFuaWZlc3QtVmVyc2lvbjogMS4wCi1CdW5kbGUtTWFuaWZlc3RWZXJzaW9uOiAyCi1CdW5kbGUtTmFtZTogJUJ1bmRsZS1OYW1lLjAKLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMC5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IGR0ZHVpdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLmludGVybmFsLkRURFVJVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5pbnRlcm5hbDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLmpmYWNlLnRleHQsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UudWkudmlld3MsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yLAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIGNvbS5pYm0uaWN1Ci1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM5YjAzNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLXNvdXJjZS5kdGR1aXRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5kdGR1aXRlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IGR0ZHVpdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWZlMjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwotQnVuZGxlLU5hbWUuMCA9IERURCBVSSBUZXN0cwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvRFREVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg1MjE1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL0RURFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucHJlZmVyZW5jZS5JUHJlZmVyZW5jZVN0b3JlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuaW50ZXJuYWwuRFREVUlQbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotCi0vKioKLSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBIVE1MIFNvdXJjZQotICogZWRpdG9yIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgRFREVUlQcmVmZXJlbmNlc1Rlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLyoqCi0JICogVGVzdHMgZXhpc3RhbmNlIG9mIHByZWZlcmVuY2UgdmFsdWVzIHdoZW4gZ2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcwotCSAqIHRocm91Z2ggUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVuZGxlR2V0UHJlZmVyZW5jZXMoKSB7Ci0JCWZpbmFsIFN0cmluZyBidW5kbGVOYW1lID0gIm9yZy5lY2xpcHNlLndzdC5kdGQudWkiOwotCi0JCS8vIG5lZWQgdG8gc3RhcnQgdXAgYnVuZGxlIGZvciBkZWZhdWx0IHZhbHVlcyB0byBiZSBsb2FkZWQKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVOYW1lKTsKLQkJdHJ5IHsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJCQlidW5kbGUuc3RhcnQoKTsKLQkJCWVsc2UKLQkJCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBjb3VsZCBub3QgZmluZCBidW5kbGU6ICIgKyBidW5kbGVOYW1lKTsKLQkJfSBjYXRjaCAoQnVuZGxlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIG9mIGV4Y2VwdGlvbiBzdGFydGluZyBidW5kbGU6ICIgKyBidW5kbGVOYW1lICsgIiBleGNlcHRpb246ICIgKyBlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IERURFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZHRkIHByZWZlcmVuY2Ugc3RvcmUgd2FzIG51bGwiLCBzdG9yZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCS8vSVNTVUU6IHRoaXMgZG9lcyBOT1QgdXNlIFNFVAotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gRFREVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQlhc3NlcnROb3ROdWxsKCJkdGQgcHJlZmVyZW5jZSBzdG9yZSB3YXMgbnVsbCIsIHN0b3JlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL0RURFVJVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL0RURFVJVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1NmM5ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9EVERVSVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFREOwotCi0KLQotcHVibGljIGNsYXNzIERURFVJVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCXJldHVybiBuZXcgRFREVUlUZXN0U3VpdGUoKTsKLQl9Ci0KLQlwdWJsaWMgRFREVUlUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJEVEQgVUkgVGVzdFN1aXRlIik7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShWZXJpZnlVSVBsdWdpbi5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRFREVUlQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFRELmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkRURC5jbGFzcykpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uRFRELmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1Rlc3RFZGl0b3JDb25maWd1cmF0aW9uRFRELmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZjgyNjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkRURC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuICAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2NwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgIElCTSAtIEluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICBKZW5zIEx1a293c2tpL0lubm9vcHJhY3QgLSBpbml0aWFsIHJlbmFtaW5nL3Jlc3RydWN0dXJpbmcKLSAqIAotICovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvckRURDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLkRURENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLkV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXI7Ci0KLS8qKgotICogVGVzdHMgcmV0cmlldmluZyBlZGl0b3IgY29udHJpYnV0aW9ucyBmb3IgZHRkIGNvbnRlbnQgdHlwZQotICovCi1wdWJsaWMgY2xhc3MgVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25EVEQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdEdldFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5TT1VSQ0VWSUVXRVJDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFREKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFRELCBvLmdldENsYXNzKCksIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRPdXRsaW5lVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLkNPTlRFTlRPVVRMSU5FQ09ORklHVVJBVElPTiwgQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGNvbnRlbnQgb3V0bGluZSBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckRURC5Db250ZW50VHlwZUlEX0RURCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JEVEQuQ29udGVudFR5cGVJRF9EVEQsIG8uZ2V0Q2xhc3MoKSwgRFREQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uLmNsYXNzKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1ZlcmlmeVVJUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL1ZlcmlmeVVJUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMmRhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9WZXJpZnlVSVBsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZAotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLmludGVybmFsLkRURFVJUGx1Z2luOwotCi0KLXB1YmxpYyBjbGFzcyBWZXJpZnlVSVBsdWdpbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5FeGlzdHMoKSB7Ci0JCS8vIFRPRE86IHNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODE1MjcKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJUGx1Z2luIHBsdWdpbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlwbHVnaW4gPSBEVERVSVBsdWdpbi5nZXREZWZhdWx0KCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQlwbHVnaW4gPSBudWxsOwotCQl9Ci0JCWFzc2VydE5vdE51bGwoImVkaXRvciBwbHVnaW4gY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIHBsdWdpbik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9pbnRlcm5hbC9EVERVSVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL2ludGVybmFsL0RURFVJVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTRlZDBjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvZHRkL3VpL3Rlc3RzL2ludGVybmFsL0RURFVJVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIERURFVJVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgRFREVUlUZXN0c1BsdWdpbiBwbHVnaW47Ci0JLy8gUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIERURFVJVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQkJcGx1Z2luID0gbnVsbDsKLQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIERURFVJVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IERURFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQl0cnkgewotCQkJaWYgKHJlc291cmNlQnVuZGxlID09IG51bGwpCi0JCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWwuVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9pbnRlcm5hbC9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvaW50ZXJuYWwvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlODRmNDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy9pbnRlcm5hbC9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gcHJpbnQKLQkgKiBAcGFyYW0gY2F0ZWdvcnkgY2F0ZWdvcnkgb2YgdGhlIG1lc3NhZ2UsIHRvIGJlIGNvbXBhcmVkIHdpdGggL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFRELmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYzI0NjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JQXV0b0VkaXRTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0RG91YmxlQ2xpY2tTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLmNvcmUudGV4dC5JRFREUGFydGl0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkRURDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzLmludGVybmFsLkxvZ2dlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlN0cnVjdHVyZWRUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkRURCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmRGlzcGxheUV4aXN0cyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uRFREKCkgewotCQlzdXBlcigiVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25EVEQiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCXN1cGVyLnNldFVwKCk7Ci0JCWlmICghdGhpcy5pc1NldHVwKSB7Ci0JCQlzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCi0JCWlmIChEaXNwbGF5LmdldEN1cnJlbnQoKSAhPSBudWxsKSB7Ci0KLQkJCVNoZWxsIHNoZWxsID0gbnVsbDsKLQkJCUNvbXBvc2l0ZSBwYXJlbnQgPSBudWxsOwotCi0JCQlpZiAoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc2hlbGwgPSBuZXcgU2hlbGwoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQkJfQotCQkJcGFyZW50ID0gbmV3IENvbXBvc2l0ZShzaGVsbCwgU1dULk5PTkUpOwotCi0JCQkvLyBkdW1teSB2aWV3ZXIKLQkJCWZWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwgU1dULk5PTkUpOwotCQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25EVEQoKTsKLQkJfQotCQllbHNlIHsKLQkJCWZEaXNwbGF5RXhpc3RzID0gZmFsc2U7Ci0JCQlMb2dnZXIubG9nKExvZ2dlci5JTkZPLCAiUmVtZW1iZXIsIHZpZXdlciBjb25maWd1cmF0aW9uIHRlc3RzIGFyZSBub3QgcnVuIGJlY2F1c2Ugd29ya2JlbmNoIGlzIG5vdCBvcGVuIChub3JtYWwgb24gYnVpbGQgbWFjaGluZSkiKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQXV0b0VkaXRTdHJhdGVneVtdIHN0cmF0ZWdpZXMgPSBmQ29uZmlnLmdldEF1dG9FZGl0U3RyYXRlZ2llcyhmVmlld2VyLCBJRFREUGFydGl0aW9ucy5EVERfREVGQVVMVCk7Ci0JCWFzc2VydE5vdE51bGwoc3RyYXRlZ2llcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBhdXRvIGVkaXQgc3RyYXRlZ2llcyIsIHN0cmF0ZWdpZXMubGVuZ3RoID4gMCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoY29uZmlndXJlZENvbnRlbnRUeXBlcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGNvbnRlbnQgdHlwZXMiLCBjb25maWd1cmVkQ29udGVudFR5cGVzLmxlbmd0aCA+IDEpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RG91YmxlQ2xpY2tTdHJhdGVneSgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSVRleHREb3VibGVDbGlja1N0cmF0ZWd5IHN0cmF0ZWd5ID0gZkNvbmZpZy5nZXREb3VibGVDbGlja1N0cmF0ZWd5KGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZiAoc3RyYXRlZ3kgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBkb3VibGUgY2xpY2sgc3RyYXRlZ2llcyIsIGZhbHNlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGluZVN0eWxlUHJvdmlkZXJzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUxpbmVTdHlsZVByb3ZpZGVyIHByb3ZpZGVyc1tdID0gZkNvbmZpZy5nZXRMaW5lU3R5bGVQcm92aWRlcnMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByb3ZpZGVycyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGxpbmUgc3R5bGUgcHJvdmlkZXJzIiwgZmFsc2UpOwotCX0KLQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVjb25jaWxlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSVJlY29uY2lsZXIgciA9IGZDb25maWcuZ2V0UmVjb25jaWxlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiUmVjb25jaWxlciBpcyBudWxsIiwgcik7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdERURC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LmR0ZC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2R0ZC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdERURC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZDljM2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9kdGQvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3REVEQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbk1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLlNlcGFyYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5yZXNvdXJjZS5KRmFjZVJlc291cmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS53aW5kb3cuV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5CdXN5SW5kaWNhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db250cm9sOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkxhYmVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlNoZWxsOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLlRleHQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSU1lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS52aWV3cy5jb250ZW50b3V0bGluZS5JQ29udGVudE91dGxpbmVQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5kdGQudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotCi1wdWJsaWMgY2xhc3MgVmlld2VyVGVzdERURCBleHRlbmRzIFZpZXdQYXJ0IHsKLQkvKioKLQkgKiBTZXRzIHRoZSB2aWV3ZXIncyBoaWdobGlnaHRpbmcgdGV4dCByYW5nZSB0byB0aGUgdGV4dCByYW5nZSBpbmRpY2F0ZWQKLQkgKiBieSB0aGUgc2VsZWN0ZWQgTm9kZXMuCi0JICovCi0JcHJvdGVjdGVkIGNsYXNzIE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQlpZiAoIWV2ZW50LmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBldmVudC5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi50b0FycmF5KClbc2VsZWN0aW9uLnNpemUoKSAtIDFdOwotCi0JCQkJaWYgKHN0YXJ0Tm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQllbmROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgZW5kTm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0KLQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgY2xhc3MgTnVtYmVySW5wdXREaWFsb2cgZXh0ZW5kcyBEaWFsb2cgewotCQlwdWJsaWMgVGV4dCBsZW5ndGg7Ci0KLQkJaW50IGxlbmd0aFZhbHVlOwotCQlwdWJsaWMgVGV4dCBzdGFydDsKLQkJaW50IHN0YXJ0VmFsdWU7Ci0KLQkJcHVibGljIE51bWJlcklucHV0RGlhbG9nKFNoZWxsIHNoZWxsKSB7Ci0JCQlzdXBlcihzaGVsbCk7Ci0JCX0KLQotCQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCQlDb21wb3NpdGUgY29udGFpbmVyID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OVUxMKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgdHJ1ZSkpOwotCQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbCgpLmdldFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJTdGFydCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiTGVuZ3RoIik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJc3RhcnQgPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJc3RhcnRWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldE9mZnNldCgpOwotCQkJc3RhcnQuc2V0VGV4dCgiIiArIHN0YXJ0VmFsdWUpOwotCQkJc3RhcnQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxlbmd0aCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlsZW5ndGhWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldExlbmd0aCgpOwotCQkJbGVuZ3RoLnNldFRleHQoIiIgKyBsZW5ndGhWYWx1ZSk7Ci0JCQlsZW5ndGguc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCS8vIHN0YXJ0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IHN0YXJ0KSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQkvLyBsZW5ndGguYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8gcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLyBpZiAoZS53aWRnZXQgPT0gbGVuZ3RoKSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSBJbnRlZ2VyLmRlY29kZShsZW5ndGguZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8gfQotCQkJLy8gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0KLQkJCXJldHVybiBjb21wb3NpdGU7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nI29rUHJlc3NlZCgpCi0JCSAqLwotCQlwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKSB7Ci0JCQl0cnkgewotCQkJCXN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJc3RhcnRWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCX0KLQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCQlsZW5ndGhWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQlzdXBlci5va1ByZXNzZWQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfVklFV0VSX0NPTlRFTlRTID0gIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCI+XG48SFRNTD5cbgk8SEVBRD5cbgkJPE1FVEEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiPlxuCQk8VElUTEU+cGxhY2UgdGl0bGUgaGVyZTwvVElUTEU+XG4JPC9IRUFEPlxuCTxCT0RZPlxuCQlwbGFjZSBjb250ZW50IGhlcmUJXG48c2NyaXB0PlxuXCJ0ZXh0XCI7XG48L1NDUklQVD5cbjwvQk9EWT5cbjwvSFRNTD4iOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgSUNvbnRlbnRPdXRsaW5lUGFnZSBmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQlwcml2YXRlIElTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIgZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPSBudWxsOwotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmU291cmNlVmlld2VyID0gbnVsbDsKLQotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1NFX0VESVRPUl9GT05UID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiOwotCi0JcHJvdGVjdGVkIHZvaWQgYWRkQWN0aW9ucyhJQ29udHJpYnV0aW9uTWFuYWdlciBtZ3IpIHsKLQkJaWYgKG1nciAhPSBudWxsKSB7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIk5ldyBIVE1MIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlCdXN5SW5kaWNhdG9yLnNob3dXaGlsZShnZXRTaXRlKCkuZ2V0U2hlbGwoKS5nZXREaXNwbGF5KCksIG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJCQlzZXR1cFZpZXdlckZvck5ldygpOwotCQkJCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUodHJ1ZSk7Ci0JCQkJCQl9Ci0JCQkJCX0pOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJDaGFuZ2UgVmlzaWJpbGl0eSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJTnVtYmVySW5wdXREaWFsb2cgZGxnID0gbmV3IE51bWJlcklucHV0RGlhbG9nKGZTb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJCQlpbnQgcHJvY2VlZCA9IGRsZy5vcGVuKCk7Ci0JCQkJCWlmIChwcm9jZWVkID09IFdpbmRvdy5DQU5DRUwpCi0JCQkJCQlyZXR1cm47Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihkbGcuc3RhcnRWYWx1ZSwgZGxnLmxlbmd0aFZhbHVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU2hvdyBBbGwiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIkNoYW5nZSBWaXNpYmlsaXR5IGluIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQkJCQkJSUVkaXRvclBhcnQgcGFydCA9IGdldFZpZXdTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAocGFydCAhPSBudWxsICYmIHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQkJc291cmNlVmlld2VyID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgcGFydCkuZ2V0VGV4dFZpZXdlcigpOwotCQkJCQl9Ci0JCQkJCWlmIChzb3VyY2VWaWV3ZXIgIT0gbnVsbCkgewotCQkJCQkJTnVtYmVySW5wdXREaWFsb2cgZGxnID0gbmV3IE51bWJlcklucHV0RGlhbG9nKHNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQkJCQlpbnQgcHJvY2VlZCA9IGRsZy5vcGVuKCk7Ci0JCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJCXJldHVybjsKLQkJCQkJCXNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJCXNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKGRsZy5zdGFydFZhbHVlLCBkbGcubGVuZ3RoVmFsdWUpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIGluIEVkaXRvciI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJU3RydWN0dXJlZFRleHRWaWV3ZXIgc291cmNlVmlld2VyID0gbnVsbDsKLQkJCQkJSUVkaXRvclBhcnQgcGFydCA9IGdldFZpZXdTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJCQlpZiAocGFydCAhPSBudWxsICYmIHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgewotCQkJCQkJc291cmNlVmlld2VyID0gKChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgcGFydCkuZ2V0VGV4dFZpZXdlcigpOwotCQkJCQl9Ci0JCQkJCWlmIChzb3VyY2VWaWV3ZXIgIT0gbnVsbCkgewotCQkJCQkJc291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQkvLyBubyBsb25nZXIgYWJsZSB0byBzZXQgZklucHV0IHRvIE5VTEwKLQkJCS8vIG1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCS8vIHJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJLy8gfQotCQkJLy8KLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gIlNldCBJbnB1dCB0byBOVUxMIjsKLQkJCS8vIH0KLQkJCS8vIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCS8vIHN1cGVyLnJ1bigpOwotCQkJLy8gdmlld2VyLnNldElucHV0KG51bGwpOwotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgZnJvbSBBY3RpdmUgRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKHRleHRFZGl0b3IpOwotCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiBBcyBSZWFkT25seSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUoZmFsc2UpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTdG9wIEZvbGxvd2luZyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKTsKLQkJYWRkQWN0aW9ucyhtZ3IpOwotCi0JCS8vIGNyZWF0ZSBzb3VyY2Ugdmlld2VyICYgaXRzIGNvbnRlbnQgdHlwZS1zcGVjaWZpYyB2aWV3ZXIKLQkJLy8gY29uZmlndXJhdGlvbgotCQlmU291cmNlVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25EVEQoKTsKLQotCQkvLyBzZXQgdXAgdGhlIHZpZXdlciB3aXRoIGEgZG9jdW1lbnQgJiB2aWV3ZXIgY29uZmlnCi0JCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0KLQkJc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOwotCQlmU291cmNlVmlld2VyLnVuY29uZmlndXJlKCk7Ci0JfQotCi0JLyoqCi0JICogSG9va3MgdXAgdGhlIHZpZXdlciB0byBmb2xsb3cgdGhlIGZTZWxlY3Rpb24gbWFkZSBpbiB0aGUgYWN0aXZlIGVkaXRvcgotCSAqLwotCXByaXZhdGUgdm9pZCBmb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IGdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yICE9IG51bGwpIHsKLQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKGVkaXRvcik7Ci0JCQlpZiAoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIgPT0gbnVsbCkKLQkJCQlmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9IG5ldyBOb2RlUmFuZ2VTZWxlY3Rpb25MaXN0ZW5lcigpOwotCi0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gKChJQ29udGVudE91dGxpbmVQYWdlKSBlZGl0b3IuZ2V0QWRhcHRlcihJQ29udGVudE91dGxpbmVQYWdlLmNsYXNzKSk7Ci0JCQlpZiAoZkNvbnRlbnRPdXRsaW5lUGFnZSAhPSBudWxsKSB7Ci0JCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5hZGRTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCi0JCQkJaWYgKCFmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBmQ29udGVudE91dGxpbmVQYWdlLmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQotCQkJCQlPYmplY3RbXSBub2RlcyA9ICgoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkpLnRvQXJyYXkoKTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBzdGFydE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgbm9kZXNbMF07Ci0JCQkJCUluZGV4ZWRSZWdpb24gZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1tub2Rlcy5sZW5ndGggLSAxXTsKLQotCQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQkJaW50IGVuZCA9IGVuZE5vZGUuZ2V0RW5kT2Zmc2V0KCk7Ci0KLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0U2VsZWN0ZWRSYW5nZShzdGFydCwgMCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgY3VycmVudCBhY3RpdmUgdGV4dCBlZGl0b3IgaWYgcG9zc2libGUKLQkgKiAKLQkgKiBAcmV0dXJuIElUZXh0RWRpdG9yCi0JICovCi0JcHJpdmF0ZSBJVGV4dEVkaXRvciBnZXRBY3RpdmVFZGl0b3IoKSB7Ci0JCUlUZXh0RWRpdG9yIGVkaXRvciA9IG51bGw7Ci0JCUlFZGl0b3JQYXJ0IGVkaXRvclBhcnQgPSBnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQlpZiAoZWRpdG9yUGFydCBpbnN0YW5jZW9mIElUZXh0RWRpdG9yKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0OwotCQlpZiAoZWRpdG9yID09IG51bGwgJiYgZWRpdG9yUGFydCAhPSBudWxsKQotCQkJZWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3JQYXJ0LmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlyZXR1cm4gZWRpdG9yOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVZpZXdQYXJ0I2luaXQoSVZpZXdTaXRlLCBJTWVtZW50bykKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlLCBJTWVtZW50byBtZW1lbnRvKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUsIG1lbWVudG8pOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgewotCQlpZiAoZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkgIT0gbnVsbCAmJiAhZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKQotCQkJZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHVwIHRoZSB2aWV3ZXIgd2l0aCB0aGUgc2FtZSBkb2N1bWVudC9mSW5wdXQgYXMgdGhlIGdpdmVuIGVkaXRvcgotCSAqIAotCSAqIEBwYXJhbSBJVGV4dEVkaXRvcgotCSAqICAgICAgICAgICAgZWRpdG9yIC0gdGhlIGVkaXRvciB0byB1c2UgKmNhbm5vdCB0byBiZSBudWxsKgotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlckZvckVkaXRvcihJVGV4dEVkaXRvciBlZGl0b3IpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOyAvLyBpZiB3YXMgZm9sbG93aW5nIGZTZWxlY3Rpb24sIHN0b3AKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQoZWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0KLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uRFREKCkpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYSBuZXcgZG9jdW1lbnQgJiBjb25maWd1cmUgaXQKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JOZXcoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBmU2VsZWN0aW9uLCBzdG9wCi0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQlJRG9jdW1lbnQgZG9jID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihDb250ZW50VHlwZUlkRm9yRFRELkNvbnRlbnRUeXBlSURfRFREKTsKLQkJZG9jLnNldChERUZBVUxUX1ZJRVdFUl9DT05URU5UUyk7Ci0KLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCQkvLyBuZWVkIHRvIHJlY29uZmlndXJlIGFmdGVyIHNldCBkb2N1bWVudCBqdXN0IHNvIGhpZ2hsaWdodGVyIHdvcmtzCi0JCWZTb3VyY2VWaWV3ZXIuY29uZmlndXJlKGZDb25maWcpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYW55IGFkZGl0aW9uYWwgcHJlZmVyZW5jZXMgaXQgc2hvdWxkIGhhdmUgRXg6Ci0JICogZm9udCwgdGFiIHdpZHRoCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyUHJlZmVyZW5jZXMoKSB7Ci0JCWZTb3VyY2VWaWV3ZXIuZ2V0VGV4dFdpZGdldCgpLnNldEZvbnQoSkZhY2VSZXNvdXJjZXMuZ2V0Rm9udChTU0VfRURJVE9SX0ZPTlQpKTsKLQl9Ci0KLQkvKioKLQkgKiBDZWFzZSBmb2xsb3dpbmcgdGhlIGZTZWxlY3Rpb24gbWFkZSBpbiB0aGUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN0b3BGb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQkJfQotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuZHRkLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5Y2JmNGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5kdGQudWkudGVzdHMuRFREVUlUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjkwYTcyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotZGV2LnByb3BlcnRpZXMKLWh0bWxjb3JldGVzdHMuamFyCi10ZW1wLmZvbGRlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1YmIyNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGY5NTg0ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjM3OjIxIEVEVCAyMDA2DQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTENCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGlzY291cmFnZWRSZWZlcmVuY2U9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZA0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0VmZmVjdEFzc2lnbm1lbnQ9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5vdmVycmlkaW5nUGFja2FnZURlZmF1bHRNZXRob2Q9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9d2FybmluZw0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zdXBwcmVzc1dhcm5pbmdzPWVuYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS50eXBlUGFyYW1ldGVySGlkaW5nPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5oYW5kbGVkV2FybmluZ1Rva2VuPXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnF1YWxpZmllZEZpZWxkQWNjZXNzPWlnbm9yZQ0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uV2hlbk92ZXJyaWRpbmc9ZGlzYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcg0KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZExvY2FsPWVycm9yDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5PdmVycmlkaW5nQ29uY3JldGU9ZGlzYWJsZWQNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3INCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcNCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5zb3VyY2U9MS4zDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlDQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWYyYWM2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotaW50ZXJuYWwuZGVmYXVsdC5jb21wbGlhbmNlPWRlZmF1bHQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzI0OTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLSNTdW4gQXByIDE2IDE0OjA1OjI5IEVEVCAyMDA2Ci1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NmQ5YTZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cwotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogaHRtbGNvcmV0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMuSFRNTENvcmVUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1pc2MsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbCwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlciwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5jc3MsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy50ZXh0LAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudGV4dC50ZXN0ZmlsZXMuaHRtbCwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLAotIGNvbS5pYm0uaWN1LAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjY3ZGIxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0Ci1Tb3VyY2UgOgotPGEgaHJlZj0iPCU9YyU+Ij5hPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA5XSAoPGEgaHJlZj0iKQotWzksIDEwXSAoPCkKLVsxMCwgMTJdICglPSkKLVsxMiwgMTNdIChjKQotWzEzLCAxNF0gKCUpCi1bMTQsIDE4XSAoPiI+YSkKLVsxOCwgMjJdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDldICg8YSBocmVmJiM2MTsiKUBbMTgsIDIyXSAoPC9hPikKLS0tLS0jdGV4dCg8JSYjNjE7YyU+Ij5hKUB7WzksIDEwXSAoPCksWzEwLCAxMl0gKCUmIzYxOyksWzEyLCAxM10gKGMpLFsxMywgMTRdICglKSxbMTQsIDE4XSAoPiI+YSl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQXR0clRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzk2MmM2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkF0dHJUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdDIKLVNvdXJjZSA6Ci08YSBiPSJjIiBkPSJlIj5mPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxNV0gKDxhIGI9ImMiIGQ9ImUiPikKLVsxNSwgMTZdIChmKQotWzE2LCAyMF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgMTVdICg8YSBiJiM2MTsiYyIgZCYjNjE7ImUiPilAWzE2LCAyMF0gKDwvYT4pCi0tLS0tI3RleHQoZilAWzE1LCAxNl0gKGYpCi0KLWIubmFtZT14OmIKLWIudmFsdWU9YwotYSBiPW51bGwKLWEgeDpiPWMKLVNvdXJjZSA6Ci08YSB4OmI9ImMiIGQ9ImUiPmY8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDE3XSAoPGEgeDpiPSJjIiBkPSJlIj4pCi1bMTcsIDE4XSAoZikKLVsxOCwgMjJdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDE3XSAoPGEgeDpiJiM2MTsiYyIgZCYjNjE7ImUiPilAWzE4LCAyMl0gKDwvYT4pCi0tLS0tI3RleHQoZilAWzE3LCAxOF0gKGYpCi0KLVNvdXJjZSA6Ci08YSB4OmI9ImMiIHk6ZD0iZSI+ZjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMTldICg8YSB4OmI9ImMiIHk6ZD0iZSI+KQotWzE5LCAyMF0gKGYpCi1bMjAsIDI0XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAxOV0gKDxhIHg6YiYjNjE7ImMiIHk6ZCYjNjE7ImUiPilAWzIwLCAyNF0gKDwvYT4pCi0tLS0tI3RleHQoZilAWzE5LCAyMF0gKGYpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGViNTcxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0Ci1Tb3VyY2UgOgotPGE+PCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDM2XSAoPCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+KQotWzM2LCA0MF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzM2LCA0MF0gKDwvYT4pCi0tLS0tI2NkYXRhLXNlY3Rpb24oY29udGVudE9mQ0RBVEFTZWN0aW9uKUBbMywgMzZdICg8IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT4pCi0KLWNvbnRlbnRPZkNEQVRBU2VjdGlvbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0Mi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVmODZhYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkNEQVRBU2VjdGlvblRlc3QyCi1Tb3VyY2UgOgotPGE+PCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDM2XSAoPCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+KQotWzM2LCA0MF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzM2LCA0MF0gKDwvYT4pCi0tLS0tI2NkYXRhLXNlY3Rpb24oY29udGVudE9mQ0RBVEFTZWN0aW9uKUBbMywgMzZdICg8IVtDREFUQVtjb250ZW50T2ZDREFUQVNlY3Rpb25dXT4pCi0KLWNvbnRlbnRPZkNEQVRBU2VjdGlvbgotU291cmNlIDoKLTxhPjwhW0NEQVRBW25ldyBjb250ZW50XV0+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDI2XSAoPCFbQ0RBVEFbbmV3IGNvbnRlbnRdXT4pCi1bMjYsIDMwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjYsIDMwXSAoPC9hPikKLS0tLS0jY2RhdGEtc2VjdGlvbihuZXcgY29udGVudClAWzMsIDI2XSAoPCFbQ0RBVEFbbmV3IGNvbnRlbnRdXT4pCi0KLW5ldyBjb250ZW50Ci1Tb3VyY2UgOgotPGE+PCFbQ0RBVEFbbmV3IGNvbnRlbnRdXT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgMjZdICg8IVtDREFUQVtuZXcgY29udGVudF1dPikKLVsyNiwgMzBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyNiwgMzBdICg8L2E+KQotLS0tLSNjZGF0YS1zZWN0aW9uKG5ldyBjb250ZW50KUBbMywgMjZdICg8IVtDREFUQVtuZXcgY29udGVudF1dPikKLQotbmV3IGNvbnRlbnQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM3Y2MxMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0MwotU291cmNlIDoKLTxhPjwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCAzNl0gKDwhW0NEQVRBW2NvbnRlbnRPZkNEQVRBU2VjdGlvbl1dPikKLVszNiwgNDBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFszNiwgNDBdICg8L2E+KQotLS0tLSNjZGF0YS1zZWN0aW9uKGNvbnRlbnRPZkNEQVRBU2VjdGlvbilAWzMsIDM2XSAoPCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+KQotCi1jb250ZW50T2ZDREFUQVNlY3Rpb24KLVNvdXJjZSA6Ci08YT48IVtDREFUQVtuZXcgPCBjb250ZW50XV0+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDI4XSAoPCFbQ0RBVEFbbmV3IDwgY29udGVudF1dPikKLVsyOCwgMzJdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyOCwgMzJdICg8L2E+KQotLS0tLSNjZGF0YS1zZWN0aW9uKG5ldyA8IGNvbnRlbnQpQFszLCAyOF0gKDwhW0NEQVRBW25ldyA8IGNvbnRlbnRdXT4pCi0KLW5ldyA8IGNvbnRlbnQKLVNvdXJjZSA6Ci08YT48IVtDREFUQVtuZXcgPiBjb250ZW50XV0+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDI4XSAoPCFbQ0RBVEFbbmV3ID4gY29udGVudF1dPikKLVsyOCwgMzJdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyOCwgMzJdICg8L2E+KQotLS0tLSNjZGF0YS1zZWN0aW9uKG5ldyA+IGNvbnRlbnQpQFszLCAyOF0gKDwhW0NEQVRBW25ldyA+IGNvbnRlbnRdXT4pCi0KLW5ldyA+IGNvbnRlbnQKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRG9jVHlwZVRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Eb2NUeXBlVGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjY2E5N2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Eb2NUeXBlVGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Eb2NUeXBlVGVzdAotU291cmNlIDoKLTwhRE9DVFlQRSBIVE1MPjxodG1sPjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMTVdICg8IURPQ1RZUEUgSFRNTD4pCi1bMTUsIDIxXSAoPGh0bWw+KQotWzIxLCAyOF0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLUhUTUwobnVsbCkobnVsbClAWzAsIDE1XSAoPCFET0NUWVBFIEhUTUw+KQotLS1odG1sL2h0bWxAWzE1LCAyMV0gKDxodG1sPilAWzIxLCAyOF0gKDwvaHRtbD4pCi0KLVNvdXJjZSA6Ci08IURPQ1RZUEUgSFRNTCBTWVNURU0gInN5dGVtIj48aHRtbD48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDMwXSAoPCFET0NUWVBFIEhUTUwgU1lTVEVNICJzeXRlbSI+KQotWzMwLCAzNl0gKDxodG1sPikKLVszNiwgNDNdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1IVE1MKG51bGwpKHN5dGVtKUBbMCwgMzBdICg8IURPQ1RZUEUgSFRNTCBTWVNURU0gInN5dGVtIj4pCi0tLWh0bWwvaHRtbEBbMzAsIDM2XSAoPGh0bWw+KUBbMzYsIDQzXSAoPC9odG1sPikKLQotU291cmNlIDoKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAicHVibGljIiAic3l0ZW0iPjxodG1sPjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMzldICg8IURPQ1RZUEUgSFRNTCBQVUJMSUMgInB1YmxpYyIgInN5dGVtIj4pCi1bMzksIDQ1XSAoPGh0bWw+KQotWzQ1LCA1Ml0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLUhUTUwocHVibGljKShzeXRlbSlAWzAsIDM5XSAoPCFET0NUWVBFIEhUTUwgUFVCTElDICJwdWJsaWMiICJzeXRlbSI+KQotLS1odG1sL2h0bWxAWzM5LCA0NV0gKDxodG1sPilAWzQ1LCA1Ml0gKDwvaHRtbD4pCi0KLVNvdXJjZSA6Ci0gPCFET0NUWVBFIEhUTUwgUFVCTElDICJwdWJsaWMiICJzeXRlbSI+PGh0bWw+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoICkKLVsxLCA0MF0gKDwhRE9DVFlQRSBIVE1MIFBVQkxJQyAicHVibGljIiAic3l0ZW0iPikKLVs0MCwgNDZdICg8aHRtbD4pCi1bNDYsIDUzXSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoIClAWzAsIDFdICggKQotLS1IVE1MKHB1YmxpYykoc3l0ZW0pQFsxLCA0MF0gKDwhRE9DVFlQRSBIVE1MIFBVQkxJQyAicHVibGljIiAic3l0ZW0iPikKLS0taHRtbC9odG1sQFs0MCwgNDZdICg8aHRtbD4pQFs0NiwgNTNdICg8L2h0bWw+KQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmNkODI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QKLVNvdXJjZSA6Ci08YT48YiBlPSJmIiBjPSJkIj48ZyAvPjxoIC8+PC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCAxOF0gKDxiIGU9ImYiIGM9ImQiPikKLVsxOCwgMjNdICg8ZyAvPikKLVsyMywgMjhdICg8aCAvPikKLVsyOCwgMzJdICg8L2I+KQotWzMyLCAzNl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzMyLCAzNl0gKDwvYT4pCi0tLS0tYi9iQFszLCAxOF0gKDxiIGUmIzYxOyJmIiBjJiM2MTsiZCI+KUBbMjgsIDMyXSAoPC9iPikKLS0tLS0tLWcvQFsxOCwgMjNdICg8ZyAvPikKLS0tLS0tLWgvQFsyMywgMjhdICg8aCAvPikKLQotU291cmNlIDoKLTxhPjxpIGU9ImYiIGM9ImQiPjxnIC8+PGggLz48L2k+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDE4XSAoPGkgZT0iZiIgYz0iZCI+KQotWzE4LCAyM10gKDxnIC8+KQotWzIzLCAyOF0gKDxoIC8+KQotWzI4LCAzMl0gKDwvaT4pCi1bMzIsIDM2XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMzIsIDM2XSAoPC9hPikKLS0tLS1pL2lAWzMsIDE4XSAoPGkgZSYjNjE7ImYiIGMmIzYxOyJkIj4pQFsyOCwgMzJdICg8L2k+KQotLS0tLS0tZy9AWzE4LCAyM10gKDxnIC8+KQotLS0tLS0taC9AWzIzLCAyOF0gKDxoIC8+KQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0Mi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNDYwOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QyCi1Tb3VyY2UgOgotPGE+PGI+YzwvYj48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNl0gKDxiPikKLVs2LCA3XSAoYykKLVs3LCAxMV0gKDwvYj4pCi1bMTEsIDE1XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTEsIDE1XSAoPC9hPikKLS0tLS1iL2JAWzMsIDZdICg8Yj4pQFs3LCAxMV0gKDwvYj4pCi0tLS0tLS0jdGV4dChjKUBbNiwgN10gKGMpCi0KLWEudGFnTmFtZT14OmEKLVNvdXJjZSA6Ci08eDphPjxiPmM8L2I+PC94OmE+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDVdICg8eDphPikKLVs1LCA4XSAoPGI+KQotWzgsIDldIChjKQotWzksIDEzXSAoPC9iPikKLVsxMywgMTldICg8L3g6YT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXg6YS94OmFAWzAsIDVdICg8eDphPilAWzEzLCAxOV0gKDwveDphPikKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFs5LCAxM10gKDwvYj4pCi0tLS0tLS0jdGV4dChjKUBbOCwgOV0gKGMpCi0KLVNvdXJjZSA6Ci08eDphPjx5OmI+YzwveTpiPjwveDphPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA1XSAoPHg6YT4pCi1bNSwgMTBdICg8eTpiPikKLVsxMCwgMTFdIChjKQotWzExLCAxN10gKDwveTpiPikKLVsxNywgMjNdICg8L3g6YT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXg6YS94OmFAWzAsIDVdICg8eDphPilAWzE3LCAyM10gKDwveDphPikKLS0tLS15OmIveTpiQFs1LCAxMF0gKDx5OmI+KUBbMTEsIDE3XSAoPC95OmI+KQotLS0tLS0tI3RleHQoYylAWzEwLCAxMV0gKGMpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjVkYWJmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVsZW1lbnRUZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDMKLVNvdXJjZSA6Ci08eDphPjxiPmM8L2I+PC94OmE+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDVdICg8eDphPikKLVs1LCA4XSAoPGI+KQotWzgsIDldIChjKQotWzksIDEzXSAoPC9iPikKLVsxMywgMTldICg8L3g6YT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXg6YS94OmFAWzAsIDVdICg8eDphPilAWzEzLCAxOV0gKDwveDphPikKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFs5LCAxM10gKDwvYj4pCi0tLS0tLS0jdGV4dChjKUBbOCwgOV0gKGMpCi0KLWEudGFnTmFtZT1hCi1Tb3VyY2UgOgotPGE+PGI+YzwvYj48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNl0gKDxiPikKLVs2LCA3XSAoYykKLVs3LCAxMV0gKDwvYj4pCi1bMTEsIDE1XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTEsIDE1XSAoPC9hPikKLS0tLS1iL2JAWzMsIDZdICg8Yj4pQFs3LCAxMV0gKDwvYj4pCi0tLS0tLS0jdGV4dChjKUBbNiwgN10gKGMpCi0KLWEudGFnTmFtZT15OmEKLVNvdXJjZSA6Ci08eTphPjxiPmM8L2I+PC95OmE+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDVdICg8eTphPikKLVs1LCA4XSAoPGI+KQotWzgsIDldIChjKQotWzksIDEzXSAoPC9iPikKLVsxMywgMTldICg8L3k6YT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXk6YS95OmFAWzAsIDVdICg8eTphPilAWzEzLCAxOV0gKDwveTphPikKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFs5LCAxM10gKDwvYj4pCi0tLS0tLS0jdGV4dChjKUBbOCwgOV0gKGMpCi0KLVNvdXJjZSA6Ci08eTphPjxiPmM8L2I+PC95OmE+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDVdICg8eTphPikKLVs1LCA4XSAoPGI+KQotWzgsIDldIChjKQotWzksIDEzXSAoPC9iPikKLVsxMywgMTldICg8L3k6YT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXk6YS95OmFAWzAsIDVdICg8eTphPilAWzEzLCAxOV0gKDwveTphPikKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFs5LCAxM10gKDwvYj4pCi0tLS0tLS0jdGV4dChjKUBbOCwgOV0gKGMpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWNhZmU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbXB0eVRleHRUZXN0Ci1Tb3VyY2UgOgotPHA+YTxicj48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOF0gKDxicj4pCi1bOCwgMTJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs4LCAxMl0gKDwvcD4pCi0tLS0tI3RleHQoYSlAWzMsIDRdIChhKQotLS0tLWJyQFs0LCA4XSAoPGJyPikKLS0tLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08cD5hPGJyPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA4XSAoPGJyPikKLVs4LCAxMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzgsIDEyXSAoPC9wPikKLS0tLS0jdGV4dChhKUBbMywgNF0gKGEpCi0tLS0tYnJAWzQsIDhdICg8YnI+KQotLS0tLSN0ZXh0KCkKLS0tLS0jdGV4dCgpCi0KLVNvdXJjZSA6Ci08cD5hPGJyPmI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOF0gKDxicj4pCi1bOCwgOV0gKGIpCi1bOSwgMTNdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs5LCAxM10gKDwvcD4pCi0tLS0tI3RleHQoYSlAWzMsIDRdIChhKQotLS0tLWJyQFs0LCA4XSAoPGJyPikKLS0tLS0jdGV4dChiKUBbOCwgOV0gKGIpCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+YTxicj5iPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDhdICg8YnI+KQotWzgsIDldIChiKQotWzksIDEzXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOSwgMTNdICg8L3A+KQotLS0tLSN0ZXh0KGEpQFszLCA0XSAoYSkKLS0tLS1ickBbNCwgOF0gKDxicj4pCi0tLS0tI3RleHQoYilAWzgsIDldIChiKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Mzg2ZWZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDIKLVNvdXJjZSA6Ci08cD48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgN10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzMsIDddICg8L3A+KQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPmE8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzQsIDhdICg8L3A+KQotLS0tLSN0ZXh0KGEpQFszLCA0XSAoYSkKLQotU291cmNlIDoKLTxwPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMywgN10gKDwvcD4pCi0tLS0tI3RleHQoKQotCi1Tb3VyY2UgOgotPHA+PGI+PC9iPjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA2XSAoPGI+KQotWzYsIDEwXSAoPC9iPikKLVsxMCwgMTRdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMCwgMTRdICg8L3A+KQotLS0tLWIvYkBbMywgNl0gKDxiPilAWzYsIDEwXSAoPC9iPikKLS0tLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPjxiPmE8L2I+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDZdICg8Yj4pCi1bNiwgN10gKGEpCi1bNywgMTFdICg8L2I+KQotWzExLCAxNV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzExLCAxNV0gKDwvcD4pCi0tLS0tYi9iQFszLCA2XSAoPGI+KUBbNywgMTFdICg8L2I+KQotLS0tLS0tI3RleHQoYSlAWzYsIDddIChhKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3QzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTY1ZWZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDMKLVNvdXJjZSA6Ci0KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxhPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMywgN10gKDwvYT4pCi0tLSN0ZXh0KCkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhNzJmODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QKLVNvdXJjZSA6Ci08cD48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgN10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzMsIDddICg8L3A+KQotCi1Tb3VyY2UgOgotPHA+JmFtcDtndDs8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOF0gKCZhbXA7KQotWzgsIDExXSAoZ3Q7KQotWzExLCAxNV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzExLCAxNV0gKDwvcD4pCi0tLS0tI3RleHQoJmd0OylAe1szLCA4XSAoJmFtcDspLFs4LCAxMV0gKGd0Oyl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNzJlZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Mi50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0MgotU291cmNlIDoKLTxwPmE8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzQsIDhdICg8L3A+KQotLS0tLSN0ZXh0KGEpQFszLCA0XSAoYSkKLQotU291cmNlIDoKLTxwPmEmYW1wO2d0OzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA5XSAoJmFtcDspCi1bOSwgMTJdIChndDspCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhJmd0OylAe1szLCA0XSAoYSksWzQsIDldICgmYW1wOyksWzksIDEyXSAoZ3Q7KX0KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJjYjNjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDkyICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3QzCi1Tb3VyY2UgOgotPHA+YTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA4XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbNCwgOF0gKDwvcD4pCi0tLS0tI3RleHQoYSlAWzMsIDRdIChhKQotCi1Tb3VyY2UgOgotPHA+YWI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFiKQotWzUsIDldICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs1LCA5XSAoPC9wPikKLS0tLS0jdGV4dChhYilAWzMsIDVdIChhYikKLQotU291cmNlIDoKLTxwPmFiJmFtcDs8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFiKQotWzUsIDEwXSAoJmFtcDspCi1bMTAsIDE0XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTAsIDE0XSAoPC9wPikKLS0tLS0jdGV4dChhYiYpQHtbMywgNV0gKGFiKSxbNSwgMTBdICgmYW1wOyl9Ci0KLVNvdXJjZSA6Ci08cD5hYiZhbXA7YzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWIpCi1bNSwgMTBdICgmYW1wOykKLVsxMCwgMTFdIChjKQotWzExLCAxNV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzExLCAxNV0gKDwvcD4pCi0tLS0tI3RleHQoYWImYylAe1szLCA1XSAoYWIpLFs1LCAxMF0gKCZhbXA7KSxbMTAsIDExXSAoYyl9Ci0KLVNvdXJjZSA6Ci08cD5kYWImYW1wO2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNl0gKGRhYikKLVs2LCAxMV0gKCZhbXA7KQotWzExLCAxMl0gKGMpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChkYWImYylAe1szLCA2XSAoZGFiKSxbNiwgMTFdICgmYW1wOyksWzExLCAxMl0gKGMpfQotCi1Tb3VyY2UgOgotPHA+ZGFiJmFtcDtjZTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA2XSAoZGFiKQotWzYsIDExXSAoJmFtcDspCi1bMTEsIDEzXSAoY2UpCi1bMTMsIDE3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTMsIDE3XSAoPC9wPikKLS0tLS0jdGV4dChkYWImY2UpQHtbMywgNl0gKGRhYiksWzYsIDExXSAoJmFtcDspLFsxMSwgMTNdIChjZSl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDQudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjZTgwZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NAotU291cmNlIDoKLTxwPmEmYW1wO2I8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOV0gKCZhbXA7KQotWzksIDEwXSAoYikKLVsxMCwgMTRdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMCwgMTRdICg8L3A+KQotLS0tLSN0ZXh0KGEmYilAe1szLCA0XSAoYSksWzQsIDldICgmYW1wOyksWzksIDEwXSAoYil9Ci0KLVNvdXJjZSA6Ci08cD5hJmFtcDtiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDldICgmYW1wOykKLVs5LCAxMF0gKGIpCi1bMTAsIDE0XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTAsIDE0XSAoPC9wPikKLS0tLS0jdGV4dCgpCi0tLS0tI3RleHQoYSZiKUB7WzMsIDRdIChhKSxbNCwgOV0gKCZhbXA7KSxbOSwgMTBdIChiKX0KLQotU291cmNlIDoKLTxwPmNhJmFtcDtiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChjYSkKLVs1LCAxMF0gKCZhbXA7KQotWzEwLCAxMV0gKGIpCi1bMTEsIDE1XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTEsIDE1XSAoPC9wPikKLS0tLS0jdGV4dChjKUBbMyw0XShbMywgNV0gKGNhKSkKLS0tLS0jdGV4dChhJmIpQHtbNCw1XShbMywgNV0gKGNhKSksWzUsIDEwXSAoJmFtcDspLFsxMCwgMTFdIChiKX0KLQotU291cmNlIDoKLTxwPmNhJmFtcDtiYSZhbXA7YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoY2EpCi1bNSwgMTBdICgmYW1wOykKLVsxMCwgMTJdIChiYSkKLVsxMiwgMTddICgmYW1wOykKLVsxNywgMThdIChiKQotWzE4LCAyMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE4LCAyMl0gKDwvcD4pCi0tLS0tI3RleHQoY2EmYilAe1szLCA1XSAoY2EpLFs1LCAxMF0gKCZhbXA7KSxbMTAsMTFdKFsxMCwgMTJdIChiYSkpfQotLS0tLSN0ZXh0KGEmYilAe1sxMSwxMl0oWzEwLCAxMl0gKGJhKSksWzEyLCAxN10gKCZhbXA7KSxbMTcsIDE4XSAoYil9Ci0KLVNvdXJjZSA6Ci08cD5jYSZhbXA7YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoY2EpCi1bNSwgMTBdICgmYW1wOykKLVsxMCwgMTFdIChiKQotWzExLCAxNV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzExLCAxNV0gKDwvcD4pCi0tLS0tI3RleHQoY2EmYilAe1szLCA1XSAoY2EpLFs1LCAxMF0gKCZhbXA7KSxbMTAsIDExXSAoYil9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDUudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZWI4YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NQotU291cmNlIDoKLTxwPmEmYW1wO2I8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNF0gKGEpCi1bNCwgOV0gKCZhbXA7KQotWzksIDEwXSAoYikKLVsxMCwgMTRdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMCwgMTRdICg8L3A+KQotLS0tLSN0ZXh0KGEmYilAe1szLCA0XSAoYSksWzQsIDldICgmYW1wOyksWzksIDEwXSAoYil9Ci0KLVNvdXJjZSA6Ci08cD5hJmFtcDtiYSZhbXA7YjwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA5XSAoJmFtcDspCi1bOSwgMTFdIChiYSkKLVsxMSwgMTZdICgmYW1wOykKLVsxNiwgMTddIChiKQotWzE3LCAyMV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE3LCAyMV0gKDwvcD4pCi0tLS0tI3RleHQoYSZiKUB7WzMsIDRdIChhKSxbNCwgOV0gKCZhbXA7KSxbOSwxMF0oWzksIDExXSAoYmEpKX0KLS0tLS0jdGV4dChhJmIpQHtbMTAsMTFdKFs5LCAxMV0gKGJhKSksWzExLCAxNl0gKCZhbXA7KSxbMTYsIDE3XSAoYil9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDYudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Ni50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxMzE1ZjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0Ni50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NgotU291cmNlIDoKLTxwPmEmYW1wOzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA0XSAoYSkKLVs0LCA5XSAoJmFtcDspCi1bOSwgMTNdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs5LCAxM10gKDwvcD4pCi0tLS0tI3RleHQoYSYpQHtbMywgNF0gKGEpLFs0LCA5XSAoJmFtcDspfQotCi1Tb3VyY2UgOgotPHA+YSZhbXA7YSZhbXA7PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDRdIChhKQotWzQsIDldICgmYW1wOykKLVs5LCAxMF0gKGEpCi1bMTAsIDE1XSAoJmFtcDspCi1bMTUsIDE5XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTUsIDE5XSAoPC9wPikKLS0tLS0jdGV4dChhJilAe1szLCA0XSAoYSksWzQsIDldICgmYW1wOyl9Ci0tLS0tI3RleHQoYSYpQHtbOSwgMTBdIChhKSxbMTAsIDE1XSAoJmFtcDspfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q3LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDcudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjVkOTgyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDcKLVNvdXJjZSA6Ci08YT5hJiM2NTsmI3g0MTsmdW5rOyZ1bmsmdW5rPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdIChhKQotWzQsIDldICgmIzY1OykKLVs5LCAxNV0gKCYjeDQxOykKLVsxNSwgMjBdICgmdW5rOykKLVsyMCwgMjRdICgmdW5rKQotWzI0LCAyOF0gKCZ1bmspCi1bMjgsIDMyXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjgsIDMyXSAoPC9hPikKLS0tLS0jdGV4dChhQUEpQHtbMywgNF0gKGEpLFs0LCA5XSAoJiM2NTspLFs5LCAxNV0gKCYjeDQxOyl9Ci0tLS0tdW5rCi0tLS0tI3RleHQoJnVuayZ1bmspQHtbMjAsIDI0XSAoJnVuayksWzI0LCAyOF0gKCZ1bmspfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVudGl0eVRlc3Q4LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDgudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGVjYjFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDgudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDgKLVNvdXJjZSA6Ci0maWJtOyZydHA7Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDVdICgmaWJtOykKLVs1LCAxMF0gKCZydHA7KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1pYm0KLS0tcnRwCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDkudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MDJlM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OQotU291cmNlIDoKLSZsdDsKLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNF0gKCZsdDspCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KDwpQFswLCA0XSAoJmx0OykKLQotU291cmNlIDoKLSZsdDsmZ3QKLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNF0gKCZsdDspCi1bNCwgN10gKCZndCkKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoPCZndClAe1swLCA0XSAoJmx0OyksWzQsIDddICgmZ3QpfQotCi1Tb3VyY2UgOgotJmx0OyZndDsKLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNF0gKCZsdDspCi1bNCwgOF0gKCZndDspCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KDw+KUB7WzAsIDRdICgmbHQ7KSxbNCwgOF0gKCZndDspfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBJVGVzdC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBJVGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YWVhNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QSVRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUElUZXN0Ci1Tb3VyY2UgOgotPGE+PD9lY2hvICRQSFBfU0VMRj8+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDIxXSAoPD9lY2hvICRQSFBfU0VMRj8+KQotWzIxLCAyNV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzIxLCAyNV0gKDwvYT4pCi0tLS0tZWNobygkUEhQX1NFTEYpCi0KLXRhcmdldChlY2hvKSBkYXRhICgkUEhQX1NFTEYpCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ5Njc5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjI1ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QKLVNvdXJjZSA6Ci08UD48Qj48L0I+PEI+PC9CPjwvUD48UD48L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8UD4pCi1bMywgNl0gKDxCPikKLVs2LCAxMF0gKDwvQj4pCi1bMTAsIDEzXSAoPEI+KQotWzEzLCAxN10gKDwvQj4pCi1bMTcsIDIxXSAoPC9QPikKLVsyMSwgMjRdICg8UD4pCi1bMjQsIDI4XSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tUC9QQFswLCAzXSAoPFA+KUBbMTcsIDIxXSAoPC9QPikKLS0tLS1CL0JAWzMsIDZdICg8Qj4pQFs2LCAxMF0gKDwvQj4pCi0tLS0tQi9CQFsxMCwgMTNdICg8Qj4pQFsxMywgMTddICg8L0I+KQotLS1QL1BAWzIxLCAyNF0gKDxQPilAWzI0LCAyOF0gKDwvUD4pCi0KLVNvdXJjZSA6Ci1hPFA+PEI+PC9CPjxCPjwvQj48L1A+PFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoYSkKLVsxLCA0XSAoPFA+KQotWzQsIDddICg8Qj4pCi1bNywgMTFdICg8L0I+KQotWzExLCAxNF0gKDxCPikKLVsxNCwgMThdICg8L0I+KQotWzE4LCAyMl0gKDwvUD4pCi1bMjIsIDI1XSAoPFA+KQotWzI1LCAyOV0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KGEpQFswLCAxXSAoYSkKLS0tUC9QQFsxLCA0XSAoPFA+KUBbMTgsIDIyXSAoPC9QPikKLS0tLS1CL0JAWzQsIDddICg8Qj4pQFs3LCAxMV0gKDwvQj4pCi0tLS0tQi9CQFsxMSwgMTRdICg8Qj4pQFsxNCwgMThdICg8L0I+KQotLS1QL1BAWzIyLCAyNV0gKDxQPilAWzI1LCAyOV0gKDwvUD4pCi0KLVNvdXJjZSA6Ci1hPFA+YjxCPjwvQj48Qj48L0I+PC9QPjxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKGEpCi1bMSwgNF0gKDxQPikKLVs0LCA1XSAoYikKLVs1LCA4XSAoPEI+KQotWzgsIDEyXSAoPC9CPikKLVsxMiwgMTVdICg8Qj4pCi1bMTUsIDE5XSAoPC9CPikKLVsxOSwgMjNdICg8L1A+KQotWzIzLCAyNl0gKDxQPikKLVsyNiwgMzBdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dChhKUBbMCwgMV0gKGEpCi0tLVAvUEBbMSwgNF0gKDxQPilAWzE5LCAyM10gKDwvUD4pCi0tLS0tI3RleHQoYilAWzQsIDVdIChiKQotLS0tLUIvQkBbNSwgOF0gKDxCPilAWzgsIDEyXSAoPC9CPikKLS0tLS1CL0JAWzEyLCAxNV0gKDxCPilAWzE1LCAxOV0gKDwvQj4pCi0tLVAvUEBbMjMsIDI2XSAoPFA+KUBbMjYsIDMwXSAoPC9QPikKLQotU291cmNlIDoKLWE8UD5iPEI+PC9CPmM8Qj48L0I+PC9QPjxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKGEpCi1bMSwgNF0gKDxQPikKLVs0LCA1XSAoYikKLVs1LCA4XSAoPEI+KQotWzgsIDEyXSAoPC9CPikKLVsxMiwgMTNdIChjKQotWzEzLCAxNl0gKDxCPikKLVsxNiwgMjBdICg8L0I+KQotWzIwLCAyNF0gKDwvUD4pCi1bMjQsIDI3XSAoPFA+KQotWzI3LCAzMV0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KGEpQFswLCAxXSAoYSkKLS0tUC9QQFsxLCA0XSAoPFA+KUBbMjAsIDI0XSAoPC9QPikKLS0tLS0jdGV4dChiKUBbNCwgNV0gKGIpCi0tLS0tQi9CQFs1LCA4XSAoPEI+KUBbOCwgMTJdICg8L0I+KQotLS0tLSN0ZXh0KGMpQFsxMiwgMTNdIChjKQotLS0tLUIvQkBbMTMsIDE2XSAoPEI+KUBbMTYsIDIwXSAoPC9CPikKLS0tUC9QQFsyNCwgMjddICg8UD4pQFsyNywgMzFdICg8L1A+KQotCi1Tb3VyY2UgOgotYTxQPmI8Qj48L0I+YzxCPjwvQj5kPC9QPjxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKGEpCi1bMSwgNF0gKDxQPikKLVs0LCA1XSAoYikKLVs1LCA4XSAoPEI+KQotWzgsIDEyXSAoPC9CPikKLVsxMiwgMTNdIChjKQotWzEzLCAxNl0gKDxCPikKLVsxNiwgMjBdICg8L0I+KQotWzIwLCAyMV0gKGQpCi1bMjEsIDI1XSAoPC9QPikKLVsyNSwgMjhdICg8UD4pCi1bMjgsIDMyXSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tI3RleHQoYSlAWzAsIDFdIChhKQotLS1QL1BAWzEsIDRdICg8UD4pQFsyMSwgMjVdICg8L1A+KQotLS0tLSN0ZXh0KGIpQFs0LCA1XSAoYikKLS0tLS1CL0JAWzUsIDhdICg8Qj4pQFs4LCAxMl0gKDwvQj4pCi0tLS0tI3RleHQoYylAWzEyLCAxM10gKGMpCi0tLS0tQi9CQFsxMywgMTZdICg8Qj4pQFsxNiwgMjBdICg8L0I+KQotLS0tLSN0ZXh0KGQpQFsyMCwgMjFdIChkKQotLS1QL1BAWzI1LCAyOF0gKDxQPilAWzI4LCAzMl0gKDwvUD4pCi0KLVNvdXJjZSA6Ci1hPFA+YjxCPjwvQj5jPEI+PC9CPmQ8L1A+ZTxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKGEpCi1bMSwgNF0gKDxQPikKLVs0LCA1XSAoYikKLVs1LCA4XSAoPEI+KQotWzgsIDEyXSAoPC9CPikKLVsxMiwgMTNdIChjKQotWzEzLCAxNl0gKDxCPikKLVsxNiwgMjBdICg8L0I+KQotWzIwLCAyMV0gKGQpCi1bMjEsIDI1XSAoPC9QPikKLVsyNSwgMjZdIChlKQotWzI2LCAyOV0gKDxQPikKLVsyOSwgMzNdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dChhKUBbMCwgMV0gKGEpCi0tLVAvUEBbMSwgNF0gKDxQPilAWzIxLCAyNV0gKDwvUD4pCi0tLS0tI3RleHQoYilAWzQsIDVdIChiKQotLS0tLUIvQkBbNSwgOF0gKDxCPilAWzgsIDEyXSAoPC9CPikKLS0tLS0jdGV4dChjKUBbMTIsIDEzXSAoYykKLS0tLS1CL0JAWzEzLCAxNl0gKDxCPilAWzE2LCAyMF0gKDwvQj4pCi0tLS0tI3RleHQoZClAWzIwLCAyMV0gKGQpCi0tLSN0ZXh0KGUpQFsyNSwgMjZdIChlKQotLS1QL1BAWzI2LCAyOV0gKDxQPilAWzI5LCAzM10gKDwvUD4pCi0KLVNvdXJjZSA6Ci1hPFA+YjxCPjwvQj5jPEI+PC9CPmQ8L1A+ZTxQPmY8L1A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDFdIChhKQotWzEsIDRdICg8UD4pCi1bNCwgNV0gKGIpCi1bNSwgOF0gKDxCPikKLVs4LCAxMl0gKDwvQj4pCi1bMTIsIDEzXSAoYykKLVsxMywgMTZdICg8Qj4pCi1bMTYsIDIwXSAoPC9CPikKLVsyMCwgMjFdIChkKQotWzIxLCAyNV0gKDwvUD4pCi1bMjUsIDI2XSAoZSkKLVsyNiwgMjldICg8UD4pCi1bMjksIDMwXSAoZikKLVszMCwgMzRdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dChhKUBbMCwgMV0gKGEpCi0tLVAvUEBbMSwgNF0gKDxQPilAWzIxLCAyNV0gKDwvUD4pCi0tLS0tI3RleHQoYilAWzQsIDVdIChiKQotLS0tLUIvQkBbNSwgOF0gKDxCPilAWzgsIDEyXSAoPC9CPikKLS0tLS0jdGV4dChjKUBbMTIsIDEzXSAoYykKLS0tLS1CL0JAWzEzLCAxNl0gKDxCPilAWzE2LCAyMF0gKDwvQj4pCi0tLS0tI3RleHQoZClAWzIwLCAyMV0gKGQpCi0tLSN0ZXh0KGUpQFsyNSwgMjZdIChlKQotLS1QL1BAWzI2LCAyOV0gKDxQPilAWzMwLCAzNF0gKDwvUD4pCi0tLS0tI3RleHQoZilAWzI5LCAzMF0gKGYpCi0KLVNvdXJjZSA6Ci1hPFA+YjxCPjwvQj5jPEI+PC9CPmQ8L1A+ZTxQPmY8L1A+ZwotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxXSAoYSkKLVsxLCA0XSAoPFA+KQotWzQsIDVdIChiKQotWzUsIDhdICg8Qj4pCi1bOCwgMTJdICg8L0I+KQotWzEyLCAxM10gKGMpCi1bMTMsIDE2XSAoPEI+KQotWzE2LCAyMF0gKDwvQj4pCi1bMjAsIDIxXSAoZCkKLVsyMSwgMjVdICg8L1A+KQotWzI1LCAyNl0gKGUpCi1bMjYsIDI5XSAoPFA+KQotWzI5LCAzMF0gKGYpCi1bMzAsIDM0XSAoPC9QPikKLVszNCwgMzVdIChnKQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS0jdGV4dChhKUBbMCwgMV0gKGEpCi0tLVAvUEBbMSwgNF0gKDxQPilAWzIxLCAyNV0gKDwvUD4pCi0tLS0tI3RleHQoYilAWzQsIDVdIChiKQotLS0tLUIvQkBbNSwgOF0gKDxCPilAWzgsIDEyXSAoPC9CPikKLS0tLS0jdGV4dChjKUBbMTIsIDEzXSAoYykKLS0tLS1CL0JAWzEzLCAxNl0gKDxCPilAWzE2LCAyMF0gKDwvQj4pCi0tLS0tI3RleHQoZClAWzIwLCAyMV0gKGQpCi0tLSN0ZXh0KGUpQFsyNSwgMjZdIChlKQotLS1QL1BAWzI2LCAyOV0gKDxQPilAWzMwLCAzNF0gKDwvUD4pCi0tLS0tI3RleHQoZilAWzI5LCAzMF0gKGYpCi0tLSN0ZXh0KGcpQFszNCwgMzVdIChnKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Mzk5MGE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDIKLVNvdXJjZSA6Ci08YSBiPSIiICBjPSJjIj4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMTVdICg8YSBiPSIiICBjPSJjIj4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWFAWzAsIDE1XSAoPGEgYiYjNjE7IiIgIGMmIzYxOyJjIj4pCi0KLWI9W10KLWM9W2NdCi1Tb3VyY2UgOgotPGEgYj0iIiBkIGM9ImMiPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxNl0gKDxhIGI9IiIgZCBjPSJjIj4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWFAWzAsIDE2XSAoPGEgYiYjNjE7IiIgZCBjJiM2MTsiYyI+KQotCi1iPVtdCi1kPVtdCi1jPVtjXQotU291cmNlIDoKLTxhIGI9IiIgIGM9ImMiPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAxNV0gKDxhIGI9IiIgIGM9ImMiPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYUBbMCwgMTVdICg8YSBiJiM2MTsiIiAgYyYjNjE7ImMiPikKLQotYj1bXQotYz1bY10KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMzhhZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0MwotU291cmNlIDoKLTxhIGIgID4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgN10gKDxhIGIgID4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWFAWzAsIDddICg8YSBiICA+KQotCi1iPVtdCi1vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudAotU291cmNlIDoKLTxhIGIgPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGEgYiA+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hQFswLCA2XSAoPGEgYiA+KQotCi1iPVtdCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3Q0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzMyY2UyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMjQzICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlBhcnNlclRlc3Q0Ci1Tb3VyY2UgOgotPGE+Ci0KLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA1XSAoCi0KLSkKLVs1LCA2XSAoPCkKLVs2LCA4XSAoJSApCi1bOCwgMTBdIChhICkKLVsxMCwgMTFdICglKQotWzExLCAxM10gKD4KLSkKLVsxMywgMTRdICg8KQotWzE0LCAxNl0gKCUgKQotWzE2LCAxOF0gKGIgKQotWzE4LCAxOV0gKCUpCi1bMTksIDIxXSAoPgotKQotWzIxLCAyNV0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzIxLCAyNV0gKDwvYT4pCi0tLS0tI3RleHQoXG5cbjwlIGEgJT5cbjwlIGIgJT5cbilAe1szLCA1XSAoXG5cbiksWzUsIDZdICg8KSxbNiwgOF0gKCUgKSxbOCwgMTBdIChhICksWzEwLCAxMV0gKCUpLFsxMSwgMTNdICg+XG4pLFsxMywgMTRdICg8KSxbMTQsIDE2XSAoJSApLFsxNiwgMThdIChiICksWzE4LCAxOV0gKCUpLFsxOSwgMjFdICg+XG4pfQotCi1Tb3VyY2UgOgotPGE+Ci08Ci08JSBhICU+Ci08JSBiICU+Ci08L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKAotKQotWzQsIDVdICg8KQotWzUsIDZdICgKLSkKLVs2LCA3XSAoPCkKLVs3LCA5XSAoJSApCi1bOSwgMTFdIChhICkKLVsxMSwgMTJdICglKQotWzEyLCAxNF0gKD4KLSkKLVsxNCwgMTVdICg8KQotWzE1LCAxN10gKCUgKQotWzE3LCAxOV0gKGIgKQotWzE5LCAyMF0gKCUpCi1bMjAsIDIyXSAoPgotKQotWzIyLCAyNl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzIyLCAyNl0gKDwvYT4pCi0tLS0tI3RleHQoXG48XG48JSBhICU+XG48JSBiICU+XG4pQHtbMywgNF0gKFxuKSxbNCwgNV0gKDwpLFs1LCA2XSAoXG4pLFs2LCA3XSAoPCksWzcsIDldICglICksWzksIDExXSAoYSApLFsxMSwgMTJdICglKSxbMTIsIDE0XSAoPlxuKSxbMTQsIDE1XSAoPCksWzE1LCAxN10gKCUgKSxbMTcsIDE5XSAoYiApLFsxOSwgMjBdICglKSxbMjAsIDIyXSAoPlxuKX0KLQotU291cmNlIDoKLTxhPgotPGIKLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgN10gKDxiCi0pCi1bNywgOF0gKDwpCi1bOCwgMTBdICglICkKLVsxMCwgMTJdIChhICkKLVsxMiwgMTNdICglKQotWzEzLCAxNV0gKD4KLSkKLVsxNSwgMTZdICg8KQotWzE2LCAxOF0gKCUgKQotWzE4LCAyMF0gKGIgKQotWzIwLCAyMV0gKCUpCi1bMjEsIDIzXSAoPgotKQotWzIzLCAyN10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzIzLCAyN10gKDwvYT4pCi0tLS0tI3RleHQoXG4pQFszLCA0XSAoXG4pCi0tLS0tYkBbNCwgN10gKDxiXG4pCi0tLS0tLS0jdGV4dCg8JSBhICU+XG48JSBiICU+XG4pQHtbNywgOF0gKDwpLFs4LCAxMF0gKCUgKSxbMTAsIDEyXSAoYSApLFsxMiwgMTNdICglKSxbMTMsIDE1XSAoPlxuKSxbMTUsIDE2XSAoPCksWzE2LCAxOF0gKCUgKSxbMTgsIDIwXSAoYiApLFsyMCwgMjFdICglKSxbMjEsIDIzXSAoPlxuKX0KLQotU291cmNlIDoKLTxhPgotPGJjCi08JSBhICU+Ci08JSBiICU+Ci08L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKAotKQotWzQsIDhdICg8YmMKLSkKLVs4LCA5XSAoPCkKLVs5LCAxMV0gKCUgKQotWzExLCAxM10gKGEgKQotWzEzLCAxNF0gKCUpCi1bMTQsIDE2XSAoPgotKQotWzE2LCAxN10gKDwpCi1bMTcsIDE5XSAoJSApCi1bMTksIDIxXSAoYiApCi1bMjEsIDIyXSAoJSkKLVsyMiwgMjRdICg+Ci0pCi1bMjQsIDI4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjQsIDI4XSAoPC9hPikKLS0tLS0jdGV4dChcbilAWzMsIDRdIChcbikKLS0tLS1iY0BbNCwgOF0gKDxiY1xuKQotLS0tLS0tI3RleHQoPCUgYSAlPlxuPCUgYiAlPlxuKUB7WzgsIDldICg8KSxbOSwgMTFdICglICksWzExLCAxM10gKGEgKSxbMTMsIDE0XSAoJSksWzE0LCAxNl0gKD5cbiksWzE2LCAxN10gKDwpLFsxNywgMTldICglICksWzE5LCAyMV0gKGIgKSxbMjEsIDIyXSAoJSksWzIyLCAyNF0gKD5cbil9Ci0KLVNvdXJjZSA6Ci08YT4KLTxiY2QKLTwlIGEgJT4KLTwlIGIgJT4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgOV0gKDxiY2QKLSkKLVs5LCAxMF0gKDwpCi1bMTAsIDEyXSAoJSApCi1bMTIsIDE0XSAoYSApCi1bMTQsIDE1XSAoJSkKLVsxNSwgMTddICg+Ci0pCi1bMTcsIDE4XSAoPCkKLVsxOCwgMjBdICglICkKLVsyMCwgMjJdIChiICkKLVsyMiwgMjNdICglKQotWzIzLCAyNV0gKD4KLSkKLVsyNSwgMjldICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyNSwgMjldICg8L2E+KQotLS0tLSN0ZXh0KFxuKUBbMywgNF0gKFxuKQotLS0tLWJjZEBbNCwgOV0gKDxiY2RcbikKLS0tLS0tLSN0ZXh0KDwlIGEgJT5cbjwlIGIgJT5cbilAe1s5LCAxMF0gKDwpLFsxMCwgMTJdICglICksWzEyLCAxNF0gKGEgKSxbMTQsIDE1XSAoJSksWzE1LCAxN10gKD5cbiksWzE3LCAxOF0gKDwpLFsxOCwgMjBdICglICksWzIwLCAyMl0gKGIgKSxbMjIsIDIzXSAoJSksWzIzLCAyNV0gKD5cbil9Ci0KLVNvdXJjZSA6Ci08YT4KLTxiY2RlCi08JSBhICU+Ci08JSBiICU+Ci08L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKAotKQotWzQsIDEwXSAoPGJjZGUKLSkKLVsxMCwgMTFdICg8KQotWzExLCAxM10gKCUgKQotWzEzLCAxNV0gKGEgKQotWzE1LCAxNl0gKCUpCi1bMTYsIDE4XSAoPgotKQotWzE4LCAxOV0gKDwpCi1bMTksIDIxXSAoJSApCi1bMjEsIDIzXSAoYiApCi1bMjMsIDI0XSAoJSkKLVsyNCwgMjZdICg+Ci0pCi1bMjYsIDMwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMjYsIDMwXSAoPC9hPikKLS0tLS0jdGV4dChcbilAWzMsIDRdIChcbikKLS0tLS1iY2RlQFs0LCAxMF0gKDxiY2RlXG4pCi0tLS0tLS0jdGV4dCg8JSBhICU+XG48JSBiICU+XG4pQHtbMTAsIDExXSAoPCksWzExLCAxM10gKCUgKSxbMTMsIDE1XSAoYSApLFsxNSwgMTZdICglKSxbMTYsIDE4XSAoPlxuKSxbMTgsIDE5XSAoPCksWzE5LCAyMV0gKCUgKSxbMjEsIDIzXSAoYiApLFsyMywgMjRdICglKSxbMjQsIDI2XSAoPlxuKX0KLQotU291cmNlIDoKLTxhPgotPGJjZGU+Ci08JSBhICU+Ci08JSBiICU+Ci08L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKAotKQotWzQsIDEwXSAoPGJjZGU+KQotWzEwLCAxMV0gKAotKQotWzExLCAxMl0gKDwpCi1bMTIsIDE0XSAoJSApCi1bMTQsIDE2XSAoYSApCi1bMTYsIDE3XSAoJSkKLVsxNywgMTldICg+Ci0pCi1bMTksIDIwXSAoPCkKLVsyMCwgMjJdICglICkKLVsyMiwgMjRdIChiICkKLVsyNCwgMjVdICglKQotWzI1LCAyN10gKD4KLSkKLVsyNywgMzFdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsyNywgMzFdICg8L2E+KQotLS0tLSN0ZXh0KFxuKUBbMywgNF0gKFxuKQotLS0tLWJjZGVAWzQsIDEwXSAoPGJjZGU+KQotLS0tLS0tI3RleHQoXG48JSBhICU+XG48JSBiICU+XG4pQHtbMTAsIDExXSAoXG4pLFsxMSwgMTJdICg8KSxbMTIsIDE0XSAoJSApLFsxNCwgMTZdIChhICksWzE2LCAxN10gKCUpLFsxNywgMTldICg+XG4pLFsxOSwgMjBdICg8KSxbMjAsIDIyXSAoJSApLFsyMiwgMjRdIChiICksWzI0LCAyNV0gKCUpLFsyNSwgMjddICg+XG4pfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJhOTAwMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QKLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYWJiYmJjY2MpQFszLCAxMl0gKGFhYmJiYmNjYykKLQotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGJiYmJjY2MpQFs1LDEyXShbMywgMTJdIChhYWJiYmJjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoYmJiYilAWzUsOV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs5LDEyXShbMywgMTJdIChhYWJiYmJjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOF0gKGFhY2NjKQotWzgsIDEyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOCwgMTJdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgOF0gKGFhY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs1LDhdKFszLCA4XSAoYWFjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFkZGRkZGRkY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDE1XSAoYWFkZGRkZGRkY2NjKQotWzE1LCAxOV0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE1LCAxOV0gKDwvcD4pCi0tLS0tI3RleHQoYWFkZGRkZGRkKUBbMywxMl0oWzMsIDE1XSAoYWFkZGRkZGRkY2NjKSkKLS0tLS0jdGV4dChjY2MpQFsxMiwxNV0oWzMsIDE1XSAoYWFkZGRkZGRkY2NjKSkKLQotU291cmNlIDoKLTxwPmFhZGRkZGRkZGNjY2VlZTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxOF0gKGFhZGRkZGRkZGNjY2VlZSkKLVsxOCwgMjJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxOCwgMjJdICg8L3A+KQotLS0tLSN0ZXh0KGFhZGRkZGRkZClAWzMsMTJdKFszLCAxOF0gKGFhZGRkZGRkZGNjY2VlZSkpCi0tLS0tI3RleHQoY2NjZWVlKUBbMTIsMThdKFszLCAxOF0gKGFhZGRkZGRkZGNjY2VlZSkpCi0KLVNvdXJjZSA6Ci08cD5hYWRkZGRkZGRiYmJiY2NjZWVlPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDIyXSAoYWFkZGRkZGRkYmJiYmNjY2VlZSkKLVsyMiwgMjZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsyMiwgMjZdICg8L3A+KQotLS0tLSN0ZXh0KGFhZGRkZGRkZClAWzMsMTJdKFszLCAyMl0gKGFhZGRkZGRkZGJiYmJjY2NlZWUpKQotLS0tLSN0ZXh0KGJiYmIpQFsxMiwxNl0oWzMsIDIyXSAoYWFkZGRkZGRkYmJiYmNjY2VlZSkpCi0tLS0tI3RleHQoY2NjZWVlKUBbMTYsMjJdKFszLCAyMl0gKGFhZGRkZGRkZGJiYmJjY2NlZWUpKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTEyMmM2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDIKLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYWJiYmJjY2MpQFszLCAxMl0gKGFhYmJiYmNjYykKLQotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgMTJdIChhYWJiYmJjY2MpKQotLS0tLSN0ZXh0KGJiYmJjY2MpQFs1LDEyXShbMywgMTJdIChhYWJiYmJjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoYmJiYilAWzUsOV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs5LDEyXShbMywgMTJdIChhYWJiYmJjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOF0gKGFhY2NjKQotWzgsIDEyXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbOCwgMTJdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgOF0gKGFhY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs1LDhdKFszLCA4XSAoYWFjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWE8Yj5iYmJiPC9iPmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWEpCi1bNSwgOF0gKDxiPikKLVs4LCAxMl0gKGJiYmIpCi1bMTIsIDE2XSAoPC9iPikKLVsxNiwgMTldIChjY2MpCi1bMTksIDIzXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTksIDIzXSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsIDVdIChhYSkKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFsxMiwgMTZdICg8L2I+KQotLS0tLS0tI3RleHQoYmJiYilAWzgsIDEyXSAoYmJiYikKLS0tLS0jdGV4dChjY2MpQFsxNiwgMTldIChjY2MpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NTNhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0My50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0MwotU291cmNlIDoKLTxwPmFhPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYSkKLVs1LCA5XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbNSwgOV0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLCA1XSAoYWEpCi0KLVNvdXJjZSA6Ci08cD5hYTxiPmJiYmI8L2I+PC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYSkKLVs1LCA4XSAoPGI+KQotWzgsIDEyXSAoYmJiYikKLVsxMiwgMTZdICg8L2I+KQotWzE2LCAyMF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE2LCAyMF0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLCA1XSAoYWEpCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbMTIsIDE2XSAoPC9iPikKLS0tLS0tLSN0ZXh0KGJiYmIpQFs4LCAxMl0gKGJiYmIpCi0KLVNvdXJjZSA6Ci08cD5hYTxiPmJiYmI8L2I+Y2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYSkKLVs1LCA4XSAoPGI+KQotWzgsIDEyXSAoYmJiYikKLVsxMiwgMTZdICg8L2I+KQotWzE2LCAxOV0gKGNjYykKLVsxOSwgMjNdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxOSwgMjNdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMywgNV0gKGFhKQotLS0tLWIvYkBbNSwgOF0gKDxiPilAWzEyLCAxNl0gKDwvYj4pCi0tLS0tLS0jdGV4dChiYmJiKUBbOCwgMTJdIChiYmJiKQotLS0tLSN0ZXh0KGNjYylAWzE2LCAxOV0gKGNjYykKLQotU291cmNlIDoKLTxwPmFhY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDhdIChhYWNjYykKLVs4LCAxMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzgsIDEyXSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDhdIChhYWNjYykpCi0tLS0tI3RleHQoY2NjKUBbNSw4XShbMywgOF0gKGFhY2NjKSkKLQotU291cmNlIDoKLTxwPmFhPGI+YmJiYjwvYj5jY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFhKQotWzUsIDhdICg8Yj4pCi1bOCwgMTJdIChiYmJiKQotWzEyLCAxNl0gKDwvYj4pCi1bMTYsIDE5XSAoY2NjKQotWzE5LCAyM10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzE5LCAyM10gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLCA1XSAoYWEpCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbMTIsIDE2XSAoPC9iPikKLS0tLS0tLSN0ZXh0KGJiYmIpQFs4LCAxMl0gKGJiYmIpCi0tLS0tI3RleHQoY2NjKUBbMTYsIDE5XSAoY2NjKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q0LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwN2JiZjMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDQudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDQKLVNvdXJjZSA6Ci08cD48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgN10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzMsIDddICg8L3A+KQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPmFhYTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA2XSAoYWFhKQotWzYsIDEwXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbNiwgMTBdICg8L3A+KQotLS0tLSN0ZXh0KGFhYSlAWzMsIDZdIChhYWEpCi0KLVNvdXJjZSA6Ci08cD48L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgN10gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzMsIDddICg8L3A+KQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPmNjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgN10gKGNjY2MpCi1bNywgMTFdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs3LCAxMV0gKDwvcD4pCi0tLS0tI3RleHQoY2NjYylAWzMsIDddIChjY2NjKQotLS0tLSN0ZXh0KCkKLQotU291cmNlIDoKLTxwPmNjY2NhYWE8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTBdIChjY2NjYWFhKQotWzEwLCAxNF0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEwLCAxNF0gKDwvcD4pCi0tLS0tI3RleHQoY2NjYylAWzMsN10oWzMsIDEwXSAoY2NjY2FhYSkpCi0tLS0tI3RleHQoYWFhKUBbNywxMF0oWzMsIDEwXSAoY2NjY2FhYSkpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDUudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljZWRiNTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDUKLVNvdXJjZSA6Ci08cD5hYWJiYmJjY2M8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTJdIChhYWJiYmJjY2MpCi1bMTIsIDE2XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTIsIDE2XSAoPC9wPikKLS0tLS0jdGV4dChhYWJiYmJjY2MpQFszLCAxMl0gKGFhYmJiYmNjYykKLQotU291cmNlIDoKLTxwPmFhYmJiYmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxMl0gKGFhYmJiYmNjYykKLVsxMiwgMTZdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMiwgMTZdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYilAWzMsOV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs5LDEyXShbMywgMTJdIChhYWJiYmJjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiPGJyPmNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA5XSAoYWFiYmJiKQotWzksIDEzXSAoPGJyPikKLVsxMywgMTZdIChjY2MpCi1bMTYsIDIwXSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTYsIDIwXSAoPC9wPikKLS0tLS0jdGV4dChhYWJiYmIpQFszLCA5XSAoYWFiYmJiKQotLS0tLWJyQFs5LCAxM10gKDxicj4pCi0tLS0tI3RleHQoY2NjKUBbMTMsIDE2XSAoY2NjKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiPGJyPmNjY2Q8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgOV0gKGFhYmJiYikKLVs5LCAxM10gKDxicj4pCi1bMTMsIDE3XSAoY2NjZCkKLVsxNywgMjFdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxNywgMjFdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYilAWzMsIDldIChhYWJiYmIpCi0tLS0tYnJAWzksIDEzXSAoPGJyPikKLS0tLS0jdGV4dChjY2NkKUBbMTMsIDE3XSAoY2NjZCkKLQotU291cmNlIDoKLTxwPmFhYmJiYjxicj5jY2NkZTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA5XSAoYWFiYmJiKQotWzksIDEzXSAoPGJyPikKLVsxMywgMThdIChjY2NkZSkKLVsxOCwgMjJdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxOCwgMjJdICg8L3A+KQotLS0tLSN0ZXh0KGFhYmJiYilAWzMsIDldIChhYWJiYmIpCi0tLS0tYnJAWzksIDEzXSAoPGJyPikKLS0tLS0jdGV4dChjY2NkZSlAWzEzLCAxOF0gKGNjY2RlKQotCi1Tb3VyY2UgOgotPHA+YWE8Yj5iYmJiPC9iPjxicj5jY2NkZTwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCA1XSAoYWEpCi1bNSwgOF0gKDxiPikKLVs4LCAxMl0gKGJiYmIpCi1bMTIsIDE2XSAoPC9iPikKLVsxNiwgMjBdICg8YnI+KQotWzIwLCAyNV0gKGNjY2RlKQotWzI1LCAyOV0gKDwvcD4pCi0KLVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkNoZWNrZXIgOiB3YXJuaW5nIDogdmFpbgotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMjUsIDI5XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDVdIChhYSkpCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbMTIsIDE2XSAoPC9iPikKLS0tLS0tLSN0ZXh0KGJiYmIpQFs4LCAxMl0gKGJiYmIpCi0tLS0tYnJAWzE2LCAyMF0gKDxicj4pCi0tLS0tI3RleHQoY2NjZGUpQFsyMCwgMjVdIChjY2NkZSkKLQotU291cmNlIDoKLTxwPmFhPGI+YmJiYjwvYj48YnI+PGk+Y2NjPC9pPmRlPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDVdIChhYSkKLVs1LCA4XSAoPGI+KQotWzgsIDEyXSAoYmJiYikKLVsxMiwgMTZdICg8L2I+KQotWzE2LCAyMF0gKDxicj4pCi1bMjAsIDIzXSAoPGk+KQotWzIzLCAyNl0gKGNjYykKLVsyNiwgMzBdICg8L2k+KQotWzMwLCAzMl0gKGRlKQotWzMyLCAzNl0gKDwvcD4pCi0KLVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkNoZWNrZXIgOiB3YXJuaW5nIDogdmFpbgotU3RydWN0dXJlZERvY3VtZW50UmVnaW9uQ2hlY2tlciA6IHdhcm5pbmcgOiB2YWluCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFszMiwgMzZdICg8L3A+KQotLS0tLSN0ZXh0KGFhKUBbMyw1XShbMywgNV0gKGFhKSkKLS0tLS1iL2JAWzUsIDhdICg8Yj4pQFsxMiwgMTZdICg8L2I+KQotLS0tLS0tI3RleHQoYmJiYilAWzgsIDEyXSAoYmJiYikKLS0tLS1ickBbMTYsIDIwXSAoPGJyPikKLS0tLS1pL2lAWzIwLCAyM10gKDxpPilAWzI2LCAzMF0gKDwvaT4pCi0tLS0tLS0jdGV4dChjY2MpQFsyMywgMjZdIChjY2MpCi0tLS0tI3RleHQoZGUpQFszMCwzMl0oWzMwLCAzMl0gKGRlKSkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Ni50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q2LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjkxNzVmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q2LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q2Ci1Tb3VyY2UgOgotPHA+YWFiYmJiY2NjPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDEyXSAoYWFiYmJiY2NjKQotWzEyLCAxNl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzEyLCAxNl0gKDwvcD4pCi0tLS0tI3RleHQoYWEpQFszLDVdKFszLCAxMl0gKGFhYmJiYmNjYykpCi0tLS0tI3RleHQoYmJiYilAWzUsOV0oWzMsIDEyXSAoYWFiYmJiY2NjKSkKLS0tLS0jdGV4dChjY2MpQFs5LDEyXShbMywgMTJdIChhYWJiYmJjY2MpKQotCi1Tb3VyY2UgOgotPHA+YWFiYmJiZGNjYzwvcD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxwPikKLVszLCAxM10gKGFhYmJiYmRjY2MpCi1bMTMsIDE3XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTMsIDE3XSAoPC9wPikKLS0tLS0jdGV4dChhYSlAWzMsNV0oWzMsIDEzXSAoYWFiYmJiZGNjYykpCi0tLS0tI3RleHQoYmJiYmQpQFs1LDEwXShbMywgMTNdIChhYWJiYmJkY2NjKSkKLS0tLS0jdGV4dChjY2MpQFsxMCwxM10oWzMsIDEzXSAoYWFiYmJiZGNjYykpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuU3BsaXRUZXh0VGVzdDcudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Ny50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMzllNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0Ny50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0NwotU291cmNlIDoKLTxwPmFhYWFiYmJiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDExXSAoYWFhYWJiYmIpCi1bMTEsIDE1XSAoPC9wPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tcC9wQFswLCAzXSAoPHA+KUBbMTEsIDE1XSAoPC9wPikKLS0tLS0jdGV4dChhYWFhKUBbMyw3XShbMywgMTFdIChhYWFhYmJiYikpCi0tLS0tI3RleHQoYmJiYilAWzcsMTFdKFszLCAxMV0gKGFhYWFiYmJiKSkKLQotU291cmNlIDoKLTxwPmFhYWJiPC9wPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPHA+KQotWzMsIDhdIChhYWFiYikKLVs4LCAxMl0gKDwvcD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLXAvcEBbMCwgM10gKDxwPilAWzgsIDEyXSAoPC9wPikKLS0tLS0jdGV4dChhYWFiYilAWzMsIDhdIChhYWFiYikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0OC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q4LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGU0ZTc4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q4LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q4Ci1Tb3VyY2UgOgotPHA+YWFhYWJiYmI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgMTFdIChhYWFhYmJiYikKLVsxMSwgMTVdICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFsxMSwgMTVdICg8L3A+KQotLS0tLSN0ZXh0KGFhYWEpQFszLDddKFszLCAxMV0gKGFhYWFiYmJiKSkKLS0tLS0jdGV4dChiYmJiKUBbNywxMV0oWzMsIDExXSAoYWFhYWJiYmIpKQotCi1Tb3VyY2UgOgotPHA+YWI8L3A+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8cD4pCi1bMywgNV0gKGFiKQotWzUsIDldICg8L3A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1wL3BAWzAsIDNdICg8cD4pQFs1LCA5XSAoPC9wPikKLS0tLS0jdGV4dChhYilAWzMsIDVdIChhYikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UYWJsZVRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UYWJsZVRlc3QudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODRlYmRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGFibGVUZXN0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UYWJsZVRlc3QKLVNvdXJjZSA6Ci08aHRtbD48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTNdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFs2LCAxM10gKDwvaHRtbD4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxOV0gKDwvYm9keT4pCi1bMTksIDI2XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMTksIDI2XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMTIsIDE5XSAoPC9ib2R5PikKLQotU291cmNlIDoKLTxodG1sPjxib2R5Pjx0YWJsZSBib3JkZXI9IjEiPjx0cj48dGQ+PC90ZD48dGQ+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48dGQ+PC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMzBdICg8dGFibGUgYm9yZGVyPSIxIj4pCi1bMzAsIDM0XSAoPHRyPikKLVszNCwgMzhdICg8dGQ+KQotWzM4LCA0M10gKDwvdGQ+KQotWzQzLCA0N10gKDx0ZD4pCi1bNDcsIDUyXSAoPC90ZD4pCi1bNTIsIDU3XSAoPC90cj4pCi1bNTcsIDYxXSAoPHRyPikKLVs2MSwgNjVdICg8dGQ+KQotWzY1LCA3MF0gKDwvdGQ+KQotWzcwLCA3NF0gKDx0ZD4pCi1bNzQsIDc5XSAoPC90ZD4pCi1bNzksIDg0XSAoPC90cj4pCi1bODQsIDkyXSAoPC90YWJsZT4pCi1bOTIsIDk5XSAoPC9ib2R5PikKLVs5OSwgMTA2XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbOTksIDEwNl0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzkyLCA5OV0gKDwvYm9keT4pCi0tLS0tLS10YWJsZS90YWJsZUBbMTIsIDMwXSAoPHRhYmxlIGJvcmRlciYjNjE7IjEiPilAWzg0LCA5Ml0gKDwvdGFibGU+KQotLS0tLS0tLS10ci90ckBbMzAsIDM0XSAoPHRyPilAWzUyLCA1N10gKDwvdHI+KQotLS0tLS0tLS0tLXRkL3RkQFszNCwgMzhdICg8dGQ+KUBbMzgsIDQzXSAoPC90ZD4pCi0tLS0tLS0tLS0tdGQvdGRAWzQzLCA0N10gKDx0ZD4pQFs0NywgNTJdICg8L3RkPikKLS0tLS0tLS0tdHIvdHJAWzU3LCA2MV0gKDx0cj4pQFs3OSwgODRdICg8L3RyPikKLS0tLS0tLS0tLS10ZC90ZEBbNjEsIDY1XSAoPHRkPilAWzY1LCA3MF0gKDwvdGQ+KQotLS0tLS0tLS0tLXRkL3RkQFs3MCwgNzRdICg8dGQ+KUBbNzQsIDc5XSAoPC90ZD4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48dGFibGUgYm9yZGVyPSIxIj48dHI+PHRkPjwvdGQ+PHRkPjwvdGQ+PC90cj48dHI+PHRkPjwvdGQ+PHRkPjxmb250IGNvbG9yPSJyZWQiPnRleHQ8L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMzBdICg8dGFibGUgYm9yZGVyPSIxIj4pCi1bMzAsIDM0XSAoPHRyPikKLVszNCwgMzhdICg8dGQ+KQotWzM4LCA0M10gKDwvdGQ+KQotWzQzLCA0N10gKDx0ZD4pCi1bNDcsIDUyXSAoPC90ZD4pCi1bNTIsIDU3XSAoPC90cj4pCi1bNTcsIDYxXSAoPHRyPikKLVs2MSwgNjVdICg8dGQ+KQotWzY1LCA3MF0gKDwvdGQ+KQotWzcwLCA3NF0gKDx0ZD4pCi1bNzQsIDkyXSAoPGZvbnQgY29sb3I9InJlZCI+KQotWzkyLCA5Nl0gKHRleHQpCi1bOTYsIDEwM10gKDwvZm9udD4pCi1bMTAzLCAxMDhdICg8L3RkPikKLVsxMDgsIDExM10gKDwvdHI+KQotWzExMywgMTIxXSAoPC90YWJsZT4pCi1bMTIxLCAxMjhdICg8L2JvZHk+KQotWzEyOCwgMTM1XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMTI4LCAxMzVdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFsxMjEsIDEyOF0gKDwvYm9keT4pCi0tLS0tLS10YWJsZS90YWJsZUBbMTIsIDMwXSAoPHRhYmxlIGJvcmRlciYjNjE7IjEiPilAWzExMywgMTIxXSAoPC90YWJsZT4pCi0tLS0tLS0tLXRyL3RyQFszMCwgMzRdICg8dHI+KUBbNTIsIDU3XSAoPC90cj4pCi0tLS0tLS0tLS0tdGQvdGRAWzM0LCAzOF0gKDx0ZD4pQFszOCwgNDNdICg8L3RkPikKLS0tLS0tLS0tLS10ZC90ZEBbNDMsIDQ3XSAoPHRkPilAWzQ3LCA1Ml0gKDwvdGQ+KQotLS0tLS0tLS10ci90ckBbNTcsIDYxXSAoPHRyPilAWzEwOCwgMTEzXSAoPC90cj4pCi0tLS0tLS0tLS0tdGQvdGRAWzYxLCA2NV0gKDx0ZD4pQFs2NSwgNzBdICg8L3RkPikKLS0tLS0tLS0tLS10ZC90ZEBbNzAsIDc0XSAoPHRkPilAWzEwMywgMTA4XSAoPC90ZD4pCi0tLS0tLS0tLS0tLS1mb250L2ZvbnRAWzc0LCA5Ml0gKDxmb250IGNvbG9yJiM2MTsicmVkIj4pQFs5NiwgMTAzXSAoPC9mb250PikKLS0tLS0tLS0tLS0tLS0tI3RleHQodGV4dClAWzkyLCA5Nl0gKHRleHQpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4OTJjZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdAotU291cmNlIDoKLTxhPmhlbGxvICZhbXA7bHQ7PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDldIChoZWxsbyApCi1bOSwgMTRdICgmYW1wOykKLVsxNCwgMTddIChsdDspCi1bMTcsIDIxXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTcsIDIxXSAoPC9hPikKLS0tLS0jdGV4dChoZWxsbyAmbHQ7KUB7WzMsIDldIChoZWxsbyApLFs5LCAxNF0gKCZhbXA7KSxbMTQsIDE3XSAobHQ7KX0KLQotaGVsbG8gJmx0OwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDIudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjJiYTUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0MgotU291cmNlIDoKLTxhPmhlbGxvICZhbXA7bHQ7PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDldIChoZWxsbyApCi1bOSwgMTRdICgmYW1wOykKLVsxNCwgMTddIChsdDspCi1bMTcsIDIxXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTcsIDIxXSAoPC9hPikKLS0tLS0jdGV4dChoZWxsbyAmbHQ7KUB7WzMsIDldIChoZWxsbyApLFs5LCAxNF0gKCZhbXA7KSxbMTQsIDE3XSAobHQ7KX0KLQotaGVsbG8gJmx0OwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDMudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjA0YTNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRleHRUZXN0MwotSW52YWxpZCBjaGFyYWN0ZXIgKCc8JykgZm91bmQKLVNvdXJjZSA6Ci08YT50ZXh0PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDddICh0ZXh0KQotWzcsIDExXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNywgMTFdICg8L2E+KQotLS0tLSN0ZXh0KHRleHQpQFszLCA3XSAodGV4dCkKLQotU291cmNlIDoKLTxhPmhlbGxvICZsdDs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKGhlbGxvICkKLVs5LCAxM10gKCZsdDspCi1bMTMsIDE3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTMsIDE3XSAoPC9hPikKLS0tLS0jdGV4dChoZWxsbyA8KUB7WzMsIDldIChoZWxsbyApLFs5LCAxM10gKCZsdDspfQotCi1JbnZhbGlkIGNoYXJhY3RlciAoJyYnKSBmb3VuZAotU291cmNlIDoKLTxhPmhlbGxvICZsdDs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKGhlbGxvICkKLVs5LCAxM10gKCZsdDspCi1bMTMsIDE3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTMsIDE3XSAoPC9hPikKLS0tLS0jdGV4dChoZWxsbyA8KUB7WzMsIDldIChoZWxsbyApLFs5LCAxM10gKCZsdDspfQotCi1Tb3VyY2UgOgotPGE+aGVsbG8gJiM2NTs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKGhlbGxvICkKLVs5LCAxNF0gKCYjNjU7KQotWzE0LCAxOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzE0LCAxOF0gKDwvYT4pCi0tLS0tI3RleHQoaGVsbG8gQSlAe1szLCA5XSAoaGVsbG8gKSxbOSwgMTRdICgmIzY1Oyl9Ci0KLUludmFsaWQgY2hhcmFjdGVyICgnJicpIGZvdW5kCi1Tb3VyY2UgOgotPGE+aGVsbG8gJiM2NTs8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgOV0gKGhlbGxvICkKLVs5LCAxNF0gKCYjNjU7KQotWzE0LCAxOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzE0LCAxOF0gKDwvYT4pCi0tLS0tI3RleHQoaGVsbG8gQSlAe1szLCA5XSAoaGVsbG8gKSxbOSwgMTRdICgmIzY1Oyl9Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZmU5ODAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxOTcgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QKLVNvdXJjZSA6Ci08aHRtbD48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTNdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFs2LCAxM10gKDwvaHRtbD4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxOV0gKDwvYm9keT4pCi1bMTksIDI2XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMTksIDI2XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMTIsIDE5XSAoPC9ib2R5PikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPjwvcD48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxNV0gKDxwPikKLVsxNSwgMTldICg8L3A+KQotWzE5LCAyNl0gKDwvYm9keT4pCi1bMjYsIDMzXSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMjYsIDMzXSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMTksIDI2XSAoPC9ib2R5PikKLS0tLS0tLXAvcEBbMTIsIDE1XSAoPHA+KUBbMTUsIDE5XSAoPC9wPikKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPnRleHQ8L3A+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTVdICg8cD4pCi1bMTUsIDE5XSAodGV4dCkKLVsxOSwgMjNdICg8L3A+KQotWzIzLCAzMF0gKDwvYm9keT4pCi1bMzAsIDM3XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMzAsIDM3XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMjMsIDMwXSAoPC9ib2R5PikKLS0tLS0tLXAvcEBbMTIsIDE1XSAoPHA+KUBbMTksIDIzXSAoPC9wPikKLS0tLS0tLS0tI3RleHQodGV4dClAWzE1LCAxOV0gKHRleHQpCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48cD48YnI+dGV4dDwvcD48L2JvZHk+PC9odG1sPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPGh0bWw+KQotWzYsIDEyXSAoPGJvZHk+KQotWzEyLCAxNV0gKDxwPikKLVsxNSwgMTldICg8YnI+KQotWzE5LCAyM10gKHRleHQpCi1bMjMsIDI3XSAoPC9wPikKLVsyNywgMzRdICg8L2JvZHk+KQotWzM0LCA0MV0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzM0LCA0MV0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzI3LCAzNF0gKDwvYm9keT4pCi0tLS0tLS1wL3BAWzEyLCAxNV0gKDxwPilAWzIzLCAyN10gKDwvcD4pCi0tLS0tLS0tLWJyQFsxNSwgMTldICg8YnI+KQotLS0tLS0tLS0jdGV4dCh0ZXh0KUBbMTksIDIzXSAodGV4dCkKLQotU291cmNlIDoKLTxodG1sPjxib2R5PjxwPjxicj50ZXh0PGltZz48L3A+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTVdICg8cD4pCi1bMTUsIDE5XSAoPGJyPikKLVsxOSwgMjNdICh0ZXh0KQotWzIzLCAyOF0gKDxpbWc+KQotWzI4LCAzMl0gKDwvcD4pCi1bMzIsIDM5XSAoPC9ib2R5PikKLVszOSwgNDZdICg8L2h0bWw+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1odG1sL2h0bWxAWzAsIDZdICg8aHRtbD4pQFszOSwgNDZdICg8L2h0bWw+KQotLS0tLWJvZHkvYm9keUBbNiwgMTJdICg8Ym9keT4pQFszMiwgMzldICg8L2JvZHk+KQotLS0tLS0tcC9wQFsxMiwgMTVdICg8cD4pQFsyOCwgMzJdICg8L3A+KQotLS0tLS0tLS1ickBbMTUsIDE5XSAoPGJyPikKLS0tLS0tLS0tI3RleHQodGV4dClAWzE5LCAyM10gKHRleHQpCi0tLS0tLS0tLWltZ0BbMjMsIDI4XSAoPGltZz4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48cD48YnI+PGltZz48L3A+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTVdICg8cD4pCi1bMTUsIDE5XSAoPGJyPikKLVsxOSwgMjRdICg8aW1nPikKLVsyNCwgMjhdICg8L3A+KQotWzI4LCAzNV0gKDwvYm9keT4pCi1bMzUsIDQyXSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMzUsIDQyXSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMjgsIDM1XSAoPC9ib2R5PikKLS0tLS0tLXAvcEBbMTIsIDE1XSAoPHA+KUBbMjQsIDI4XSAoPC9wPikKLS0tLS0tLS0tYnJAWzE1LCAxOV0gKDxicj4pCi0tLS0tLS0tLWltZ0BbMTksIDI0XSAoPGltZz4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48cD48YnI+dGV4dDxpbWc+PC9wPjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE1XSAoPHA+KQotWzE1LCAxOV0gKDxicj4pCi1bMTksIDIzXSAodGV4dCkKLVsyMywgMjhdICg8aW1nPikKLVsyOCwgMzJdICg8L3A+KQotWzMyLCAzOV0gKDwvYm9keT4pCi1bMzksIDQ2XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMzksIDQ2XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMzIsIDM5XSAoPC9ib2R5PikKLS0tLS0tLXAvcEBbMTIsIDE1XSAoPHA+KUBbMjgsIDMyXSAoPC9wPikKLS0tLS0tLS0tYnJAWzE1LCAxOV0gKDxicj4pCi0tLS0tLS0tLSN0ZXh0KHRleHQpQFsxOSwgMjNdICh0ZXh0KQotLS0tLS0tLS1pbWdAWzIzLCAyOF0gKDxpbWc+KQotCi1Tb3VyY2UgOgotPGh0bWw+PGJvZHk+PC9ib2R5PjwvaHRtbD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgNl0gKDxodG1sPikKLVs2LCAxMl0gKDxib2R5PikKLVsxMiwgMTldICg8L2JvZHk+KQotWzE5LCAyNl0gKDwvaHRtbD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWh0bWwvaHRtbEBbMCwgNl0gKDxodG1sPilAWzE5LCAyNl0gKDwvaHRtbD4pCi0tLS0tYm9keS9ib2R5QFs2LCAxMl0gKDxib2R5PilAWzEyLCAxOV0gKDwvYm9keT4pCi0KLVNvdXJjZSA6Ci08aHRtbD48Ym9keT48cD48YnI+dGV4dDxpbWc+PC9wPjwvYm9keT48L2h0bWw+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8aHRtbD4pCi1bNiwgMTJdICg8Ym9keT4pCi1bMTIsIDE1XSAoPHA+KQotWzE1LCAxOV0gKDxicj4pCi1bMTksIDIzXSAodGV4dCkKLVsyMywgMjhdICg8aW1nPikKLVsyOCwgMzJdICg8L3A+KQotWzMyLCAzOV0gKDwvYm9keT4pCi1bMzksIDQ2XSAoPC9odG1sPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0taHRtbC9odG1sQFswLCA2XSAoPGh0bWw+KUBbMzksIDQ2XSAoPC9odG1sPikKLS0tLS1ib2R5L2JvZHlAWzYsIDEyXSAoPGJvZHk+KUBbMzIsIDM5XSAoPC9ib2R5PikKLS0tLS0tLXAvcEBbMTIsIDE1XSAoPHA+KUBbMjgsIDMyXSAoPC9wPikKLS0tLS0tLS0tYnJAWzE1LCAxOV0gKDxicj4pCi0tLS0tLS0tLSN0ZXh0KHRleHQpQFsxOSwgMjNdICh0ZXh0KQotLS0tLS0tLS1pbWdAWzIzLCAyOF0gKDxpbWc+KQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTAudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEwLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhmN2RhMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTAudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMAotU291cmNlIDoKLTxhIGI9ImMiPjxiPjwvYj48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDldICg8YSBiPSJjIj4pCi1bOSwgMTJdICg8Yj4pCi1bMTIsIDE2XSAoPC9iPikKLVsxNiwgMjBdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDldICg8YSBiJiM2MTsiYyI+KUBbMTYsIDIwXSAoPC9hPikKLS0tLS1iL2JAWzksIDEyXSAoPGI+KUBbMTIsIDE2XSAoPC9iPikKLQotSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjoKLTxiPgotMCg8KXRydWUKLTAoYil0cnVlCi0wKD4pdHJ1ZQotCi1Tb3VyY2UgOgotPGEgYj0iYyI+PGIgYz0iZCI+PC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgOV0gKDxhIGI9ImMiPikKLVs5LCAxOF0gKDxiIGM9ImQiPikKLVsxOCwgMjJdICg8L2I+KQotWzIyLCAyNl0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgOV0gKDxhIGImIzYxOyJjIj4pQFsyMiwgMjZdICg8L2E+KQotLS0tLWIvYkBbOSwgMThdICg8YiBjJiM2MTsiZCI+KUBbMTgsIDIyXSAoPC9iPikKLQotSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjoKLTxiIGM9ImQiPgotMCg8KXRydWUKLTAoYil0cnVlCi0wKGMpdHJ1ZQotMCg9KXRydWUKLTAoImQiKXRydWUKLTAoPil0cnVlCi0KLVNvdXJjZSA6Ci08YSBiPSJjZCI+PGIgYz0iZCI+PC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMTBdICg8YSBiPSJjZCI+KQotWzEwLCAxOV0gKDxiIGM9ImQiPikKLVsxOSwgMjNdICg8L2I+KQotWzIzLCAyN10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgMTBdICg8YSBiJiM2MTsiY2QiPilAWzIzLCAyN10gKDwvYT4pCi0tLS0tYi9iQFsxMCwgMTldICg8YiBjJiM2MTsiZCI+KUBbMTksIDIzXSAoPC9iPikKLQotSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjoKLTxiIGM9ImQiPgotMCg8KXRydWUKLTAoYil0cnVlCi0wKGMpdHJ1ZQotMCg9KXRydWUKLTAoImQiKXRydWUKLTAoPil0cnVlCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMS50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTEudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTg4Y2IzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDExCi1Tb3VyY2UgOgotPGE+YjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoYikKLVs0LCA4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNCwgOF0gKDwvYT4pCi0tLS0tI3RleHQoYilAWzMsIDRdIChiKQotCi1Tb3VyY2UgOgotPGE+YjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoYikKLVs0LCA4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNCwgOF0gKDwvYT4pCi0tLS0tI3RleHQoYilAWzMsIDRdIChiKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTIudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODExYThmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMgotU291cmNlIDoKLTxhPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMywgN10gKDwvYT4pCi0KLVNvdXJjZSA6Ci08YT48L2E+PGE+PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDddICg8L2E+KQotWzcsIDEwXSAoPGE+KQotWzEwLCAxNF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzMsIDddICg8L2E+KQotLS1hL2FAWzcsIDEwXSAoPGE+KUBbMTAsIDE0XSAoPC9hPikKLQotU291cmNlIDoKLTxhPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA3XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMywgN10gKDwvYT4pCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMy50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODU0ZjdlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEzCi1Tb3VyY2UgOgotPGE+Ci08Yj4KLTwvYj4gIDwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA1XSAoCi0pCi1bNSwgOF0gKDxiPikKLVs4LCAxMF0gKAotKQotWzEwLCAxNF0gKDwvYj4pCi1bMTQsIDE2XSAoICApCi1bMTYsIDIwXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTYsIDIwXSAoPC9hPikKLS0tLS0jdGV4dChcclxuKUBbMywgNV0gKFxyXG4pCi0tLS0tYi9iQFs1LCA4XSAoPGI+KUBbMTAsIDE0XSAoPC9iPikKLS0tLS0tLSN0ZXh0KFxyXG4pQFs4LCAxMF0gKFxyXG4pCi0tLS0tI3RleHQoICApQFsxNCwgMTZdICggICkKLQotU291cmNlIDoKLTxhPgotICA8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgN10gKAotICApCi1bNywgMTFdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs3LCAxMV0gKDwvYT4pCi0tLS0tI3RleHQoXHJcbilAWzMsNV0oWzMsIDddIChcclxuICApKQotLS0tLSN0ZXh0KCAgKUBbNSw3XShbMywgN10gKFxyXG4gICkpCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxNC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTZkNWI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxNC50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDE0Ci1Tb3VyY2UgOgotPCU9IGFhYWEgJT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKDwpCi1bMSwgNF0gKCU9ICkKLVs0LCA5XSAoYWFhYSApCi1bOSwgMTBdICglKQotWzEwLCAxMV0gKD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KDwlJiM2MTsgYWFhYSAlPilAe1swLCAxXSAoPCksWzEsIDRdICglJiM2MTsgKSxbNCwgOV0gKGFhYWEgKSxbOSwgMTBdICglKSxbMTAsIDExXSAoPil9Ci0KLVNvdXJjZSA6Ci08JSA9IGFhYWEgJT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgMV0gKDwpCi1bMSwgNV0gKCUgPSApCi1bNSwgMTBdIChhYWFhICkKLVsxMCwgMTFdICglKQotWzExLCAxMl0gKD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLSN0ZXh0KDwlICYjNjE7IGFhYWEgJT4pQHtbMCwgMV0gKDwpLFsxLCA1XSAoJSAmIzYxOyApLFs1LCAxMF0gKGFhYWEgKSxbMTAsIDExXSAoJSksWzExLCAxMl0gKD4pfQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Mi50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Mi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZGNmMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MgotU291cmNlIDoKLTxIVE1MPgotPEhFQUQ+PC9IRUFEPgotPEJPRFk+PC9CT0RZPgotPC9IVE1MPgotCi0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8SFRNTD4pCi1bNiwgOF0gKAotKQotWzgsIDE0XSAoPEhFQUQ+KQotWzE0LCAyMV0gKDwvSEVBRD4pCi1bMjEsIDIzXSAoCi0pCi1bMjMsIDI5XSAoPEJPRFk+KQotWzI5LCAzNl0gKDwvQk9EWT4pCi1bMzYsIDM4XSAoCi0pCi1bMzgsIDQ1XSAoPC9IVE1MPikKLVs0NSwgNDddICgKLSkKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tSFRNTC9IVE1MQFswLCA2XSAoPEhUTUw+KUBbMzgsIDQ1XSAoPC9IVE1MPikKLS0tLS0jdGV4dChcclxuKUBbNiwgOF0gKFxyXG4pCi0tLS0tSEVBRC9IRUFEQFs4LCAxNF0gKDxIRUFEPilAWzE0LCAyMV0gKDwvSEVBRD4pCi0tLS0tI3RleHQoXHJcbilAWzIxLCAyM10gKFxyXG4pCi0tLS0tQk9EWS9CT0RZQFsyMywgMjldICg8Qk9EWT4pQFsyOSwgMzZdICg8L0JPRFk+KQotLS0tLSN0ZXh0KFxyXG4pQFszNiwgMzhdIChcclxuKQotLS0jdGV4dChcclxuKUBbNDUsIDQ3XSAoXHJcbikKLQotU291cmNlIDoKLTxIVE1MPgotPEhFQUQ+Ci08bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IlVwZGF0ZXIgVGVzdCAyIj4KLTwvSEVBRD4KLTxCT0RZPjwvQk9EWT4KLTwvSFRNTD4KLQotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA2XSAoPEhUTUw+KQotWzYsIDhdICgKLSkKLVs4LCAxNF0gKDxIRUFEPikKLVsxNCwgMTZdICgKLSkKLVsxNiwgNjRdICg8bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IlVwZGF0ZXIgVGVzdCAyIj4pCi1bNjQsIDY2XSAoCi0pCi1bNjYsIDczXSAoPC9IRUFEPikKLVs3MywgNzVdICgKLSkKLVs3NSwgODFdICg8Qk9EWT4pCi1bODEsIDg4XSAoPC9CT0RZPikKLVs4OCwgOTBdICgKLSkKLVs5MCwgOTddICg8L0hUTUw+KQotWzk3LCA5OV0gKAotKQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1IVE1ML0hUTUxAWzAsIDZdICg8SFRNTD4pQFs5MCwgOTddICg8L0hUTUw+KQotLS0tLSN0ZXh0KFxyXG4pQFs2LCA4XSAoXHJcbikKLS0tLS1IRUFEL0hFQURAWzgsIDE0XSAoPEhFQUQ+KUBbNjYsIDczXSAoPC9IRUFEPikKLS0tLS0tLSN0ZXh0KFxyXG4pQFsxNCwgMTZdIChcclxuKQotLS0tLS0tbWV0YUBbMTYsIDY0XSAoPG1ldGEgbmFtZSYjNjE7IkdFTkVSQVRPUiIgY29udGVudCYjNjE7IlVwZGF0ZXIgVGVzdCAyIj4pCi0tLS0tLS0jdGV4dChcclxuKUBbNjQsIDY2XSAoXHJcbikKLS0tLS0jdGV4dChcclxuKUBbNzMsIDc1XSAoXHJcbikKLS0tLS1CT0RZL0JPRFlAWzc1LCA4MV0gKDxCT0RZPilAWzgxLCA4OF0gKDwvQk9EWT4pCi0tLS0tI3RleHQoXHJcbilAWzg4LCA5MF0gKFxyXG4pCi0tLSN0ZXh0KFxyXG4pQFs5NywgOTldIChcclxuKQotCi1Tb3VyY2UgOgotPEhUTUw+Ci08SEVBRD4KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iVXBkYXRlciBUZXN0IDIiPgotPHRpdGxlPjwvdGl0bGU+PC9IRUFEPgotPEJPRFk+PC9CT0RZPgotPC9IVE1MPgotCi0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDZdICg8SFRNTD4pCi1bNiwgOF0gKAotKQotWzgsIDE0XSAoPEhFQUQ+KQotWzE0LCAxNl0gKAotKQotWzE2LCA2NF0gKDxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iVXBkYXRlciBUZXN0IDIiPikKLVs2NCwgNjZdICgKLSkKLVs2NiwgNzNdICg8dGl0bGU+KQotWzczLCA4MV0gKDwvdGl0bGU+KQotWzgxLCA4OF0gKDwvSEVBRD4pCi1bODgsIDkwXSAoCi0pCi1bOTAsIDk2XSAoPEJPRFk+KQotWzk2LCAxMDNdICg8L0JPRFk+KQotWzEwMywgMTA1XSAoCi0pCi1bMTA1LCAxMTJdICg8L0hUTUw+KQotWzExMiwgMTE0XSAoCi0pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLUhUTUwvSFRNTEBbMCwgNl0gKDxIVE1MPilAWzEwNSwgMTEyXSAoPC9IVE1MPikKLS0tLS0jdGV4dChcclxuKUBbNiwgOF0gKFxyXG4pCi0tLS0tSEVBRC9IRUFEQFs4LCAxNF0gKDxIRUFEPilAWzgxLCA4OF0gKDwvSEVBRD4pCi0tLS0tLS0jdGV4dChcclxuKUBbMTQsIDE2XSAoXHJcbikKLS0tLS0tLW1ldGFAWzE2LCA2NF0gKDxtZXRhIG5hbWUmIzYxOyJHRU5FUkFUT1IiIGNvbnRlbnQmIzYxOyJVcGRhdGVyIFRlc3QgMiI+KQotLS0tLS0tI3RleHQoXHJcbilAWzY0LCA2Nl0gKFxyXG4pCi0tLS0tLS10aXRsZS90aXRsZUBbNjYsIDczXSAoPHRpdGxlPilAWzczLCA4MV0gKDwvdGl0bGU+KQotLS0tLS0tLS0jdGV4dCgpCi0tLS0tI3RleHQoXHJcbilAWzg4LCA5MF0gKFxyXG4pCi0tLS0tQk9EWS9CT0RZQFs5MCwgOTZdICg8Qk9EWT4pQFs5NiwgMTAzXSAoPC9CT0RZPikKLS0tLS0jdGV4dChcclxuKUBbMTAzLCAxMDVdIChcclxuKQotLS0jdGV4dChcclxuKUBbMTEyLCAxMTRdIChcclxuKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0My50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0My50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhYzczYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QzCi1Tb3VyY2UgOgotPGE+PGI+PC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA2XSAoPGI+KQotWzYsIDEwXSAoPC9iPikKLVsxMCwgMTRdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFsxMCwgMTRdICg8L2E+KQotLS0tLWIvYkBbMywgNl0gKDxiPilAWzYsIDEwXSAoPC9iPikKLQotU291cmNlIDoKLTxhPgotPGI+PC9iPjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgN10gKDxiPikKLVs3LCAxMV0gKDwvYj4pCi1bMTEsIDE1XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTEsIDE1XSAoPC9hPikKLS0tLS0jdGV4dChcbilAWzMsIDRdIChcbikKLS0tLS1iL2JAWzQsIDddICg8Yj4pQFs3LCAxMV0gKDwvYj4pCi0KLVNvdXJjZSA6Ci08YT4KLTxiPjwvYj4KLTwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoCi0pCi1bNCwgN10gKDxiPikKLVs3LCAxMV0gKDwvYj4pCi1bMTEsIDEyXSAoCi0pCi1bMTIsIDE2XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbMTIsIDE2XSAoPC9hPikKLS0tLS0jdGV4dChcbilAWzMsIDRdIChcbikKLS0tLS1iL2JAWzQsIDddICg8Yj4pQFs3LCAxMV0gKDwvYj4pCi0tLS0tI3RleHQoXG4pQFsxMSwgMTJdIChcbikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDQudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDQudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTBkMDI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q0LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NAotU291cmNlIDoKLTxhPmI8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKGIpCi1bNCwgOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzQsIDhdICg8L2E+KQotLS0tLSN0ZXh0KGIpQFszLCA0XSAoYikKLQotU291cmNlIDoKLTxhPmI8L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgNF0gKGIpCi1bNCwgOF0gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzQsIDhdICg8L2E+KQotLS0tLSN0ZXh0KGIpQFszLCA0XSAoYikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDUudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWUxM2VhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q1LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI5ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NQotU291cmNlIDoKLTxhPiZhcG9zOzwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA5XSAoJmFwb3M7KQotWzksIDEzXSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbOSwgMTNdICg8L2E+KQotLS0tLSN0ZXh0KCcpQFszLCA5XSAoJmFwb3M7KQotCi1Tb3VyY2UgOgotPGE+JmFwb3M7PC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDldICgmYXBvczspCi1bOSwgMTNdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs5LCAxM10gKDwvYT4pCi0tLS0tI3RleHQoJylAWzMsIDldICgmYXBvczspCi0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q2LnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q2LnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjljNGQ3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Ni50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDYKLVNvdXJjZSA6Ci08YT5iPC9hPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPGE+KQotWzMsIDRdIChiKQotWzQsIDhdICg8L2E+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1hL2FAWzAsIDNdICg8YT4pQFs0LCA4XSAoPC9hPikKLS0tLS0jdGV4dChiKUBbMywgNF0gKGIpCi0KLVNvdXJjZSA6Ci08YT48L2E+Ci0KLQotU3RydWN0dXJlZERvY3VtZW50IFJlZ2lvbnMgOgotWzAsIDNdICg8YT4pCi1bMywgN10gKDwvYT4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLWEvYUBbMCwgM10gKDxhPilAWzMsIDddICg8L2E+KQotCi1Tb3VyY2UgOgotPGE+YjwvYT4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxhPikKLVszLCA0XSAoYikKLVs0LCA4XSAoPC9hPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tYS9hQFswLCAzXSAoPGE+KUBbNCwgOF0gKDwvYT4pCi0tLS0tI3RleHQoYilAWzMsIDRdIChiKQotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Ny50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL1BhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3L29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0Ny50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNGE0ODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDcudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q3Ci1Tb3VyY2UgOgotPFA+PEI+PC9CPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxQPikKLVszLCA2XSAoPEI+KQotWzYsIDEwXSAoPC9CPikKLVsxMCwgMTRdICg8L1A+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1QL1BAWzAsIDNdICg8UD4pQFsxMCwgMTRdICg8L1A+KQotLS0tLUIvQkBbMywgNl0gKDxCPilAWzYsIDEwXSAoPC9CPikKLQotU291cmNlIDoKLTxQPjxCPjwvQj48Qj48L0I+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPFA+KQotWzMsIDZdICg8Qj4pCi1bNiwgMTBdICg8L0I+KQotWzEwLCAxM10gKDxCPikKLVsxMywgMTddICg8L0I+KQotWzE3LCAyMV0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLVAvUEBbMCwgM10gKDxQPilAWzE3LCAyMV0gKDwvUD4pCi0tLS0tQi9CQFszLCA2XSAoPEI+KUBbNiwgMTBdICg8L0I+KQotLS0tLUIvQkBbMTAsIDEzXSAoPEI+KUBbMTMsIDE3XSAoPC9CPikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDgudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDgudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWY2ZTMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q4LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OAotU291cmNlIDoKLTxQPjwvUD4KLQotCi1TdHJ1Y3R1cmVkRG9jdW1lbnQgUmVnaW9ucyA6Ci1bMCwgM10gKDxQPikKLVszLCA3XSAoPC9QPikKLQotVHJlZSA6Ci0jZG9jdW1lbnQKLS0tUC9QQFswLCAzXSAoPFA+KUBbMywgN10gKDwvUD4pCi0KLVNvdXJjZSA6Ci08UD48L1A+PFA+PC9QPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCAzXSAoPFA+KQotWzMsIDddICg8L1A+KQotWzcsIDEwXSAoPFA+KQotWzEwLCAxNF0gKDwvUD4pCi0KLVRyZWUgOgotI2RvY3VtZW50Ci0tLVAvUEBbMCwgM10gKDxQPilAWzMsIDddICg8L1A+KQotLS1QL1BAWzcsIDEwXSAoPFA+KUBbMTAsIDE0XSAoPC9QPikKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDkudHh0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9QYXJzZXJSZXN1bHRzMjAwNC0xMi0xMC0yMi0yMy00Ny9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDkudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTRhOGFkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvUGFyc2VyUmVzdWx0czIwMDQtMTItMTAtMjItMjMtNDcvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q5LnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLW9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OQotU291cmNlIDoKLTxzdHlsZT48L3N0eWxlPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA3XSAoPHN0eWxlPikKLVs3LCAxNV0gKDwvc3R5bGU+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1zdHlsZS9zdHlsZUBbMCwgN10gKDxzdHlsZT4pQFs3LCAxNV0gKDwvc3R5bGU+KQotCi1Tb3VyY2UgOgotPHN0eWxlPnA8L3N0eWxlPgotCi0KLVN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoKLVswLCA3XSAoPHN0eWxlPikKLVs3LCA4XSAocCkKLVs4LCAxNl0gKDwvc3R5bGU+KQotCi1UcmVlIDoKLSNkb2N1bWVudAotLS1zdHlsZS9zdHlsZUBbMCwgN10gKDxzdHlsZT4pQFs4LCAxNl0gKDwvc3R5bGU+KQotLS0tLSN0ZXh0KHApQFs3LCA4XSAocCkKLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9hTm90ZU9uUGFyc2VyUmVzdWx0c0RpcmVjdG9yaWVzLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYU5vdGVPblBhcnNlclJlc3VsdHNEaXJlY3Rvcmllcy50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhlMjQxODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9hTm90ZU9uUGFyc2VyUmVzdWx0c0RpcmVjdG9yaWVzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLVRoZXNlIG5vdGVzIHBlcnRhaW4gdG8gdGhlIHYyMDA0MTIxMF8yMzAwIHZlcnNpb24gCi1pbiBDVlMgcmVwb3NpdG9yeS4gCi0KLU5vdGUsIHRoZSAiMDUtMjQiIGRpcmVjdG9yeSAqc2hvdWxkKiBtYXRjaAotdGhlIHBhcnNlciByZXN1bHRzIGZyb20gcGFyc2VyIG9mIHNhbWUgZGF0ZSwgCi0qYnV0KiBhZnRlciB0cmFuc2l0aW9uIHRvIG9yZy5lY2xpcHNlLCBpdCBzZWVtcyAKLXRoZSBjYXNlIG9mIHRhZ3MgaXMgZGlmZmVyZW50LiBPZGRseSwgc2VlbXMgCi1saWtlIHRoZSBjdXJyZW50IHRyZWF0ZW1lbnQgb2YgY2FzZSBpcyBjb3JyZWN0LCAKLXNvIC4uLiAxMi0xMCBwYXJzZXIgcmVzdWx0cyBzaG91bGQgYmUgdXNlZCBhcyAKLXJlZmVyZW5jZSwgdW5sZXNzIHNvbWUgbmV3IGluc2lnaHQgaXMgZ2FpbmVkLiAKLUl0IGRvZXMgbWF0Y2ggcHJldmlvdXMgdmVyc2lvbiBleGNlcHQgZm9yIGNhc2UuIAotKEFuZCwgdGhlIHByZXZpb3VzIHZlcnNpb24gd2FzIGNoYW5nZWQgImJ5IGhhbmQiIAotdG8gYWNjb21pZGF0ZSB0aGUgdHJhbnNpdGlvbiB0byBvcmcuZWNsaXBzZSkuIAotCi1UT0RPOiB0aGlzIGZpbGUsIGFuZCAwNS0yNCByZWZlcmVuY2UgZGlyZWN0b3J5Ci1jYW4gYmUgZGVsZXRlZCBhcm91bmQgTTMsIG9uY2Ugd2hvbGUgdGVhbSBoYXMgCi1yZXZpZXdlZCBhbmQgY29uZmlkZW50IDEyLTEwIHZlcnNpb24gaXMgY29ycmVjdAotcmVmZXJlbmNlLiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYzU5ODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDIsIDIwMDY8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YWRmNjE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1zb3VyY2UuaHRtbGNvcmV0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuaHRtbGNvcmV0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBodG1sY29yZXRlc3RzLmphcixcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIFBhcnNlclJlc3VsdHMyMDA0LTEyLTEwLTIyLTIzLTQ3LyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4YjM3NzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gSFRNTCBDb3JlIFRlc3RzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzZhZWYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0KLQk8IS0tIGxlYXZlIHRoaXMgZW1wdHkgcGx1Z2luLnhtbCBoZXJlIGZvciBub3csIAotCQliZWNhdXNlIHdlIGRvIGEgZnVua3kgdGhpbmcgCi0JCXRvIGZpbmQgaXQgZHVyaW5nIHRoZSB0ZXN0cyAtLT4KLQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0hUTUxDb3JlVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0hUTUxDb3JlVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMDk1MmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9IVE1MQ29yZVRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubWlzYy5IVE1MQ29yZVByZWZlcmVuY2VzVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1pc2MuSFRNTFRhZ0luZm9UZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubW9kZWwuQlVHMTI0ODM1U2V0U3R5bGVBdHRyaWJ1dGVWYWx1ZVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbC5HZXRPdmVycmlkZVN0eWxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsLk1vZGVsTW9kaWZpY2F0aW9uczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1vZGVsLlRlc3RGb3JOUEVJbkNTU0NyZWF0aW9uOwotCi0KLQotcHVibGljIGNsYXNzIEhUTUxDb3JlVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQotCS8qKgotCSAqIHRvIGdldCBwaWNrZWQgdXAgYnkgQlZUCi0JICogCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBIVE1MQ29yZVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBIVE1MQ29yZVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIkhUTUwgQ29yZSBUZXN0U3VpdGUiKTsKLQotCQlhZGRUZXN0KE1vZGVsUGFyc2VyVGVzdHMuc3VpdGUoKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShIVE1MQ29yZVByZWZlcmVuY2VzVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoSFRNTFRhZ0luZm9UZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShNb2RlbE1vZGlmaWNhdGlvbnMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RGb3JOUEVJbkNTU0NyZWF0aW9uLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShHZXRPdmVycmlkZVN0eWxlVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQlVHMTI0ODM1U2V0U3R5bGVBdHRyaWJ1dGVWYWx1ZVRlc3QuY2xhc3MpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9IVE1MQ29yZVRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0hUTUxDb3JlVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjM3YzAwNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0hUTUxDb3JlVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEhUTUxDb3JlVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBIVE1MQ29yZVRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBIVE1MQ29yZVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMuU1NFTW9kZWxIVE1MVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIEhUTUxDb3JlVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IEhUTUxDb3JlVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFJlc291cmNlQnVuZGxlKCk7Ci0JCXRyeSB7Ci0JCQlyZXR1cm4gKGJ1bmRsZSAhPSBudWxsKSA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleTsKLQkJfQotCQljYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIGUpIHsKLQkJCXJldHVybiBrZXk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICovCi0JcHVibGljIFJlc291cmNlQnVuZGxlIGdldFJlc291cmNlQnVuZGxlKCkgewotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDkxOTRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgY29tLmlibS5pY3UudXRpbC5TdHJpbmdUb2tlbml6ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVN0YXR1czsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlN0YXR1czsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi0vKioKLSAqIFNtYWxsIGNvbnZlbmllbmNlIGNsYXNzIHRvIGxvZyBtZXNzYWdlcyB0byBwbHVnaW4ncyBsb2cgZmlsZSBhbmQgYWxzbywgaWYgZGVzaXJlZCwKLSAqIHRoZSBjb25zb2xlLiBUaGlzIGNsYXNzIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgY2xhc3NlcyBpbiB0aGlzIHBsdWdpbi4gT3RoZXIKLSAqIHBsdWdpbnMgc2hvdWxkIG1ha2UgdGhlaXIgb3duIGNvcHksIHdpdGggYXBwcm9wcmlhdGUgSUQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMb2dnZXIgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fSUQgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0VGSUxURVJfTE9DQVRJT04gPSAiL2RlYnVnL3RyYWNlZmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0sgPSBJU3RhdHVzLk9LOyAvLyAwCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GTyA9IElTdGF0dXMuSU5GTzsgLy8gMQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSBJU3RhdHVzLldBUk5JTkc7IC8vIDIKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IElTdGF0dXMuRVJST1I7IC8vIDQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0RFQlVHID0gMjAwICsgT0s7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT19ERUJVRyA9IDIwMCArIElORk87Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklOR19ERUJVRyA9IDIwMCArIFdBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfREVCVUcgPSAyMDAgKyBFUlJPUjsKLQotCS8qKgotCSAqIEFkZHMgbWVzc2FnZSB0byBsb2cuCi0JICogQHBhcmFtIGxldmVsIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIGFkZCB0byB0aGUgbG9nCi0JICogQHBhcmFtIGV4Y2VwdGlvbiBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGlzIGRlYnVnZ2luZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnZ2luZygpIHsKLQkJcmV0dXJuIFBsYXRmb3JtLmluRGVidWdNb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBjdXJyZW50bHkgdHJhY2luZyBhIGNhdGVnb3J5Ci0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogQHJldHVybiB0cnVlIGlmIHRyYWNpbmcgY2F0ZWdvcnksIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYWNpbmcoU3RyaW5nIGNhdGVnb3J5KSB7Ci0JCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgdHJhY2VGaWx0ZXIgPSBQbGF0Zm9ybS5nZXREZWJ1Z09wdGlvbihQTFVHSU5fSUQgKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL01vZGVsUGFyc2VyVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvTW9kZWxQYXJzZXJUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjUyYTUzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvTW9kZWxQYXJzZXJUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5BdHRyVGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuQ0RBVEFTZWN0aW9uVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5DREFUQVNlY3Rpb25UZXN0MzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Eb2NUeXBlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbGVtZW50VGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRWxlbWVudFRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLkVtcHR5VGV4dFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW1wdHlUZXh0VGVzdDM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuRW50aXR5VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0MzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0NzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0ODsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5FbnRpdHlUZXN0OTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QSVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuUGFyc2VyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0MjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0MzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5QYXJzZXJUZXN0NDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5TcGxpdFRleHRUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q1OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q2OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q3OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlNwbGl0VGV4dFRlc3Q4OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlRhYmxlVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5UZXh0VGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVGV4dFRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxMTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDEyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0MTM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QxNDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3QzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q2OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyLlVwZGF0ZXJUZXN0NzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5VcGRhdGVyVGVzdDg7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXIuVXBkYXRlclRlc3Q5OwotCi0KLQotcHVibGljIGNsYXNzIE1vZGVsUGFyc2VyVGVzdHMgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBNb2RlbFBhcnNlclRlc3RzKCk7Ci0JfQotCi0JcHVibGljIE1vZGVsUGFyc2VyVGVzdHMoKSB7Ci0JCXN1cGVyKCJNb2RlbFBhcnNlclRlc3RzIik7Ci0KLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFBhcnNlclRlc3QuY2xhc3MsICJQYXJzZXJUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoUGFyc2VyVGVzdDIuY2xhc3MsICJQYXJzZXJUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFBhcnNlclRlc3QzLmNsYXNzLCAiUGFyc2VyVGVzdDMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShQYXJzZXJUZXN0NC5jbGFzcywgIlBhcnNlclRlc3Q0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QuY2xhc3MsICJVcGRhdGVyVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0Mi5jbGFzcywgIlVwZGF0ZXJUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0My5jbGFzcywgIlVwZGF0ZXJUZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0NC5jbGFzcywgIlVwZGF0ZXJUZXN0NCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0NS5jbGFzcywgIlVwZGF0ZXJUZXN0NSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0Ni5jbGFzcywgIlVwZGF0ZXJUZXN0NiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0Ny5jbGFzcywgIlVwZGF0ZXJUZXN0NyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0OC5jbGFzcywgIlVwZGF0ZXJUZXN0OCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0OS5jbGFzcywgIlVwZGF0ZXJUZXN0OSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTAuY2xhc3MsICJVcGRhdGVyVGVzdDEwIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QxMS5jbGFzcywgIlVwZGF0ZXJUZXN0MTEiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShVcGRhdGVyVGVzdDEyLmNsYXNzLCAiVXBkYXRlclRlc3QxMiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFVwZGF0ZXJUZXN0MTMuY2xhc3MsICJVcGRhdGVyVGVzdDEzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVXBkYXRlclRlc3QxNC5jbGFzcywgIlVwZGF0ZXJUZXN0MTQiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbGVtZW50VGVzdC5jbGFzcywgIkVsZW1lbnRUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRWxlbWVudFRlc3QyLmNsYXNzLCAiRWxlbWVudFRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRWxlbWVudFRlc3QzLmNsYXNzLCAiRWxlbWVudFRlc3QzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGFibGVUZXN0LmNsYXNzLCAiVGFibGVUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGV4dFRlc3QuY2xhc3MsICJUZXh0VGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRleHRUZXN0Mi5jbGFzcywgIlRleHRUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRleHRUZXN0My5jbGFzcywgIlRleHRUZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3QuY2xhc3MsICJTcGxpdFRleHRUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDIuY2xhc3MsICJTcGxpdFRleHRUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3QzLmNsYXNzLCAiU3BsaXRUZXh0VGVzdDMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0NC5jbGFzcywgIlNwbGl0VGV4dFRlc3Q0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDUuY2xhc3MsICJTcGxpdFRleHRUZXN0NSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q2LmNsYXNzLCAiU3BsaXRUZXh0VGVzdDYiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0Ny5jbGFzcywgIlNwbGl0VGV4dFRlc3Q3IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDguY2xhc3MsICJTcGxpdFRleHRUZXN0OCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVtcHR5VGV4dFRlc3QuY2xhc3MsICJFbXB0eVRleHRUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW1wdHlUZXh0VGVzdDIuY2xhc3MsICJFbXB0eVRleHRUZXN0MiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVtcHR5VGV4dFRlc3QzLmNsYXNzLCAiRW1wdHlUZXh0VGVzdDMiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShBdHRyVGVzdC5jbGFzcywgIkF0dHJUZXN0IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQXR0clRlc3QyLmNsYXNzLCAiQXR0clRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdC5jbGFzcywgIkVudGl0eVRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0Mi5jbGFzcywgIkVudGl0eVRlc3QyIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDMuY2xhc3MsICJFbnRpdHlUZXN0MyIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3Q0LmNsYXNzLCAiRW50aXR5VGVzdDQiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0NS5jbGFzcywgIkVudGl0eVRlc3Q1IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDYuY2xhc3MsICJFbnRpdHlUZXN0NiIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKEVudGl0eVRlc3Q3LmNsYXNzLCAiRW50aXR5VGVzdDciKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShFbnRpdHlUZXN0OC5jbGFzcywgIkVudGl0eVRlc3Q4IikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoRW50aXR5VGVzdDkuY2xhc3MsICJFbnRpdHlUZXN0OSIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKERvY1R5cGVUZXN0LmNsYXNzLCAiRG9jVHlwZVRlc3QiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShDREFUQVNlY3Rpb25UZXN0LmNsYXNzLCAiQ0RBVEFTZWN0aW9uVGVzdCIpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKENEQVRBU2VjdGlvblRlc3QyLmNsYXNzLCAiQ0RBVEFTZWN0aW9uVGVzdDIiKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShDREFUQVNlY3Rpb25UZXN0My5jbGFzcywgIkNEQVRBU2VjdGlvblRlc3QzIikpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoUElUZXN0LmNsYXNzLCAiUElUZXN0IikpOwotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9taXNjL0hUTUxDb3JlUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5Mjc2ZmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9taXNjL0hUTUxDb3JlUHJlZmVyZW5jZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1pc2M7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkRlZmF1bHRTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSUVjbGlwc2VQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZmVyZW5jZXMuSW5zdGFuY2VTY29wZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLkhUTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSFRNTERvY3VtZW50TG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuSFRNTENvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklFbmNvZGVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5vc2dpLnNlcnZpY2UucHJlZnMuUHJlZmVyZW5jZXM7Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlIEhUTUwgU291cmNlCi0gKiBlZGl0b3IgcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUgc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHByZWZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBIVE1MQ29yZVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9Ci0JCWNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5UQUdfTkFNRV9DQVNFKTsKLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5BVFRSX05BTUVfQ0FTRSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGJ1bmRsZUdldFByZWZlcmVuY2UoU3RyaW5nIGJ1bmRsZU5hbWUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCWludCBkZWZhdWx0VmFsdWUgPSAtMTsKLQotCQlpbnQgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRJbnQoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiICsgcHJlZktleSwgZGVmYXVsdFZhbHVlICE9IHZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSA9IG5ldyBEZWZhdWx0U2NvcGUoKS5nZXROb2RlKEhUTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSk7Ci0KLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuU1BMSVRfTVVMVElfQVRUUlMsIEJvb2xlYW4udG9TdHJpbmcoZmFsc2UpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuQVRUUl9OQU1FX0NBU0UsIEludGVnZXIudG9TdHJpbmcoSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuTE9XRVIpKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSwgU3RyaW5nIGV4cGVjdGVkKSB7Ci0JCVN0cmluZyBkZWZhdWx0VmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCS8vIHN0cmluZwotCi0JCVN0cmluZyB0aGVEZWZhdWx0VmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCBkZWZhdWx0VmFsdWUpOwotCQlhc3NlcnRFcXVhbHMoIkdldCBkZWZhdWx0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXksIGV4cGVjdGVkLCB0aGVEZWZhdWx0VmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMgYnkgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlIHRvIGJlIGEKLQkgKiBjZXJ0YWluIHZhbHVlLCB0aGVuIGdldHRpbmcgdGhlIHByZWZlcmVuY2UgdmFsdWUgdG8gdmVyaWZ5IGl0IHdhcyBzZXQuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpblNldFByZWZlcmVuY2VzKCkgewotCQlJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUgPSBuZXcgSW5zdGFuY2VTY29wZSgpLmdldE5vZGUoSFRNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihub2RlLCBIVE1MQ29yZVByZWZlcmVuY2VOYW1lcy5TUExJVF9NVUxUSV9BVFRSUyk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcobm9kZSwgSFRNTENvcmVQcmVmZXJlbmNlTmFtZXMuVEFHX05BTUVfQ0FTRSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gZmFsc2U7Ci0JCWJvb2xlYW4gZXhwZWN0ZWRWYWx1ZSA9IHRydWU7Ci0KLQkJU3RyaW5nIG9yaWdpbmFsU3RyaW5nID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCWlmICghImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKSB7Ci0JCQlvcmlnaW5hbFZhbHVlID0gQm9vbGVhbi52YWx1ZU9mKG9yaWdpbmFsU3RyaW5nKS5ib29sZWFuVmFsdWUoKTsKLQkJCWV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJfQotCQlub2RlLnB1dEJvb2xlYW4ocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IG5vZGUuZ2V0Qm9vbGVhbihwcmVmS2V5LCB0cnVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSArICIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlpZiAoImJvZ3VzIi5lcXVhbHMob3JpZ2luYWxTdHJpbmcpKQotCQkJbm9kZS5yZW1vdmUocHJlZktleSk7Ci0JCWVsc2UKLQkJCW5vZGUucHV0KHByZWZLZXksIG9yaWdpbmFsU3RyaW5nKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhJRWNsaXBzZVByZWZlcmVuY2VzIG5vZGUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBvcmlnaW5hbFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgImJvZ3VzIik7Ci0JCVN0cmluZyBleHBlY3RlZFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkvLyBzdHJpbmcKLQkJbm9kZS5wdXQocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCVN0cmluZyBmb3VuZFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgIiIpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmICgiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFZhbHVlKSkKLQkJCW5vZGUucmVtb3ZlKHByZWZLZXkpOwotCQllbHNlCi0JCQlub2RlLnB1dChwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlcyBieSBtYWtpbmcgc3VyZSBkb2N1bWVudCBjcmVhdGVkCi0JICogZm9sbG93cyBsaW5lIGRlbGltaXRlciBwcmVmZXJlbmNlLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3REZWxpbWl0ZXJQcmVmZXJlbmNlcygpIHsKLQkJLy8gY2hlY2sgaWYgY29udGVudCB0eXBlIHByZWZlcmVuY2VzIG1hdGNoCi0JCVN0cmluZyBwcmVmZXJyZWREZWxpbWl0ZXIgPSBDb250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXMuZ2V0UHJlZmVycmVkTmV3TGluZURlbGltaXRlcihDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5LmdldFByZWZlcmVuY2VzKENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCVN0cmluZyBnYXRld2F5RGVsaW1pdGVyID0gcHJlZnMuZ2V0KENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoIkNvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlcyBhbmQgQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkgcHJlZmVyZW5jZXMgZG8gbm90IG1hdGNoIiwgZ2F0ZXdheURlbGltaXRlciwgcHJlZmVycmVkRGVsaW1pdGVyKTsKLQotCQkvLyBzZXQgYSBwYXJ0aWN1bGFyIGxpbmUgZGVsaW1pdGVyCi0JCXByZWZzLnB1dChDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFLCBDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5MRik7Ci0KLQkJLy8gY3JlYXRlIGRvY3VtZW50Ci0JCUhUTUxEb2N1bWVudExvYWRlciBsb2FkZXIgPSBuZXcgSFRNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlFbmNvZGVkRG9jdW1lbnQgZG9jdW1lbnQgPSBsb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCVN0cmluZyBkb2N1bWVudERlbGltaXRlciA9IGRvY3VtZW50LmdldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoKTsKLQotCQkvLyB2ZXJpZnkgZGVsaW1pdGVyIGluIGRvY3VtZW50IG1hdGNoZXMgcHJlZmVyZW5jZQotCQlhc3NlcnRFcXVhbHMoIkRlbGltaXRlciBpbiBkb2N1bWVudCBkb2VzIG5vdCBtYXRjaCBwcmVmZXJlbmNlIiwgQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuU1RSSU5HX0xGLCBkb2N1bWVudERlbGltaXRlcik7Ci0KLQkJLy8gcmV0dXJuIHRvIG9yaWdpbmFsIHByZWZlcmVuY2UKLQkJcHJlZnMucmVtb3ZlKENvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzLkVORF9PRl9MSU5FX0NPREUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MVGFnSW5mb1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbWlzYy9IVE1MVGFnSW5mb1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVmYTY2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21pc2MvSFRNTFRhZ0luZm9UZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLm1pc2M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Nb2RlbFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01FbGVtZW50RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnkuTW9kZWxRdWVyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLnV0aWwuRE9NTmFtZXNwYWNlSGVscGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnlVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgSFRNTFRhZ0luZm9UZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQotCXB1YmxpYyBIVE1MVGFnSW5mb1Rlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEhUTUxUYWdJbmZvVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgSFRNTFRhZ0luZm9UZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBodG1sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSFRNTCIpOyAvLyROT04tTkxTLTEkCi0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChodG1sKTsKLQkJCWNoZWNrRWxlbWVudFRhZ0luZm8oaHRtbCk7Ci0KLQkJCUVsZW1lbnQgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkJPRFkiKTsgLy8kTk9OLU5MUy0xJAotCQkJaHRtbC5hcHBlbmRDaGlsZChib2R5KTsKLQkJCWNoZWNrRWxlbWVudFRhZ0luZm8oYm9keSk7Ci0KLQkJCUF0dHIgb25jbGljayA9IGRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZSgib25jbGljayIpOyAvLyROT04tTkxTLTEkCi0JCQlib2R5LnNldEF0dHJpYnV0ZU5vZGUob25jbGljayk7Ci0JCQljaGVja0F0dHJpYnV0ZVRhZ0luZm8oYm9keSwgb25jbGljayk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBjaGVja0VsZW1lbnRUYWdJbmZvKEVsZW1lbnQgbm9kZSkgewotCQkvLyBjaGVjayB0YWdpbmZvCi0JCUNNRWxlbWVudERlY2xhcmF0aW9uIGVsZW1lbnREZWNsID0gZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24obm9kZSk7Ci0JCWFzc2VydE5vdE51bGwoIkNhbm5vdCBjaGVjayB0YWdpbmZvIGJlY2F1c2Ugbm8gY20gZWxlbWVudCBkZWNsYXJhdGlvbiBmb3IgIiArIG5vZGUuZ2V0Tm9kZU5hbWUoKSwgZWxlbWVudERlY2wpOyAvLyROT04tTkxTLTEkCi0JCWlmIChlbGVtZW50RGVjbCAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgdGFnSW5mbyA9IChTdHJpbmcpIGVsZW1lbnREZWNsLmdldFByb3BlcnR5KCJ0YWdJbmZvIik7IC8vJE5PTi1OTFMtMSQKLQkJCWFzc2VydE5vdE51bGwoIk5vIHRhZ2luZm8gZm91bmQgZm9yICIgKyBlbGVtZW50RGVjbC5nZXROb2RlTmFtZSgpLCB0YWdJbmZvKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNoZWNrQXR0cmlidXRlVGFnSW5mbyhFbGVtZW50IGVsZW1lbnQsIEF0dHIgYXR0cmlidXRlKSB7Ci0JCS8vIGNoZWNrIHRhZ2luZm8KLQkJQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wgPSBnZXRDTUVsZW1lbnREZWNsYXJhdGlvbihlbGVtZW50KTsKLQkJYXNzZXJ0Tm90TnVsbCgiQ2Fubm90IGNoZWNrIHRhZ2luZm8gYmVjYXVzZSBubyBlbGVtZW50IGRlY2xhcmF0aW9uIGZvciAiICsgZWxlbWVudC5nZXROb2RlTmFtZSgpLCBlbGVtZW50RGVjbCk7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKGVsZW1lbnREZWNsICE9IG51bGwpIHsKLQkJCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0RGVjbCA9IGdldENNQXR0cmlidXRlRGVjbGFyYXRpb24oZWxlbWVudERlY2wsIGF0dHJpYnV0ZS5nZXROYW1lKCkpOwotCQkJYXNzZXJ0Tm90TnVsbCgiQ2Fubm90IGNoZWNrIHRhZ2luZm8gYmVjYXVzZSBubyBhdHRyaWJ1dGUgZGVjbGFyYXRpb24gZm9yICIgKyBhdHRyaWJ1dGUuZ2V0TmFtZSgpLCBhdHREZWNsKTsgLy8kTk9OLU5MUy0xJAotCi0JCQlTdHJpbmcgdGFnSW5mbyA9IChTdHJpbmcpIGF0dERlY2wuZ2V0UHJvcGVydHkoInRhZ0luZm8iKTsgLy8kTk9OLU5MUy0xJAotCQkJYXNzZXJ0TnVsbCgiVW5leHBlY3RlZCB0YWdpbmZvIGZvdW5kIGZvciAiICsgYXR0RGVjbC5nZXROb2RlTmFtZSgpLCB0YWdJbmZvKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0cmVpdmVzIENNQXR0cmlidXRlRGVjbGFyYXRpb24gaW5kaWNhdGVkIGJ5IGF0dHJpYnV0ZSBuYW1lIHdpdGhpbgotCSAqIGVsZW1lbnREZWNsCi0JICovCi0JcHJpdmF0ZSBDTUF0dHJpYnV0ZURlY2xhcmF0aW9uIGdldENNQXR0cmlidXRlRGVjbGFyYXRpb24oQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudERlY2wsIFN0cmluZyBhdHROYW1lKSB7Ci0JCUNNQXR0cmlidXRlRGVjbGFyYXRpb24gYXR0ckRlY2wgPSBudWxsOwotCi0JCWlmIChlbGVtZW50RGVjbCAhPSBudWxsKSB7Ci0JCQlDTU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gZWxlbWVudERlY2wuZ2V0QXR0cmlidXRlcygpOwotCQkJU3RyaW5nIG5vcHJlZml4TmFtZSA9IERPTU5hbWVzcGFjZUhlbHBlci5nZXRVbnByZWZpeGVkTmFtZShhdHROYW1lKTsKLQkJCWlmIChhdHRyaWJ1dGVzICE9IG51bGwpIHsKLQkJCQlhdHRyRGVjbCA9IChDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKSBhdHRyaWJ1dGVzLmdldE5hbWVkSXRlbShub3ByZWZpeE5hbWUpOwotCQkJCWlmIChhdHRyRGVjbCA9PSBudWxsKSB7Ci0JCQkJCWF0dHJEZWNsID0gKENNQXR0cmlidXRlRGVjbGFyYXRpb24pIGF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKGF0dE5hbWUpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gYXR0ckRlY2w7Ci0JfQotCi0JLyoqCi0JICogUmV0cmVpdmVzIENNRWxlbWVudERlY2xhcmF0aW9uIGZvciBnaXZlbiBub2RlCi0JICogCi0JICogQHJldHVybiBDTUVsZW1lbnREZWNsYXJhdGlvbiAtIENNRWxlbWVudERlY2xhcmF0aW9uIG9mIG5vZGUgb3IKLQkgKiAgICAgICAgIDxjb2RlPm51bGw8L2NvZGU+IGlmIG5vdCBwb3NzaWJsZQotCSAqLwotCXByaXZhdGUgQ01FbGVtZW50RGVjbGFyYXRpb24gZ2V0Q01FbGVtZW50RGVjbGFyYXRpb24oRWxlbWVudCBlbGVtZW50KSB7Ci0JCUNNRWxlbWVudERlY2xhcmF0aW9uIHJlc3VsdCA9IG51bGw7Ci0KLQkJTW9kZWxRdWVyeSBtb2RlbFF1ZXJ5ID0gTW9kZWxRdWVyeVV0aWwuZ2V0TW9kZWxRdWVyeShlbGVtZW50LmdldE93bmVyRG9jdW1lbnQoKSk7Ci0JCWlmIChtb2RlbFF1ZXJ5ICE9IG51bGwpCi0JCQlyZXN1bHQgPSBtb2RlbFF1ZXJ5LmdldENNRWxlbWVudERlY2xhcmF0aW9uKGVsZW1lbnQpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvQlVHMTI0ODM1U2V0U3R5bGVBdHRyaWJ1dGVWYWx1ZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvQlVHMTI0ODM1U2V0U3R5bGVBdHRyaWJ1dGVWYWx1ZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQ5ZTU5Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21vZGVsL0JVRzEyNDgzNVNldFN0eWxlQXR0cmlidXRlVmFsdWVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY3NzLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLlByb3BDTVByb3BlcnR5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JQ1NTU3R5bGVEZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkhUTUw0ME5hbWVzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzLkZpbGVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5FbGVtZW50Q1NTSW5saW5lU3R5bGU7Ci0KLXB1YmxpYyBjbGFzcyBCVUcxMjQ4MzVTZXRTdHlsZUF0dHJpYnV0ZVZhbHVlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHNvbWUgY3NzIGF0dHJpYnV0ZSB2YWx1ZXMgaW5jbHVkaW5nIHNldHRpbmcgdGhlIHNhbWUKLQkgKiB2YWx1ZSBzZXZlcmFsIHRpbWVzIGZvciBkaWZmZXJlbnQgYXR0cmlidXRlcwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTZXRBdHRyaWJ1dGVWYWx1ZSgpIHsKLQkJZmluYWwgU3RyaW5nIEFCU09MVVRFID0gImFic29sdXRlIjsKLQkJZmluYWwgU3RyaW5nIE9ORSA9ICIxIjsKLQkJZmluYWwgU3RyaW5nIFBYID0gIjUwcHgiOwotCi0JCUlET01Nb2RlbCBtb2RlbCA9IEZpbGVVdGlsLmNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuRElWKTsKLQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKEhUTUw0ME5hbWVzcGFjZS5BVFRSX05BTUVfSUQsICJMYXllcjAiKTsKLQkJCWVsZW1lbnQuc2V0QXR0cmlidXRlKEhUTUw0ME5hbWVzcGFjZS5BVFRSX05BTUVfU1RZTEUsICIiKTsKLQkJCXNldElubGluZVN0eWxlKGVsZW1lbnQsIFByb3BDTVByb3BlcnR5LlBfUE9TSVRJT04sIEFCU09MVVRFKTsKLQkJCXNldElubGluZVN0eWxlKGVsZW1lbnQsIFByb3BDTVByb3BlcnR5LlBfWl9JTkRFWCwgT05FKTsKLQkJCXNldElubGluZVN0eWxlKGVsZW1lbnQsIFByb3BDTVByb3BlcnR5LlBfV0lEVEgsIFBYKTsKLQkJCXNldElubGluZVN0eWxlKGVsZW1lbnQsIFByb3BDTVByb3BlcnR5LlBfSEVJR0hULCBQWCk7Ci0JCQlzZXRJbmxpbmVTdHlsZShlbGVtZW50LCBQcm9wQ01Qcm9wZXJ0eS5QX1RPUCwgUFgpOwotCQkJc2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9MRUZULCBQWCk7Ci0KLQkJCWFzc2VydEVxdWFscyhBQlNPTFVURSwgZ2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9QT1NJVElPTikpOwotCQkJYXNzZXJ0RXF1YWxzKE9ORSwgZ2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9aX0lOREVYKSk7Ci0JCQlhc3NlcnRFcXVhbHMoUFgsIGdldElubGluZVN0eWxlKGVsZW1lbnQsIFByb3BDTVByb3BlcnR5LlBfV0lEVEgpKTsKLQkJCWFzc2VydEVxdWFscyhQWCwgZ2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9IRUlHSFQpKTsKLQkJCWFzc2VydEVxdWFscyhQWCwgZ2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9UT1ApKTsKLQkJCWFzc2VydEVxdWFscyhQWCwgZ2V0SW5saW5lU3R5bGUoZWxlbWVudCwgUHJvcENNUHJvcGVydHkuUF9MRUZUKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldElubGluZVN0eWxlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgewotCQlJQ1NTU3R5bGVEZWNsYXJhdGlvbiBkZWNsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWRlY2wgPSAoSUNTU1N0eWxlRGVjbGFyYXRpb24pICgoRWxlbWVudENTU0lubGluZVN0eWxlKSBlbGVtZW50KS5nZXRTdHlsZSgpOwotCQl9Ci0JCWNhdGNoIChDbGFzc0Nhc3RFeGNlcHRpb24gZXgpIHsKLQkJCS8vIGRvIG5vdGhpbmcKLQkJfQotCQlpZiAoZGVjbCAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgcHJpb3JpdHkgPSBkZWNsLmdldFByb3BlcnR5UHJpb3JpdHkobmFtZSk7Ci0JCQlkZWNsLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7Ci0JCX0KLQl9Ci0KLQotCXByaXZhdGUgU3RyaW5nIGdldElubGluZVN0eWxlKEVsZW1lbnQgZWxlbWVudCwgU3RyaW5nIG5hbWUpIHsKLQkJU3RyaW5nIHZhbHVlID0gbnVsbDsKLQkJSUNTU1N0eWxlRGVjbGFyYXRpb24gZGVjbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlkZWNsID0gKElDU1NTdHlsZURlY2xhcmF0aW9uKSAoKEVsZW1lbnRDU1NJbmxpbmVTdHlsZSkgZWxlbWVudCkuZ2V0U3R5bGUoKTsKLQkJfQotCQljYXRjaCAoQ2xhc3NDYXN0RXhjZXB0aW9uIGV4KSB7Ci0JCQkvLyBkbyBub3RoaW5nCi0JCX0KLQkJaWYgKGRlY2wgIT0gbnVsbCkgewotCQkJdmFsdWUgPSBkZWNsLmdldFByb3BlcnR5VmFsdWUobmFtZSk7Ci0JCX0KLQkJcmV0dXJuIHZhbHVlOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvR2V0T3ZlcnJpZGVTdHlsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvR2V0T3ZlcnJpZGVTdHlsZVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFkMTJhYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21vZGVsL0dldE92ZXJyaWRlU3R5bGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMubW9kZWw7Ci0KLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLmNzcy5Eb2N1bWVudENTUzsKLQotcHVibGljIGNsYXNzIEdldE92ZXJyaWRlU3R5bGVUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTdHlsZVRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgR2V0T3ZlcnJpZGVTdHlsZVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEdldE92ZXJyaWRlU3R5bGVUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBHZXRPdmVycmlkZVN0eWxlVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gRmlsZVV0aWwuY3JlYXRlSFRNTE1vZGVsKCk7IAotCQl0cnkgewotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0VGV4dChudWxsLCAiPHN0eWxlPnAgewlib3JkZXItY29sb3I6IGJsdWU7IG1hcmdpbjogMDsgfSA8L3N0eWxlPiA8cCBzdHlsZT1cImJvcmRlci1jb2xvcjogcmVkOyBtYXJnaW46IDE7XCI+Iik7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCURvY3VtZW50Q1NTIGRkZCA9IChEb2N1bWVudENTUykgZG9jdW1lbnQ7Ci0JCQlOb2RlTGlzdCBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInAiKTsKLQkJCWRkZC5nZXRPdmVycmlkZVN0eWxlKChFbGVtZW50KSBuLml0ZW0oMCksICIiKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9Nb2RlbE1vZGlmaWNhdGlvbnMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvTW9kZWxNb2RpZmljYXRpb25zLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ODc3NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9tb2RlbC9Nb2RlbE1vZGlmaWNhdGlvbnMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LkRvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSFRNTDQwTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMuVGVzdFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcudXRpbC5OdWxsSW5wdXRTdHJlYW07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIE1vZGVsTW9kaWZpY2F0aW9ucyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RQbGFpbkRvY3VtZW50KCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gbmV3IERvY3VtZW50KCk7Ci0JCWRvY3VtZW50LnNldCgiIik7Ci0JCWRvY3VtZW50LnJlcGxhY2UoMCwgMCwgInRlc3QiKTsKLQkJZG9jdW1lbnQuc2V0KCIiKTsKLQkJZG9jdW1lbnQucmVwbGFjZSgwLCAwLCAidGVzdDIiKTsKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBEb2N1bWVudEhUTUxNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0KLQkJbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCksICI8dGFnPnRleHQ8L3RhZz4iKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0RG9jdW1lbnRYTUxNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0KLQkJbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBEb2N1bWVudEpTUE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQotCQltb2RlbCA9IGNyZWF0ZUpTUE1vZGVsKCk7Ci0KLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQodGhpcywgMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpLCAiPHRhZz50ZXh0PC90YWc+Iik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNldERvY3VtZW50SFRNTE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQotCQltb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXREb2N1bWVudEpTUE1vZHMoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRE9NTW9kZWwgbW9kZWwgPSBudWxsOyAvLyBhc3N1bWVzIDAtYnl0ZSBodG1sIGVtcHR5IGZpbGUKLQotCQltb2RlbCA9IGNyZWF0ZUpTUE1vZGVsKCk7Ci0KLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiIik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlcERvY3VtZW50WE1MTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCi0JCW1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCksICI8dGFnPnRleHQ8L3RhZz4iKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRIVE1MTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCQotCQltb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCAwLCBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCksICIiKTsKLQkJCUVsZW1lbnQgZWxlMiA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5QKTsKLQkJCWRvYy5hcHBlbmRDaGlsZChlbGUyKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RG9jdW1lbnRKU1BNb2RzKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsgLy8gYXNzdW1lcyAwLWJ5dGUgaHRtbCBlbXB0eSBmaWxlCi0JCi0JCW1vZGVsID0gY3JlYXRlSlNQTW9kZWwoKTsKLQkKLQkJdHJ5IHsKLQkJCUlET01Eb2N1bWVudCBkb2MgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJRWxlbWVudCBlbGUgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQodGhpcywgMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpLCAiIik7Ci0JCQlFbGVtZW50IGVsZTIgPSBkb2MuY3JlYXRlRWxlbWVudChIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuUCk7Ci0JCQlkb2MuYXBwZW5kQ2hpbGQoZWxlMik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvY3VtZW50WE1MTW9kcygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IG51bGw7IC8vIGFzc3VtZXMgMC1ieXRlIGh0bWwgZW1wdHkgZmlsZQotCQotCQltb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCi0JCXRyeSB7Ci0JCQlJRE9NRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUVsZW1lbnQgZWxlID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZSk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KHRoaXMsIDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSwgIiIpOwotCQkJRWxlbWVudCBlbGUyID0gZG9jLmNyZWF0ZUVsZW1lbnQoSFRNTDQwTmFtZXNwYWNlLkVsZW1lbnROYW1lLlApOwotCQkJZG9jLmFwcGVuZENoaWxkKGVsZTIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIEJlIHN1cmUgdG8gcmVsZWFzZSBhbnkgbW9kZWxzIG9idGFpbmVkIGZyb20gdGhpcyBtZXRob2QuCi0JICogCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24gCi0JICogQHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIAotCSAqLwotCXByaXZhdGUgc3RhdGljIElET01Nb2RlbCBjcmVhdGVYTUxNb2RlbCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoInRlc3QueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQotCQkvLyBhbHdheXMgdXNlIHRoZSBzYW1lIGxpbmUgZGVsaW1pdGVyIGZvciB0aGVzZSB0ZXN0cywgcmVnYXJkbGVzcwotCQkvLyBvZgotCQkvLyBwbGFmb3JtIG9yIHByZWZlcmVuY2Ugc2V0dGluZ3MKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihUZXN0V3JpdGVyLmNvbW1vbkVPTCk7Ci0JCXJldHVybiAoSURPTU1vZGVsKSBtb2RlbDsKLQotCX0KLQotCS8qKgotCSAqIEJlIHN1cmUgdG8gcmVsZWFzZSBhbnkgbW9kZWxzIG9idGFpbmVkIGZyb20gdGhpcyBtZXRob2QuCi0JICogCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJRE9NTW9kZWwgY3JlYXRlSFRNTE1vZGVsKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdC5odG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQotCQkvLyBhbHdheXMgdXNlIHRoZSBzYW1lIGxpbmUgZGVsaW1pdGVyIGZvciB0aGVzZSB0ZXN0cywgcmVnYXJkbGVzcwotCQkvLyBvZgotCQkvLyBwbGFmb3JtIG9yIHByZWZlcmVuY2Ugc2V0dGluZ3MKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihUZXN0V3JpdGVyLmNvbW1vbkVPTCk7Ci0JCXJldHVybiAoSURPTU1vZGVsKSBtb2RlbDsKLQotCX0KLQotCS8qKgotCSAqIEJlIHN1cmUgdG8gcmVsZWFzZSBhbnkgbW9kZWxzIG9idGFpbmVkIGZyb20gdGhpcyBtZXRob2QuCi0JICogCi0JICogQHJldHVybgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJRE9NTW9kZWwgY3JlYXRlSlNQTW9kZWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoInRlc3QueG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQotCQkvLyBhbHdheXMgdXNlIHRoZSBzYW1lIGxpbmUgZGVsaW1pdGVyIGZvciB0aGVzZSB0ZXN0cywgcmVnYXJkbGVzcwotCQkvLyBvZgotCQkvLyBwbGFmb3JtIG9yIHByZWZlcmVuY2Ugc2V0dGluZ3MKLQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihUZXN0V3JpdGVyLmNvbW1vbkVPTCk7Ci0KLQotCQlyZXR1cm4gKElET01Nb2RlbCkgbW9kZWw7Ci0KLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdEZvck5QRUluQ1NTQ3JlYXRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdEZvck5QRUluQ1NTQ3JlYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTk3YTM0MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RGb3JOUEVJbkNTU0NyZWF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5jc3MuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5hZGFwdGVycy5JU3R5bGVTaGVldEFkYXB0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTdHlsZVJ1bGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNzcy5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklDU1NTdHlsZVNoZWV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSFRNTDQwTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlTm90aWZpZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVGVzdEZvck5QRUluQ1NTQ3JlYXRpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RDU1NNb2RlbCgpIHsKLQotCQlJRE9NTW9kZWwgbW9kZWwgPSBGaWxlVXRpbC5jcmVhdGVIVE1MTW9kZWwoKTsKLQotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXQoZ2V0SFRNTERvY3VtZW50VGV4dCgpKTsKLQotCQkJSURPTURvY3VtZW50IGRvYyA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCS8vIGdldCBoZWFkIHRhZwotCQkJTm9kZUxpc3QgbGlzdCA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuSEVBRCk7Ci0JCQlFbGVtZW50IGhlYWQgPSAoRWxlbWVudCkgbGlzdC5pdGVtKDApOwotCi0JCQkvLyBjcmVhdGUgYW5kIGFwcGVuZCBzdHlsZSBlbGVtZW50Ci0JCQlFbGVtZW50IGVsZSA9IGRvYy5jcmVhdGVFbGVtZW50KEhUTUw0ME5hbWVzcGFjZS5FbGVtZW50TmFtZS5TVFlMRSk7Ci0JCQllbGUuc2V0QXR0cmlidXRlKEhUTUw0ME5hbWVzcGFjZS5BVFRSX05BTUVfVFlQRSwgInRleHQvY3NzIik7Ci0KLQkJCVN0cmluZyBkZWxpbSA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldExpbmVEZWxpbWl0ZXIoKTsKLQkJCWlmIChkZWxpbSA9PSBudWxsKQotCQkJCWRlbGltID0gIlxuIjsvLyROT04tTkxTLTEkCi0JCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcihkZWxpbSk7Ci0JCQlidWZmZXIuYXBwZW5kKCI8IS0tIik7Ly8kTk9OLU5MUy0xJAotCQkJYnVmZmVyLmFwcGVuZChkZWxpbSk7Ci0JCQlidWZmZXIuYXBwZW5kKCItLT4iKTsvLyROT04tTkxTLTEkCi0JCQlidWZmZXIuYXBwZW5kKGRlbGltKTsKLQkJCVRleHQgdGV4dCA9IGRvYy5jcmVhdGVUZXh0Tm9kZShidWZmZXIudG9TdHJpbmcoKSk7Ci0JCQllbGUuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCWhlYWQuaW5zZXJ0QmVmb3JlKGVsZSwgbnVsbCk7Ci0KLQkJCS8vIGdldCBhZGFwdGVyIGZvciBTdHlsZVNoZWV0Ci0JCQlJQ1NTU3R5bGVTaGVldCBzaGVldCA9IChJQ1NTU3R5bGVTaGVldCkgKChJU3R5bGVTaGVldEFkYXB0ZXIpICgoSU5vZGVOb3RpZmllcikgZWxlKS5nZXRBZGFwdGVyRm9yKElTdHlsZVNoZWV0QWRhcHRlci5jbGFzcykpLmdldFNoZWV0KCk7Ci0KLQkJCS8vIGNyZWF0ZSBzdHlsZSBkZWNsYXJhdGlvbgotCQkJSUNTU1N0eWxlUnVsZSBydWxlID0gc2hlZXQuY3JlYXRlQ1NTU3R5bGVSdWxlKCk7Ci0JCQlydWxlLmdldFN0eWxlKCkuc2V0UHJvcGVydHkoImJhY2tncm91bmQtY29sb3IiLCAibGltZSIsICIiKTsKLQkJCXJ1bGUuZ2V0U3R5bGUoKS5zZXRQcm9wZXJ0eSgiYmFja2dyb3VuZC1jb2xvciIsICJibHVlIiwgIiIpOwotCQkJcnVsZS5nZXRTdHlsZSgpLnNldFByb3BlcnR5KCJiYWNrZ3JvdW5kLWNvbG9yIiwgIiMwMDgwZmYiLCAiIik7Ci0KLQkJCS8vbW9kZWwuc2F2ZSgpOwotCi0KLQkJfQotCi0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0KLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRIVE1MRG9jdW1lbnRUZXh0KCkgewotCQlyZXR1cm4gIjxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiI7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BbGxNb2RlbFBhcnNlclRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BbGxNb2RlbFBhcnNlclRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlZDIyNTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQWxsTW9kZWxQYXJzZXJUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotcHVibGljIGNsYXNzIEFsbE1vZGVsUGFyc2VyVGVzdHMgewotCi0JLy8JcHVibGljIEFsbE1vZGVsUGFyc2VyVGVzdHMoU3RyaW5nIG5hbWUpIHsKLQkvLwkJLy9zdXBlcihuYW1lKTsKLQkvLwl9Ci0KLQlwdWJsaWMgdm9pZCBob2xkT2xkVGVzdE1haW4oKSB7Ci0JCXJ1blRlc3QobmV3IFBhcnNlclRlc3QoKSk7Ci0JCXJ1blRlc3QobmV3IFBhcnNlclRlc3QyKCkpOwotCQlydW5UZXN0KG5ldyBQYXJzZXJUZXN0MygpKTsKLQkJcnVuVGVzdChuZXcgUGFyc2VyVGVzdDQoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDIoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0MygpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3Q0KCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDUoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0NigpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3Q3KCkpOwotCQlydW5UZXN0KG5ldyBVcGRhdGVyVGVzdDgoKSk7Ci0JCXJ1blRlc3QobmV3IFVwZGF0ZXJUZXN0OSgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3QxMCgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3QxMSgpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3QxMigpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3QxMygpKTsKLQkJcnVuVGVzdChuZXcgVXBkYXRlclRlc3QxNCgpKTsKLQkJcnVuVGVzdChuZXcgRWxlbWVudFRlc3QoKSk7Ci0JCXJ1blRlc3QobmV3IEVsZW1lbnRUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgRWxlbWVudFRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBUYWJsZVRlc3QoKSk7Ci0JCXJ1blRlc3QobmV3IFRleHRUZXN0KCkpOwotCQlydW5UZXN0KG5ldyBUZXh0VGVzdDIoKSk7Ci0JCXJ1blRlc3QobmV3IFRleHRUZXN0MygpKTsKLQkJcnVuVGVzdChuZXcgU3BsaXRUZXh0VGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgU3BsaXRUZXh0VGVzdDIoKSk7Ci0JCXJ1blRlc3QobmV3IFNwbGl0VGV4dFRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0NCgpKTsKLQkJcnVuVGVzdChuZXcgU3BsaXRUZXh0VGVzdDUoKSk7Ci0JCXJ1blRlc3QobmV3IFNwbGl0VGV4dFRlc3Q2KCkpOwotCQlydW5UZXN0KG5ldyBTcGxpdFRleHRUZXN0NygpKTsKLQkJcnVuVGVzdChuZXcgU3BsaXRUZXh0VGVzdDgoKSk7Ci0JCXJ1blRlc3QobmV3IEVtcHR5VGV4dFRlc3QoKSk7Ci0JCXJ1blRlc3QobmV3IEVtcHR5VGV4dFRlc3QyKCkpOwotCQlydW5UZXN0KG5ldyBFbXB0eVRleHRUZXN0MygpKTsKLQkJcnVuVGVzdChuZXcgQXR0clRlc3QoKSk7Ci0JCXJ1blRlc3QobmV3IEF0dHJUZXN0MigpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDIoKSk7Ci0JCXJ1blRlc3QobmV3IEVudGl0eVRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0NCgpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDUoKSk7Ci0JCXJ1blRlc3QobmV3IEVudGl0eVRlc3Q2KCkpOwotCQlydW5UZXN0KG5ldyBFbnRpdHlUZXN0NygpKTsKLQkJcnVuVGVzdChuZXcgRW50aXR5VGVzdDgoKSk7Ci0JCXJ1blRlc3QobmV3IEVudGl0eVRlc3Q5KCkpOwotCQlydW5UZXN0KG5ldyBEb2NUeXBlVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgQ0RBVEFTZWN0aW9uVGVzdCgpKTsKLQkJcnVuVGVzdChuZXcgQ0RBVEFTZWN0aW9uVGVzdDIoKSk7Ci0JCXJ1blRlc3QobmV3IENEQVRBU2VjdGlvblRlc3QzKCkpOwotCQlydW5UZXN0KG5ldyBQSVRlc3QoKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0U3VpdGUgZ2V0QWxsVGVzdHMoKSB7Ci0KLQotCQlUZXN0U3VpdGUgdGVzdFN1aXRlID0gbmV3IFRlc3RTdWl0ZSgpOwotCi0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoUGFyc2VyVGVzdC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoUGFyc2VyVGVzdDIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFBhcnNlclRlc3QzLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShQYXJzZXJUZXN0NC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0Mi5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3QzLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDQuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0NS5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3Q2LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDcuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFVwZGF0ZXJUZXN0OC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVXBkYXRlclRlc3Q5LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDEwLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDExLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDEyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDEzLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShVcGRhdGVyVGVzdDE0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbGVtZW50VGVzdC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRWxlbWVudFRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbGVtZW50VGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFRhYmxlVGVzdC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVGV4dFRlc3QuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFRleHRUZXN0Mi5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVGV4dFRlc3QzLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0Mi5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0NS5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoU3BsaXRUZXh0VGVzdDYuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFNwbGl0VGV4dFRlc3Q3LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShTcGxpdFRleHRUZXN0OC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW1wdHlUZXh0VGVzdC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW1wdHlUZXh0VGVzdDIuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVtcHR5VGV4dFRlc3QzLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShBdHRyVGVzdC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoQXR0clRlc3QyLmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0Mi5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW50aXR5VGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3Q0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0NS5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW50aXR5VGVzdDYuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKEVudGl0eVRlc3Q3LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShFbnRpdHlUZXN0OC5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoRW50aXR5VGVzdDkuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKERvY1R5cGVUZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShDREFUQVNlY3Rpb25UZXN0LmNsYXNzKTsKLQkJdGVzdFN1aXRlLmFkZFRlc3RTdWl0ZShDREFUQVNlY3Rpb25UZXN0Mi5jbGFzcyk7Ci0JCXRlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoQ0RBVEFTZWN0aW9uVGVzdDMuY2xhc3MpOwotCQl0ZXN0U3VpdGUuYWRkVGVzdFN1aXRlKFBJVGVzdC5jbGFzcyk7Ci0JCS8vIHRoZSBmb2xsb3cgaXMgZmFpcmx5IGxvbmcgcnVubmluZwotCQkvL3Rlc3RTdWl0ZS5hZGRUZXN0U3VpdGUoVGVzdEV4YW1wbGVGaWxlcy5jbGFzcyk7Ci0KLQkJcmV0dXJuIHRlc3RTdWl0ZTsKLQl9Ci0KLQotCi0JcHJpdmF0ZSB2b2lkIHJ1blRlc3QoTW9kZWxUZXN0IHRlc3QpIHsKLQkJdHJ5IHsKLQkJCXRlc3QudGVzdE1vZGVsKCk7Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJTW9kZWxUZXN0LnByaW50RXhjZXB0aW9uKGV4KTsKLQkJfQotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTcxM2U4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgQXR0clRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBBdHRyVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBBdHRyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgQXR0clRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEF0dHJUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkvL0RvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIGhyZWY9XCI8JT1jJT5cIj5hPC9hPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRiZWY2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9BdHRyVGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgQXR0clRlc3QyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQXR0clRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEF0dHJUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgQXR0clRlc3QyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBBdHRyVGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWEuc2V0QXR0cmlidXRlKCJiIiwgImMiKTsKLQkJCWEuc2V0QXR0cmlidXRlKCJkIiwgImUiKTsKLQkJCVRleHQgdCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJmIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCWEuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUF0dHIgYiA9IGEuZ2V0QXR0cmlidXRlTm9kZSgiYiIpOwotCQkJYi5zZXRQcmVmaXgoIngiKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJiLm5hbWU9IiArIGIuZ2V0TmFtZSgpKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYi52YWx1ZT0iICsgYi5nZXRWYWx1ZSgpKTsKLQkJCVN0cmluZyBhYiA9IGEuZ2V0QXR0cmlidXRlKCJiIik7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oImEgYj0iICsgYWIpOwotCQkJU3RyaW5nIGF4YiA9IGEuZ2V0QXR0cmlidXRlKCJ4OmIiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYSB4OmI9IiArIGF4Yik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEuZ2V0QXR0cmlidXRlTm9kZSgiZCIpLnNldFByZWZpeCgieSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0F0dHJUZXN0My5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2MzA2NjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQXR0clRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIEF0dHJUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEF0dHJUZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBBdHRyVGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEF0dHJUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgQXR0clRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhIHhtbG5zPSdkZWZhdWx0LXVyaScgeG1sbnM6Yj0nYi11cmknPjxjIGQ9J2QtdmFsdWUnIGI6ZT0nZS12YWx1ZScvPjwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCUVsZW1lbnQgYyA9IChFbGVtZW50KSBhLmdldEZpcnN0Q2hpbGQoKTsKLQotCQkJQXR0ciB4bWxucyA9IGEuZ2V0QXR0cmlidXRlTm9kZSgieG1sbnMiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigieG1sbnMgWyIgKyB4bWxucy5nZXROYW1lc3BhY2VVUkkoKSArICJdIik7Ci0JCQlBdHRyIHhtbG5zX2IgPSBhLmdldEF0dHJpYnV0ZU5vZGUoInhtbG5zOmIiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigieG1sbnM6YiBbIiArIHhtbG5zX2IuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiXSIpOwotCQkJQXR0ciBkID0gYy5nZXRBdHRyaWJ1dGVOb2RlKCJkIik7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oImQgWyIgKyBkLmdldE5hbWVzcGFjZVVSSSgpICsgIl0iKTsKLQkJCUF0dHIgYl9lID0gYy5nZXRBdHRyaWJ1dGVOb2RlKCJiOmUiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYjplIFsiICsgYl9lLmdldE5hbWVzcGFjZVVSSSgpICsgIl0iKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9DREFUQVNlY3Rpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0ZThjODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5DREFUQVNlY3Rpb247Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIENEQVRBU2VjdGlvblRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBDREFUQVNlY3Rpb25UZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIENEQVRBU2VjdGlvblRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIENEQVRBU2VjdGlvblRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IENEQVRBU2VjdGlvblRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGE+PCFbQ0RBVEFbY29udGVudE9mQ0RBVEFTZWN0aW9uXV0+PC9hPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlOb2RlIGEgPSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlmb3IgKE5vZGUgY2hpbGQgPSBhLmdldEZpcnN0Q2hpbGQoKTsgY2hpbGQgIT0gbnVsbDsgY2hpbGQgPSBjaGlsZC5nZXROZXh0U2libGluZygpKSB7Ci0JCQkJaWYgKGNoaWxkLmdldE5vZGVUeXBlKCkgIT0gTm9kZS5DREFUQV9TRUNUSU9OX05PREUpCi0JCQkJCWNvbnRpbnVlOwotCQkJCUNEQVRBU2VjdGlvbiBjZGF0YSA9IChDREFUQVNlY3Rpb24pIGNoaWxkOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihjZGF0YS5nZXREYXRhKCkpOwotCQkJfQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0NEQVRBU2VjdGlvblRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNDc2NjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkNEQVRBU2VjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQ0RBVEFTZWN0aW9uVGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBDREFUQVNlY3Rpb25UZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBDREFUQVNlY3Rpb25UZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgQ0RBVEFTZWN0aW9uVGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IENEQVRBU2VjdGlvblRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCUNEQVRBU2VjdGlvbiBjZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUNEQVRBU2VjdGlvbigiY29udGVudE9mQ0RBVEFTZWN0aW9uIik7Ci0JCQlhLmFwcGVuZENoaWxkKGNkYXRhKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGNkYXRhLmdldERhdGEoKSk7Ci0KLQkJCWNkYXRhLnNldERhdGEoIm5ldyBjb250ZW50Iik7Ci0KLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGNkYXRhLmdldERhdGEoKSk7Ci0KLQkJCWNkYXRhLnNldERhdGEoIm5ldyBjb250ZW50Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihjZGF0YS5nZXREYXRhKCkpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0NEQVRBU2VjdGlvblRlc3QzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlMDE0Y2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvQ0RBVEFTZWN0aW9uVGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkNEQVRBU2VjdGlvbjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgQ0RBVEFTZWN0aW9uVGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBDREFUQVNlY3Rpb25UZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBDREFUQVNlY3Rpb25UZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgQ0RBVEFTZWN0aW9uVGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IENEQVRBU2VjdGlvblRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCUNEQVRBU2VjdGlvbiBjZGF0YSA9IGRvY3VtZW50LmNyZWF0ZUNEQVRBU2VjdGlvbigiY29udGVudE9mQ0RBVEFTZWN0aW9uIik7Ci0JCQlhLmFwcGVuZENoaWxkKGNkYXRhKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGNkYXRhLmdldERhdGEoKSk7Ci0KLQkJCWNkYXRhLnNldERhdGEoIm5ldyA8IGNvbnRlbnQiKTsKLQotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJY2RhdGEuc2V0RGF0YSgibmV3ID4gY29udGVudCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oY2RhdGEuZ2V0RGF0YSgpKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0RvY1R5cGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Eb2NUeXBlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YWVkZTAzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0RvY1R5cGVUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTURvY3VtZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBEb2NUeXBlVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIERvY1R5cGVUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIERvY1R5cGVUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBEb2NUeXBlVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRG9jVHlwZVRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSURPTURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJSURPTURvY3VtZW50VHlwZSBkb2NUeXBlID0gKElET01Eb2N1bWVudFR5cGUpIGRvY3VtZW50LmNyZWF0ZURvY3R5cGUoIkhUTUwiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGRvY1R5cGUpOwotCQkJRWxlbWVudCBodG1sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSFRNTCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoaHRtbCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWRvY1R5cGUuc2V0U3lzdGVtSWQoInN5dGVtIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWRvY1R5cGUuc2V0UHVibGljSWQoInB1YmxpYyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlkb2N1bWVudC5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAiKSwgZG9jVHlwZSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRWxlbWVudFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjZjdjYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRWxlbWVudFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgRWxlbWVudFRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbGVtZW50VGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbGVtZW50VGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRWxlbWVudFRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIEVsZW1lbnQgY2hhbmdlVGFnTmFtZShFbGVtZW50IGVsZW1lbnQsIFN0cmluZyB0YWdOYW1lKSB7Ci0JCURvY3VtZW50IGRvY3VtZW50ID0gZWxlbWVudC5nZXRPd25lckRvY3VtZW50KCk7Ci0JCU5vZGUgcGFyZW50ID0gZWxlbWVudC5nZXRQYXJlbnROb2RlKCk7Ci0JCUVsZW1lbnQgbmV3RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7Ci0JCU5hbWVkTm9kZU1hcCBhdHRyaWJ1dGVzID0gZWxlbWVudC5nZXRBdHRyaWJ1dGVzKCk7Ci0JCXdoaWxlIChhdHRyaWJ1dGVzLmdldExlbmd0aCgpID4gMCkgewotCQkJQXR0ciBhdHRyID0gKEF0dHIpIGF0dHJpYnV0ZXMuaXRlbSgwKTsKLQkJCWF0dHIgPSBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZU5vZGUoYXR0cik7Ci0JCQluZXdFbGVtZW50LnNldEF0dHJpYnV0ZU5vZGUoYXR0cik7Ci0JCX0KLQkJd2hpbGUgKGVsZW1lbnQuaGFzQ2hpbGROb2RlcygpKSB7Ci0JCQlOb2RlIGNoaWxkID0gZWxlbWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQljaGlsZCA9IGVsZW1lbnQucmVtb3ZlQ2hpbGQoY2hpbGQpOwotCQkJbmV3RWxlbWVudC5hcHBlbmRDaGlsZChjaGlsZCk7Ci0JCX0KLQkJcGFyZW50Lmluc2VydEJlZm9yZShuZXdFbGVtZW50LCBlbGVtZW50KTsKLQkJcGFyZW50LnJlbW92ZUNoaWxkKGVsZW1lbnQpOwotCQlyZXR1cm4gbmV3RWxlbWVudDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRWxlbWVudFRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjxhPjxiIGU9XCJmXCIgYz1cImRcIj48ZyAvPjxoIC8+PC9iPjwvYT4iKTsKLQkJCU5vZGUgYSA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCUVsZW1lbnQgYiA9IChFbGVtZW50KSBhLmdldEZpcnN0Q2hpbGQoKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJLy9FbGVtZW50IGkgPQotCQkJY2hhbmdlVGFnTmFtZShiLCAiaSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VsZW1lbnRUZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRWxlbWVudFRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzZjFhNzUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRWxlbWVudFRlc3QyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbGVtZW50VGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbGVtZW50VGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRWxlbWVudFRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbGVtZW50VGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVsZW1lbnRUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpOwotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImMiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJYS5hcHBlbmRDaGlsZChiKTsKLQkJCWIuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEuc2V0UHJlZml4KCJ4Iik7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYS50YWdOYW1lPSIgKyBhLmdldFRhZ05hbWUoKSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWIuc2V0UHJlZml4KCJ5Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRWxlbWVudFRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFmNDY1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbGVtZW50VGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVsZW1lbnRUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVsZW1lbnRUZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbGVtZW50VGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVsZW1lbnRUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRWxlbWVudFRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ4OmEiKTsKLQkJCUVsZW1lbnQgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImIiKTsKLQkJCVRleHQgdCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJjIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCWEuYXBwZW5kQ2hpbGQoYik7Ci0JCQliLmFwcGVuZENoaWxkKHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhLnNldFByZWZpeCgiIik7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYS50YWdOYW1lPSIgKyBhLmdldFRhZ05hbWUoKSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEuc2V0UHJlZml4KCJ5Iik7Ci0KLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiYS50YWdOYW1lPSIgKyBhLmdldFRhZ05hbWUoKSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEuc2V0UHJlZml4KCJ5Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1MGNiZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW1wdHlUZXh0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW1wdHlUZXh0VGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVtcHR5VGV4dFRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW1wdHlUZXh0VGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW1wdHlUZXh0VGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW1wdHlUZXh0VGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImEiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0JCQlFbGVtZW50IGJyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQlIiKTsKLQkJCXAuYXBwZW5kQ2hpbGQoYnIpOwotCQkJVGV4dCB0ZXh0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQzID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDMsIHRleHQyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dDMuc2V0RGF0YSgiYiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlwLnJlbW92ZUNoaWxkKHRleHQyKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW1wdHlUZXh0VGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjMwMDY0NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW1wdHlUZXh0VGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbXB0eVRleHRUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbXB0eVRleHRUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW1wdHlUZXh0VGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVtcHR5VGV4dFRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImEiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5zZXREYXRhKCIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOwotCQkJcC5hcHBlbmRDaGlsZChiKTsKLQkJCXAucmVtb3ZlQ2hpbGQodGV4dCk7Ci0JCQliLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImEiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0My5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW1wdHlUZXh0VGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlkZmI3YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbXB0eVRleHRUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW1wdHlUZXh0VGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbXB0eVRleHRUZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbXB0eVRleHRUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW1wdHlUZXh0VGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVtcHR5VGV4dFRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuaW5zZXJ0QmVmb3JlKGEsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmRlYjljZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbnRpdHlUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW50aXR5VGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbnRpdHlUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbnRpdHlUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCImZ3Q7Iik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Mi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmIxNDU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3QyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBFbnRpdHlUZXN0MiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIEVudGl0eVRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEVudGl0eVRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBFbnRpdHlUZXN0MigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgRW50aXR5VGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImEmZ3Q7Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0My5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI1OTFlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0My5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5zZXREYXRhKCJhYiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImFiJiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImFiJmMiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5zZXREYXRhKCJkYWImYyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LnNldERhdGEoImRhYiZjZSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMTc0NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3Q0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW50aXR5VGVzdDQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW50aXR5VGVzdDQoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3Q0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbnRpdHlUZXN0NCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImEmYiIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKHRleHQyLCB0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dDIuc2V0RGF0YSgiYyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0Mi5zZXREYXRhKCJjYSZiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAucmVtb3ZlQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0NS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ2ZTI2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0NS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDUgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0NS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0NShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q1KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYSZiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImEmYiIpOwotCQkJcC5pbnNlcnRCZWZvcmUodGV4dDIsIHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDYuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NWE5YzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDYuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3Q2IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW50aXR5VGVzdDYuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW50aXR5VGVzdDYoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3Q2KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbnRpdHlUZXN0NigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImEmIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImEmIik7Ci0JCQlwLmluc2VydEJlZm9yZSh0ZXh0MiwgdGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ny5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGEwOTJkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0Ny5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3Q3IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW50aXR5VGVzdDcuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW50aXR5VGVzdDcoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3Q3KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbnRpdHlUZXN0NygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCS8vRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhPmEmIzY1OyYjeDQxOyZ1bms7JnVuayZ1bms8L2E+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0OC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvRW50aXR5VGVzdDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjIyZjkzOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0OC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIEVudGl0eVRlc3Q4IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgRW50aXR5VGVzdDguCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW50aXR5VGVzdDgoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIEVudGl0eVRlc3Q4KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBFbnRpdHlUZXN0OCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCS8vRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIiZpYm07JnJ0cDsiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9FbnRpdHlUZXN0OS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWVmZjhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL0VudGl0eVRlc3Q5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotCi1wdWJsaWMgY2xhc3MgRW50aXR5VGVzdDkgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBFbnRpdHlUZXN0OS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbnRpdHlUZXN0OShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgRW50aXR5VGVzdDkoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IEVudGl0eVRlc3Q5KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiJmx0OyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQodGhpcywgNCwgMCwgIiZndCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQodGhpcywgNywgMCwgIjsiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL01vZGVsVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTW9kZWxUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1OWNmZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTW9kZWxUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLldyaXRlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMuRGF0ZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy51dGlscy5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzLlN0cmluZ0NvbXBhcmVVdGlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHMuVGVzdFdyaXRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25DaGVja2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGFic3RyYWN0IGNsYXNzIE1vZGVsVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4ID0gIlBhcnNlclJlc3VsdHMiOwotCXByaXZhdGUgZmluYWwgc3RhdGljIFN0cmluZyBmaWxlRXh0ZW5zaW9uID0gIi50eHQiOwotCXByb3RlY3RlZCBUZXN0V3JpdGVyIGZPdXRwdXRXcml0ZXIgPSBuZXcgVGVzdFdyaXRlcigpOwotCXByaXZhdGUgaW50IFJFQURfQlVGRkVSX1NJWkUgPSA0MDk2OwotCi0JcHJpdmF0ZSBib29sZWFuIGVjaG9Ub1N5c3RlbU91dCA9IGZhbHNlOwotCXByaXZhdGUgYm9vbGVhbiBwcmludGVkT25jZTsKLQlwcml2YXRlIGJvb2xlYW4gcHJpbnRTdW1tYXJ5VG9TeXN0ZW1PdXQ7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgTW9kZWxUZXN0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIE1vZGVsVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQkJdHJ5IHsKLQkJCXByaW50Q2xhc3MoKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBNb2RlbFRlc3QoKSB7Ci0JCXRoaXMoImR1bW15Iik7Ci0JCS8vCQl0cnkgewotCQkvLwkJCXByaW50Q2xhc3MoKTsKLQkJLy8JCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgSURPTU1vZGVsIGNyZWF0ZUhUTUxNb2RlbCgpIHsKLQotCQkvL3JldHVybiBuZXcgWE1MTW9kZWxJbXBsKCk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdC5odG1sIiwgbmV3IE51bGxJbnB1dFN0cmVhbSgpLCBudWxsKTsKLQotCQkJLy8gYWx3YXlzIHVzZSB0aGUgc2FtZSBsaW5lIGRlbGltaXRlciBmb3IgdGhlc2UgdGVzdHMsIHJlZ2FyZGxlc3MKLQkJCS8vIG9mCi0JCQkvLyBwbGFmb3JtIG9yIHByZWZlcmVuY2Ugc2V0dGluZ3MKLQkJCW1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLnNldExpbmVEZWxpbWl0ZXIoVGVzdFdyaXRlci5jb21tb25FT0wpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQkvL2Fzc2VydFRydWUoImJhc2ljIFhNTCBlbXB0eSBtb2RlbCBjb3VsZCBub3QgYmUgY3JlYXRlZCIsIG1vZGVsICE9Ci0JCS8vIG51bGwpOwotCQlyZXR1cm4gKElET01Nb2RlbCkgbW9kZWw7Ci0KLQl9Ci0KLQlwdWJsaWMgc3RhdGljIElET01Nb2RlbCBjcmVhdGVYTUxNb2RlbCgpIHsKLQotCQkvL3JldHVybiBuZXcgWE1MTW9kZWxJbXBsKCk7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQkvL2Fzc2VydFRydWUoIm1vZGVsTWFuYWdlciBtdXN0IG5vdCBiZSBudWxsIiwgbW9kZWxNYW5hZ2VyICE9Ci0JCQkvLyBudWxsKTsKLQotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KCJ0ZXN0LnhtbCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7Ci0KLQkJCS8vIGFsd2F5cyB1c2UgdGhlIHNhbWUgbGluZSBkZWxpbWl0ZXIgZm9yIHRoZXNlIHRlc3RzLCByZWdhcmRsZXNzCi0JCQkvLyBvZgotCQkJLy8gcGxhZm9ybSBvciBwcmVmZXJlbmNlIHNldHRpbmdzCi0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5zZXRMaW5lRGVsaW1pdGVyKFRlc3RXcml0ZXIuY29tbW9uRU9MKTsKLQotCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCS8vYXNzZXJ0VHJ1ZSgiYmFzaWMgWE1MIGVtcHR5IG1vZGVsIGNvdWxkIG5vdCBiZSBjcmVhdGVkIiwgbW9kZWwgIT0KLQkJLy8gbnVsbCk7Ci0JCXJldHVybiAoSURPTU1vZGVsKSBtb2RlbDsKLQotCX0KLQotCS8qKgotCSAqLwotCXByaXZhdGUgdm9pZCBwcmludENsYXNzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGdldENsYXNzKCkuZ2V0TmFtZSgpKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRFeGNlcHRpb24oRXhjZXB0aW9uIGV4KSB7Ci0JCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwcmludE5vZGUoTm9kZSBub2RlLCBpbnQgaW5kZW50KSB7Ci0JCXRyeSB7Ci0JCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigxMCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGluZGVudDsgaSsrKQotCQkJCWJ1ZmZlci5hcHBlbmQoIi0tIik7Ci0JCQlidWZmZXIuYXBwZW5kKFN0cmluZ1V0aWxzLmVzY2FwZShub2RlLnRvU3RyaW5nKCkpKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihidWZmZXIudG9TdHJpbmcoKSk7Ci0JCQlpbmRlbnQrKzsKLQkJCU5vZGUgY2hpbGQgPSBub2RlLmdldEZpcnN0Q2hpbGQoKTsKLQkJCXdoaWxlIChjaGlsZCAhPSBudWxsKSB7Ci0JCQkJcHJpbnROb2RlKGNoaWxkLCBpbmRlbnQpOwotCQkJCWNoaWxkID0gY2hpbGQuZ2V0TmV4dFNpYmxpbmcoKTsKLQkJCX0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlwcmludEV4Y2VwdGlvbihleCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBwcmludFNvdXJjZShJRE9NTW9kZWwgbW9kZWwpIHsKLQkJdHJ5IHsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiU291cmNlIDoiKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXRUZXh0KCkpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCIiKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGV4KSB7Ci0JCQlwcmludEV4Y2VwdGlvbihleCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBwcmludFRyZWUoSURPTU1vZGVsIG1vZGVsKSB7Ci0JCXRyeSB7Ci0JCQlwcmludEZsYXRNb2RlbChtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKSk7Ci0JCQluZXcgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uQ2hlY2tlcihmT3V0cHV0V3JpdGVyKS5jaGVja01vZGVsKG1vZGVsKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiVHJlZSA6Iik7Ci0JCQlwcmludE5vZGUobW9kZWwuZ2V0RG9jdW1lbnQoKSwgMCk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIiIpOwotCi0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJcHJpbnRFeGNlcHRpb24oZXgpOwotCQl9Ci0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCkgewotCQl0cnkgewotCQkJU3RyaW5nIHRlc3RPdXRwdXREaXJlY3RvcnkgPSB0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCArIERhdGVVdGlsLm5vdygpOwotCQkJU3RyaW5nIGN1cnJlbnRGaWxlbmFtZSA9IGdldENsYXNzKCkuZ2V0TmFtZSgpICsgZmlsZUV4dGVuc2lvbjsKLQkJCUZpbGUgZmlsZW91dCA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKHRlc3RPdXRwdXREaXJlY3RvcnksIGN1cnJlbnRGaWxlbmFtZSwgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgpOwotCQkJV3JpdGVyIGZpbGVXcml0ZXIgPSBuZXcgRmlsZVdyaXRlcihmaWxlb3V0KTsKLQkJCWZpbGVXcml0ZXIud3JpdGUoZk91dHB1dFdyaXRlci50b1N0cmluZygpKTsKLQkJCWZpbGVXcml0ZXIuY2xvc2UoKTsKLQkJCWNvbXBhcmVXaXRoUHJldmlvdXNSZXN1bHRzKGZPdXRwdXRXcml0ZXIsIGN1cnJlbnRGaWxlbmFtZSk7Ci0KLQkJCWlmIChlY2hvVG9TeXN0ZW1PdXQpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZk91dHB1dFdyaXRlci50b1N0cmluZygpKTsKLQkJCX0KLQotCQkJZk91dHB1dFdyaXRlci5jbG9zZSgpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogTWV0aG9kIGNvbXBhcmVXaXRoUHJldmlvdXNSZXN1bHRzLgotCSAqIAotCSAqIEBwYXJhbSBvdXRwdXRXcml0ZXIKLQkgKiBAcGFyYW0gY3VycmVudEZpbGVuYW1lCi0JICovCi0JcHJpdmF0ZSB2b2lkIGNvbXBhcmVXaXRoUHJldmlvdXNSZXN1bHRzKFRlc3RXcml0ZXIgb3V0cHV0V3JpdGVyLCBTdHJpbmcgY3VycmVudEZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlib29sZWFuIHN1Y2Nlc3MgPSBmYWxzZTsKLQkJRmlsZSBwcmV2aW91c1Jlc3VsdHNEaXIgPSBGaWxlVXRpbC5nZXRQcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkodGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgpOwotCQlpZiAocHJldmlvdXNSZXN1bHRzRGlyICE9IG51bGwpIHsKLQkJCVN0cmluZyBjdXJyZW50UmVzdWx0cyA9IG91dHB1dFdyaXRlci50b1N0cmluZygpOwotCQkJRmlsZSBwcmV2aW91c1Jlc3VsdHNGaWxlID0gbmV3IEZpbGUocHJldmlvdXNSZXN1bHRzRGlyLCBjdXJyZW50RmlsZW5hbWUpOwotCQkJRmlsZVJlYWRlciBwcmV2aW91c1Jlc3VsdHNGaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIocHJldmlvdXNSZXN1bHRzRmlsZSk7Ci0JCQlTdHJpbmcgcHJldmlvdXNSZXN1bHRzID0gcmVhZFN0cmluZyhwcmV2aW91c1Jlc3VsdHNGaWxlUmVhZGVyKTsKLQkJCVN0cmluZ0NvbXBhcmVVdGlsIHN0cmluZ0NvbXBhcmUgPSBuZXcgU3RyaW5nQ29tcGFyZVV0aWwoKTsKLQkJCS8vIHRyeWluZyB0byAiZm9yY2UiIHRoZSBzYW1lIGxpbmVkZWxpbXRlciBkaWRuJ3Qgd29yayB3ZWxsLAotCQkJLy8gSSB0aGluayBzaW5jZSB0aGUgbGluZSBkZWxpbWl0ZXIgaXMgaW5wdXQgb24gc29tZSB0ZXN0cywKLQkJCS8vIGFuZCBDVlMgaXMgbGlrZWx5IHRvIGNoYW5nZSBhbnl3YXkgKGZvciBBU0NJSSBmaWxlcykuCi0JCQkvLyBzbyB3ZSdsbCBpZ25vcmUgaW4gb3VyIGNvbXBhcmlzb25zLiBOb3RlOiB3ZSB3b3VsZG4ndAotCQkJLy8gd2FudCB0byBpZ25vcmUgd2hpdGVzcGFjZS4gVGhlcmUgbWlnaHQgYWN0dWFsbHkgYmUgc29tZQotCQkJLy8gdGVzdHMgdGhhdCBhcmUgbm90IGFzIGFjY3VyYXRlIGlmIHdlIGlnbm9yZSBFT0wsIGJ1dCB0aGVyZQotCQkJLy8gc2VlbXMgdG8gYmUgbm8gZWFzeSB3YXkgdG8gaGFuZGxlLCB3aXRoIG91dCBhIGxvdCBvZiB0cm91YmxlLgotCQkJaWYgKCFzdHJpbmdDb21wYXJlLmVxdWFsc0lnbm9yZUxpbmVTZXBlcmF0b3IocHJldmlvdXNSZXN1bHRzLCBjdXJyZW50UmVzdWx0cykpIHsKLQkJCQkvLyBwcmV2aW91c1Jlc3VsdHMuZXF1YWxzKGN1cnJlbnRSZXN1bHRzKSkgewotCQkJCS8vIGZhaWwKLQkJCQlzdWNjZXNzID0gZmFsc2U7Ci0KLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY3VycmVudEZpbGVuYW1lICsgIiBmYWlsZWQgY29tcGFyaXNvbiB0byBwcmV2aW91cyByZXN1bHRzIik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJQcmV2aW91czogIik7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKHByZXZpb3VzUmVzdWx0cyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJDdXJyZW50OiAiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY3VycmVudFJlc3VsdHMpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJc3VjY2VzcyA9IHRydWU7Ci0JCQkJaWYgKHByaW50U3VtbWFyeVRvU3lzdGVtT3V0KSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oY3VycmVudEZpbGVuYW1lICsgIiBjb21wYXJlZCBvayIpOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoIXByaW50ZWRPbmNlKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJObyBQcmV2aW91cyBEaXJlY3RvcnkgZm91bmQgLi4uIGNvdWxkbid0IGNvbXBhcmUgIiArIGN1cnJlbnRGaWxlbmFtZSArICIgd2l0aCBwcmV2aW91cyByZXN1bHRzIik7Ci0JCQkJcHJpbnRlZE9uY2UgPSB0cnVlOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoImN1cnJlbnQgaXMgbm90IGVxdWFsIHRvIHJlZmVyZW5jZSByZXN1bHRzIGZvciAiICsgY3VycmVudEZpbGVuYW1lLCBzdWNjZXNzKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgcmVhZFN0cmluZy4KLQkgKiAKLQkgKiBAcGFyYW0gcHJldmlvdXNSZXN1bHRzRmlsZVJlYWRlcgotCSAqIEByZXR1cm4gU3RyaW5nCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgcmVhZFN0cmluZyhGaWxlUmVhZGVyIGZpbGVSZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXJldHVybiByZWFkSW5wdXRTdHJlYW0oZmlsZVJlYWRlcik7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmcgcmVhZElucHV0U3RyZWFtKElucHV0U3RyZWFtUmVhZGVyIGlucHV0U3RyZWFtUmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWNoYXIgdEJ1ZmZbXSA9IG5ldyBjaGFyW1JFQURfQlVGRkVSX1NJWkVdOwotCQl3aGlsZSAoKG51bVJlYWQgPSBpbnB1dFN0cmVhbVJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJLy8gcmVtZW1iZXIgLS0gd2UgZGlkbid0IG9wZW4gc3RyZWFtIC4uLiBzbyB3ZSBkb24ndCBjbG9zZSBpdAotCQlyZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotCi0JcHVibGljIGFic3RyYWN0IHZvaWQgdGVzdE1vZGVsKCk7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBwcmludEZsYXRNb2RlbChJU3RydWN0dXJlZERvY3VtZW50IGZsYXRNb2RlbCkgewotCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIiIpOwotCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIlN0cnVjdHVyZWREb2N1bWVudCBSZWdpb25zIDoiKTsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBmbGF0bm9kZSA9IGZsYXRNb2RlbC5nZXRGaXJzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQl3aGlsZSAoZmxhdG5vZGUgIT0gbnVsbCkgewotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZmxhdG5vZGUudG9TdHJpbmcoKSk7Ci0JCQlmbGF0bm9kZSA9IGZsYXRub2RlLmdldE5leHQoKTsKLQotCQl9Ci0JCWZPdXRwdXRXcml0ZXIud3JpdGVsbigiIik7Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTm9kZUxpc3RUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Ob2RlTGlzdFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVmNGIxNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Ob2RlTGlzdFRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZUxpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBOb2RlTGlzdFRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBQSVRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgTm9kZUxpc3RUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBOb2RlTGlzdFRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IE5vZGVMaXN0VGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5zZXRUZXh0KHRoaXMsICI8cD48L3A+Iik7Ci0JCQlOb2RlIHBhcmVudCA9IGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCAxOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMTsgaSA8IDU7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSA1OyBpIDwgMTA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSAxMDsgaSA8IDIwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMjA7IGkgPCA1MDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDUwOyBpIDwgMTAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMTAwOyBpIDwgMjAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMjAwOyBpIDwgNTAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gNTAwOyBpIDwgMTAwMDsgaSsrKSB7Ci0JCQkJcGFyZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImMiKSk7Ci0JCQl9Ci0KLQkJCWl0ZXJhdGUocGFyZW50KTsKLQotCQkJZm9yIChpbnQgaSA9IDEwMDA7IGkgPCAyMDAwOyBpKyspIHsKLQkJCQlwYXJlbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYyIpKTsKLQkJCX0KLQotCQkJaXRlcmF0ZShwYXJlbnQpOwotCi0JCQlmb3IgKGludCBpID0gMjAwMDsgaSA8IDUwMDA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0KLQkJCWZvciAoaW50IGkgPSA1MDAwOyBpIDwgMTAwMDA7IGkrKykgewotCQkJCXBhcmVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjIikpOwotCQkJfQotCi0JCQlpdGVyYXRlKHBhcmVudCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGl0ZXJhdGUoTm9kZSBwYXJlbnQpIHsKLQkJbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpbnQgaSA9IDA7Ci0JCWludCB0ID0gMDsKLQkJd2hpbGUgKHQgPCAxMDAwKSB7Ci0JCQlOb2RlTGlzdCBjaGlsZE5vZGVzID0gcGFyZW50LmdldENoaWxkTm9kZXMoKTsKLQkJCWludCBsZW5ndGggPSBjaGlsZE5vZGVzLmdldExlbmd0aCgpOwotCQkJZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7Ci0JCQkJY2hpbGROb2Rlcy5pdGVtKGkpOwotCQkJfQotCQkJLy8gdGhlc2UgMiBsaW5lcyBhcmUgcmVxdWlyZWQgdG8gaW52YWxpZGF0ZSB0aGUgY2FjaGUKLQkJCXBhcmVudC5hcHBlbmRDaGlsZChwYXJlbnQuZ2V0T3duZXJEb2N1bWVudCgpLmNyZWF0ZVRleHROb2RlKCIiKSk7Ci0JCQlwYXJlbnQucmVtb3ZlQ2hpbGQocGFyZW50LmdldExhc3RDaGlsZCgpKTsKLQkJCXQrKzsKLQkJfQotCQlmbG9hdCBkID0gKChmbG9hdCkgKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpIC0gc3RhcnQpKSAvIHQ7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihkICsgIiBtcyBmb3IgIiArIGkgKyAiIGNoaWxkIG5vZGVzIik7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL051bGxJbnB1dFN0cmVhbS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTnVsbElucHV0U3RyZWFtLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ODEwYzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvTnVsbElucHV0U3RyZWFtLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotCi0KLWNsYXNzIE51bGxJbnB1dFN0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtIHsKLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNtYXJrKGludCkKLQkgKi8KLQlwdWJsaWMgc3luY2hyb25pemVkIHZvaWQgbWFyayhpbnQgcmVhZGxpbWl0KSB7Ci0JCS8vIG5vdGhpbmcgdG8gZG8KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jbWFya1N1cHBvcnRlZCgpCi0JICovCi0JcHVibGljIGJvb2xlYW4gbWFya1N1cHBvcnRlZCgpIHsKLQkJLy8gd2UgY2FuIG1hcmsgbm90aGluZy4KLQkJLy8gYW5kLCB3ZSBhcmUgdXNpbmcgdGhpcyBOdWxsIGNsYXNzIHNwZWNpZmljYWxseSBmb3IKLQkJLy8gYSAiZmFrZSIgcmVzZXR0YWJsZSBzdHJlYW0uCi0JCXJldHVybiB0cnVlOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgamF2YS5pby5JbnB1dFN0cmVhbSNyZWFkKCkKLQkgKi8KLQlwdWJsaWMgaW50IHJlYWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCXJldHVybiAtMTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jcmVzZXQoKQotCSAqLwotCXB1YmxpYyBzeW5jaHJvbml6ZWQgdm9pZCByZXNldCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIG5vdGhpbmcgdG8gZG8KLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jc2tpcChsb25nKQotCSAqLwotCXB1YmxpYyBsb25nIHNraXAobG9uZyBuKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlyZXR1cm4gMDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QSVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BJVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTcyYThkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BJVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLlByb2Nlc3NpbmdJbnN0cnVjdGlvbjsKLQotcHVibGljIGNsYXNzIFBJVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBJVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBQSVRlc3QoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFBJVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgUElUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhPjw/ZWNobyAkUEhQX1NFTEY/PjwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJTm9kZSBhID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJZm9yIChOb2RlIGNoaWxkID0gYS5nZXRGaXJzdENoaWxkKCk7IGNoaWxkICE9IG51bGw7IGNoaWxkID0gY2hpbGQuZ2V0TmV4dFNpYmxpbmcoKSkgewotCQkJCWlmIChjaGlsZC5nZXROb2RlVHlwZSgpICE9IE5vZGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFKQotCQkJCQljb250aW51ZTsKLQkJCQlQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gcGkgPSAoUHJvY2Vzc2luZ0luc3RydWN0aW9uKSBjaGlsZDsKLQkJCQlTdHJpbmcgdGFyZ2V0ID0gcGkuZ2V0VGFyZ2V0KCk7Ci0JCQkJaWYgKHRhcmdldCA9PSBudWxsKQotCQkJCQl0YXJnZXQgPSAibnVsbCI7Ci0JCQkJU3RyaW5nIGRhdGEgPSBwaS5nZXREYXRhKCk7Ci0JCQkJaWYgKGRhdGEgPT0gbnVsbCkKLQkJCQkJZGF0YSA9ICJudWxsIjsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInRhcmdldCgiICsgdGFyZ2V0ICsgIikgZGF0YSAoIiArIGRhdGEgKyAiKSIpOwotCQkJfQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWQ5YjljLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgUGFyc2VyVGVzdCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBhcnNlclRlc3QuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgUGFyc2VyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgUGFyc2VyVGVzdCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgUGFyc2VyVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPFA+PEI+PC9CPjxCPjwvQj48L1A+PFA+PC9QPiIpOwotCQkJTm9kZSBwID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJTm9kZSBiID0gcC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlOb2RlIGIyID0gYi5nZXROZXh0U2libGluZygpOwotCQkJTm9kZSBwMiA9IHAuZ2V0TmV4dFNpYmxpbmcoKTsKLQkJCS8qCi0JCQkgKiBFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQkgKiBkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsgRWxlbWVudCBiID0KLQkJCSAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkIiKTsgcC5hcHBlbmRDaGlsZChiKTsgRWxlbWVudCBiMiA9Ci0JCQkgKiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCIik7IHAuYXBwZW5kQ2hpbGQoYjIpOyBFbGVtZW50IHAyID0KLQkJCSAqIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsgZG9jdW1lbnQuYXBwZW5kQ2hpbGQocDIpOwotCQkJICovCi0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiYSIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgKChJRE9NTm9kZSkgYikuZ2V0U3RhcnRPZmZzZXQoKSwgMCwgImIiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsICgoSURPTU5vZGUpIGIyKS5nZXRTdGFydE9mZnNldCgpLCAwLCAiYyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgKChJRE9NTm9kZSkgYjIpLmdldEVuZE9mZnNldCgpLCAwLCAiZCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgKChJRE9NTm9kZSkgcDIpLmdldFN0YXJ0T2Zmc2V0KCksIDAsICJlIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAoKElET01Ob2RlKSBwMikuZ2V0U3RhcnRPZmZzZXQoKSArIDMsIDAsICJmIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAoKElET01Ob2RlKSBwMikuZ2V0RW5kT2Zmc2V0KCksIDAsICJnIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc5MGJhMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5hbWVkTm9kZU1hcDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgUGFyc2VyVGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBQYXJzZXJUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBQYXJzZXJUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgUGFyc2VyVGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFBhcnNlclRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8YSBiPVwiXCIgIGM9XCJjXCI+Iik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYSA9IChFbGVtZW50KSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGEuZ2V0QXR0cmlidXRlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0JCQkJU3RyaW5nIG5hbWUgPSBhdHRyLmdldE5vZGVOYW1lKCk7Ci0JCQkJU3RyaW5nIHZhbHVlID0gYXR0ci5nZXROb2RlVmFsdWUoKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4obmFtZSArICI9WyIgKyB2YWx1ZSArICJdIik7Ci0JCQl9Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA4LCAwLCAiZCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWF0dHJpYnV0ZXMgPSBhLmdldEF0dHJpYnV0ZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJTm9kZSBhdHRyID0gYXR0cmlidXRlcy5pdGVtKGkpOwotCQkJCVN0cmluZyBuYW1lID0gYXR0ci5nZXROb2RlTmFtZSgpOwotCQkJCVN0cmluZyB2YWx1ZSA9IGF0dHIuZ2V0Tm9kZVZhbHVlKCk7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKG5hbWUgKyAiPVsiICsgdmFsdWUgKyAiXSIpOwotCQkJfQotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgOCwgMSwgIiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWF0dHJpYnV0ZXMgPSBhLmdldEF0dHJpYnV0ZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJTm9kZSBhdHRyID0gYXR0cmlidXRlcy5pdGVtKGkpOwotCQkJCVN0cmluZyBuYW1lID0gYXR0ci5nZXROb2RlTmFtZSgpOwotCQkJCVN0cmluZyB2YWx1ZSA9IGF0dHIuZ2V0Tm9kZVZhbHVlKCk7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKG5hbWUgKyAiPVsiICsgdmFsdWUgKyAiXSIpOwotCQkJfQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9QYXJzZXJUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTU5ZWI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4OSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5TdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFBhcnNlclRlc3QzIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgUGFyc2VyVGVzdDMuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgUGFyc2VyVGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFBhcnNlclRlc3QzKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBQYXJzZXJUZXN0MygpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCS8vU3RydWN0dXJlZERvY3VtZW50RXZlbnQgZXZlbnQgPQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8YSBiICA+Iik7Ci0JCQkvLyBkb250J3MgcHJpbnQgaW5zdGFuY2Ugb2YgZXZlbnQsIG9yIG1hbnkgdGVzdHMgd2lsbCBmYWlsIHdoZW4KLQkJCS8vIGV2ZW50IGNsYXNzIGlzIGNoYW5nZWQgKGV4YWN0bHkgd2hhdCBpcyBub3QgbmVlZGVkIGZvciB1bml0Ci0JCQkvLyB0ZXN0cyEpCi0JCQkvLyBmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXZlbnQudG9TdHJpbmcoKSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYSA9IChFbGVtZW50KSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlOYW1lZE5vZGVNYXAgYXR0cmlidXRlcyA9IGEuZ2V0QXR0cmlidXRlcygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVzLmdldExlbmd0aCgpOyBpKyspIHsKLQkJCQlOb2RlIGF0dHIgPSBhdHRyaWJ1dGVzLml0ZW0oaSk7Ci0JCQkJU3RyaW5nIG5hbWUgPSBhdHRyLmdldE5vZGVOYW1lKCk7Ci0JCQkJU3RyaW5nIHZhbHVlID0gYXR0ci5nZXROb2RlVmFsdWUoKTsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4obmFtZSArICI9WyIgKyB2YWx1ZSArICJdIik7Ci0JCQl9Ci0KLQkJCVN0cnVjdHVyZWREb2N1bWVudEV2ZW50IGV2ZW50MiA9IHN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA0LCAxLCAiIik7Ci0JCQkvLyBJIHJlbW92ZWQgdGhpcyBwYXJ0IG9mIG91dHB1dCwgc2luY2UgcmVuYW1pbmcgY2xhc3Mgb3IgcGFja2FnZQotCQkJLy8gd2lsbCBjYXVzZSB0ZXN0IHRvIGZhaWwhCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXZlbnQyLnRvU3RyaW5nKCkpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlhID0gKEVsZW1lbnQpIGRvY3VtZW50LmdldEZpcnN0Q2hpbGQoKTsKLQkJCWF0dHJpYnV0ZXMgPSBhLmdldEF0dHJpYnV0ZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5nZXRMZW5ndGgoKTsgaSsrKSB7Ci0JCQkJTm9kZSBhdHRyID0gYXR0cmlidXRlcy5pdGVtKGkpOwotCQkJCVN0cmluZyBuYW1lID0gYXR0ci5nZXROb2RlTmFtZSgpOwotCQkJCVN0cmluZyB2YWx1ZSA9IGF0dHIuZ2V0Tm9kZVZhbHVlKCk7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKG5hbWUgKyAiPVsiICsgdmFsdWUgKyAiXSIpOwotCQkJfQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1BhcnNlclRlc3Q0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNmU2MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvUGFyc2VyVGVzdDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci0KLXB1YmxpYyBjbGFzcyBQYXJzZXJUZXN0NCBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFBhcnNlclRlc3Q0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFBhcnNlclRlc3Q0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBQYXJzZXJUZXN0NCgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgUGFyc2VyVGVzdDQoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0KLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkvL0RvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8YT5cblxuPCUgYSAlPlxuPCUgYiAlPlxuPC9hPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNCwgMCwgIjwiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDUsIDAsICJiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA2LCAwLCAiYyIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgNywgMCwgImQiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDgsIDAsICJlIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCA5LCAwLCAiPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjRkMDE4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LkludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LlNvdXJjZVZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBTb3VyY2VUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU291cmNlVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTb3VyY2VUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTb3VyY2VUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTb3VyY2VUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInQiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHQpOwotCQkJU291cmNlVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBTb3VyY2VWYWxpZGF0b3IodCk7Ci0KLQkJCVN0cmluZyBzb3VyY2UgPSBudWxsOwotCQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0KLQkJCXNvdXJjZSA9ICJhYWE8YmJiPmNjYyI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICJhYWEmYW1wO1wiJ2JiYiZndDsmbHQ7Y2NjJnF1b3Q7JiM2NDsiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiJmFtcDsmJiI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICImYmJiJjw+Y2NjIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gIiZ1bms7JnVuayI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Tb3VyY2VUZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZiYmVjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9Tb3VyY2VUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU291cmNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgU291cmNlVGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTb3VyY2VUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTb3VyY2VUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU291cmNlVGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNvdXJjZVRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlBdHRyIGIgPSBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoImIiKTsKLQkJCWEuc2V0QXR0cmlidXRlTm9kZShiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJU291cmNlVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBTb3VyY2VWYWxpZGF0b3IoYik7Ci0KLQkJCVN0cmluZyBzb3VyY2UgPSBudWxsOwotCQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0KLQkJCXNvdXJjZSA9ICJhYWE8YmJiPmNjYyI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICJhYWEmYW1wO2JiYiZndDsmbHQ7Y2NjJnF1b3Q7JiM2NDsiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiJmFtcDsmJiI7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInNvdXJjZTogIiArIHNvdXJjZSk7Ci0JCQl0cnkgewotCQkJCXZhbGlkYXRvci52YWxpZGF0ZVNvdXJjZShzb3VyY2UpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IHZhbGlkYXRvci5jb252ZXJ0U291cmNlKHNvdXJjZSk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oInJlc3VsdDogIiArIHJlc3VsdCk7Ci0KLQkJCXNvdXJjZSA9ICJcImFhYVwiIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gIlwiYSdhXCIiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdDMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NvdXJjZVRlc3QzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkOWZhODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU291cmNlVGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU291cmNlVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgU291cmNlVGVzdDMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTb3VyY2VUZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTb3VyY2VUZXN0MyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU291cmNlVGVzdDMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNvdXJjZVRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlBdHRyIGIgPSBkb2N1bWVudC5jcmVhdGVBdHRyaWJ1dGUoImIiKTsKLQkJCWEuc2V0QXR0cmlidXRlTm9kZShiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJU291cmNlVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBTb3VyY2VWYWxpZGF0b3IoYik7Ci0KLQkJCVN0cmluZyBzb3VyY2UgPSBudWxsOwotCQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0KLQkJCXNvdXJjZSA9ICI8JSBhYWEgJT48JT0gYmJiICU+LzwlISBjY2MgJT5kZGQiOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJzb3VyY2U6ICIgKyBzb3VyY2UpOwotCQkJdHJ5IHsKLQkJCQl2YWxpZGF0b3IudmFsaWRhdGVTb3VyY2Uoc291cmNlKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0JCQlyZXN1bHQgPSB2YWxpZGF0b3IuY29udmVydFNvdXJjZShzb3VyY2UpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJyZXN1bHQ6ICIgKyByZXN1bHQpOwotCi0JCQlzb3VyY2UgPSAiPCUgYWFhIjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc291cmNlID0gIj48ICUgYWFhICU+IjsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigic291cmNlOiAiICsgc291cmNlKTsKLQkJCXRyeSB7Ci0JCQkJdmFsaWRhdG9yLnZhbGlkYXRlU291cmNlKHNvdXJjZSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gdmFsaWRhdG9yLmNvbnZlcnRTb3VyY2Uoc291cmNlKTsKLQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigicmVzdWx0OiAiICsgcmVzdWx0KTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZiOWRlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBTcGxpdFRleHRUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTcGxpdFRleHRUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWFiYmJiY2NjIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gdGV4dC5zcGxpdFRleHQoMik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDMgPSB0ZXh0Mi5zcGxpdFRleHQoNCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAucmVtb3ZlQ2hpbGQodGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0ZXh0LmFwcGVuZERhdGEoImRkZGRkZGQiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dDMuYXBwZW5kRGF0YSgiZWVlIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAuaW5zZXJ0QmVmb3JlKHRleHQyLCB0ZXh0Myk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmMwOWQwYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0Mi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0Mi4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3QyKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWFiYmJiY2NjIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gdGV4dC5zcGxpdFRleHQoMik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDMgPSB0ZXh0Mi5zcGxpdFRleHQoNCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXAucmVtb3ZlQ2hpbGQodGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJCIik7Ci0JCQliLmFwcGVuZENoaWxkKHRleHQyKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKGIsIHRleHQzKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0My5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWIzY2MxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3QzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBTcGxpdFRleHRUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNwbGl0VGV4dFRlc3QzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNwbGl0VGV4dFRlc3QzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTcGxpdFRleHRUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU3BsaXRUZXh0VGVzdDMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhYSIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOwotCQkJVGV4dCB0ZXh0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJiYmJiIik7Ci0JCQliLmFwcGVuZENoaWxkKHRleHQyKTsKLQkJCXAuYXBwZW5kQ2hpbGQoYik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDMgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiY2NjIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQzKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5yZW1vdmVDaGlsZChiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5pbnNlcnRCZWZvcmUoYiwgdGV4dDMpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3ZWI5NmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3Q0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdDQuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDQoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0NCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5hcHBlbmREYXRhKCJhYWEiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5kZWxldGVEYXRhKDAsIDMpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlUZXh0IHRleHQyID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImNjY2MiKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKHRleHQyLCB0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5hcHBlbmREYXRhKCJhYWEiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0KLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ODYxZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFNwbGl0VGV4dFRlc3Q1IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgU3BsaXRUZXh0VGVzdDUuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q1KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBTcGxpdFRleHRUZXN0NSgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImFhYmJiYmNjYyIpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MiA9IHRleHQuc3BsaXRUZXh0KDYpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGJyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQlIiKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKGJyLCB0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQyLnNldERhdGEoImNjY2QiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dDIuc2V0RGF0YSgiY2NjZGUiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0ZXh0MyA9IHRleHQuc3BsaXRUZXh0KDIpOwotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOwotCQkJYi5hcHBlbmRDaGlsZCh0ZXh0Myk7Ci0JCQlwLmluc2VydEJlZm9yZShiLCBicik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDQgPSB0ZXh0Mi5zcGxpdFRleHQoMyk7Ci0JCQlFbGVtZW50IGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJIik7Ci0JCQlpLmFwcGVuZENoaWxkKHRleHQyKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKGksIHRleHQ0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q2LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0Ni5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNjVmNDI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1NwbGl0VGV4dFRlc3Q2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBTcGxpdFRleHRUZXN0NiBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFNwbGl0VGV4dFRlc3Q2LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFNwbGl0VGV4dFRlc3Q2KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTcGxpdFRleHRUZXN0NigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgU3BsaXRUZXh0VGVzdDYoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJQIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChwKTsKLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJhYWJiYmJjY2MiKTsKLQkJCXAuYXBwZW5kQ2hpbGQodGV4dCk7Ci0JCQlUZXh0IHRleHQyID0gdGV4dC5zcGxpdFRleHQoMik7Ci0JCQkvLyA9PT4gLy8gVGV4dCB0ZXh0MyA9Ci0JCQl0ZXh0Mi5zcGxpdFRleHQoNCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRleHQyLnNldERhdGEoImJiYmJkIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0Ny5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFhYjI3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0Ny5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdDcgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0Ny4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0NyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDcoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3Q3KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWFhYSIpOwotCQkJVGV4dCB0ZXh0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJiYmJiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQotCQkJLy8gZGVsZXRlIGFjY3Jvc3Mgbm9kZSBib3VuZHJ5Ci0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5yZXBsYWNlVGV4dCh0aGlzLCA2LCAzLCAiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0OC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvU3BsaXRUZXh0VGVzdDguamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmE5NGU0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9TcGxpdFRleHRUZXN0OC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgU3BsaXRUZXh0VGVzdDggZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTcGxpdFRleHRUZXN0OC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBTcGxpdFRleHRUZXN0OChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgU3BsaXRUZXh0VGVzdDgoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFNwbGl0VGV4dFRlc3Q4KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYWFhYSIpOwotCQkJVGV4dCB0ZXh0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJiYmJiIik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCQkJcC5hcHBlbmRDaGlsZCh0ZXh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQotCQkJLy8gZGVsZXRlIGFjY3Jvc3Mgbm9kZSBib3VuZHJ5Ci0JCQltb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5yZXBsYWNlVGV4dCh0aGlzLCA0LCA2LCAiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UYWJsZVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RhYmxlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjg1MWU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RhYmxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVGFibGVUZXN0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVGFibGVUZXN0LgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRhYmxlVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVGFibGVUZXN0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBUYWJsZVRlc3QoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJRWxlbWVudCBodG1sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSFRNTCIpOwotCQlkb2N1bWVudC5hcHBlbmRDaGlsZChodG1sKTsKLQotCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJRWxlbWVudCBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQk9EWSIpOwotCQlodG1sLmFwcGVuZENoaWxkKGJvZHkpOwotCi0JCXByaW50U291cmNlKG1vZGVsKTsKLQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQlFbGVtZW50IHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiVEFCTEUiKTsKLQkJdGFibGUuc2V0QXR0cmlidXRlKCJib3JkZXIiLCAiMSIpOwotCQlFbGVtZW50IHRkID0gbnVsbDsKLQkJZm9yIChpbnQgcm93ID0gMDsgcm93IDwgMjsgcm93KyspIHsKLQkJCUVsZW1lbnQgdHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJUUiIpOwotCQkJdGFibGUuYXBwZW5kQ2hpbGQodHIpOwotCQkJZm9yIChpbnQgY29sID0gMDsgY29sIDwgMjsgY29sKyspIHsKLQkJCQl0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlREIik7Ci0JCQkJdHIuYXBwZW5kQ2hpbGQodGQpOwotCQkJfQotCQl9Ci0JCWJvZHkuYXBwZW5kQ2hpbGQodGFibGUpOwotCi0JCXByaW50U291cmNlKG1vZGVsKTsKLQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQlFbGVtZW50IGZvbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJGT05UIik7Ci0JCWZvbnQuc2V0QXR0cmlidXRlKCJjb2xvciIsICJyZWQiKTsKLQkJVGV4dCB0ZXh0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoInRleHQiKTsKLQkJZm9udC5hcHBlbmRDaGlsZCh0ZXh0KTsKLQkJdGQuYXBwZW5kQ2hpbGQoZm9udCk7Ci0KLQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQlwcmludFRyZWUobW9kZWwpOwotCi0JCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTI1YWMxOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQ2hhcmFjdGVyRGF0YTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVGV4dFRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBUZXh0VGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBUZXh0VGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVGV4dFRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFRleHRUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCUNoYXJhY3RlckRhdGEgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ0ZXh0Iik7Ci0JCQlhLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQl0ZXh0LnNldERhdGEoImhlbGxvICZsdDsiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKHRleHQuZ2V0RGF0YSgpKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1RleHRUZXN0Mi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5M2U2MWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5DaGFyYWN0ZXJEYXRhOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXh0VGVzdDIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBUZXh0VGVzdDIuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVGV4dFRlc3QyKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBUZXh0VGVzdDIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFRleHRUZXN0MigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlDaGFyYWN0ZXJEYXRhIHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgidGV4dCIpOwotCQkJYS5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJdGV4dC5zZXROb2RlVmFsdWUoImhlbGxvICZsdDsiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKHRleHQuZ2V0Tm9kZVZhbHVlKCkpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVGV4dFRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI1ZDExYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9UZXh0VGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmRvY3VtZW50LkludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFRleHRUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFRleHRUZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBUZXh0VGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFRleHRUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVGV4dFRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCUlET01Ob2RlIHRleHQgPSAoSURPTU5vZGUpIGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ0ZXh0Iik7Ci0JCQlhLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQl0cnkgewotCQkJCXRleHQuc2V0U291cmNlKCJoZWxsbyA8Iik7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0cnkgewotCQkJCXRleHQuc2V0U291cmNlKCJoZWxsbyAmbHQ7Iik7Ci0JCQl9Ci0JCQljYXRjaCAoSW52YWxpZENoYXJhY3RlckV4Y2VwdGlvbiBleCkgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihleC5nZXRNZXNzYWdlKCkpOwotCQkJfQotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQl0cnkgewotCQkJCXRleHQuc2V0U291cmNlKCJoZWxsbyAmdW5rOyIpOwotCQkJfQotCQkJY2F0Y2ggKEludmFsaWRDaGFyYWN0ZXJFeGNlcHRpb24gZXgpIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZXguZ2V0TWVzc2FnZSgpKTsKLQkJCX0KLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdHJ5IHsKLQkJCQl0ZXh0LnNldFNvdXJjZSgiaGVsbG8gJiM2NTsiKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXRyeSB7Ci0JCQkJdGV4dC5zZXRTb3VyY2UoImhlbGxvICYgZ29vZC1ieWUiKTsKLQkJCX0KLQkJCWNhdGNoIChJbnZhbGlkQ2hhcmFjdGVyRXhjZXB0aW9uIGV4KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGV4LmdldE1lc3NhZ2UoKSk7Ci0JCQl9Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDU5NjVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdC4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBodG1sID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiSFRNTCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoaHRtbCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgYm9keSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkJPRFkiKTsKLQkJCWh0bWwuYXBwZW5kQ2hpbGQoYm9keSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWJvZHkuYXBwZW5kQ2hpbGQocCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJ0ZXh0Iik7Ci0JCQlwLmFwcGVuZENoaWxkKHRleHQpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGJyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQlIiKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKGJyLCB0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJJTUciKTsKLQkJCXAuYXBwZW5kQ2hpbGQoaW1nKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5yZW1vdmVDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJcC5pbnNlcnRCZWZvcmUodGV4dCwgaW1nKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYm9keS5yZW1vdmVDaGlsZChwKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYm9keS5hcHBlbmRDaGlsZChwKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTAuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTAuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhiNmE5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEwLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MTAgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDEwLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MTAoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MTAoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MTAoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJYS5zZXRBdHRyaWJ1dGUoImIiLCAiYyIpOwotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpOwotCQkJYS5hcHBlbmRDaGlsZChiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOiIpOwotCQkJSURPTU5vZGUgbm9kZSA9IChJRE9NTm9kZSkgYjsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZmxhdE5vZGUgPSBub2RlLmdldFN0YXJ0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZmxhdE5vZGUuZ2V0VGV4dCgpKTsKLQkJCUl0ZXJhdG9yIGUgPSBmbGF0Tm9kZS5nZXRSZWdpb25zKCkuaXRlcmF0b3IoKTsKLQkJCWludCBpID0gMDsKLQkJCXdoaWxlIChlLmhhc05leHQoKSkgewotCQkJCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IChJVGV4dFJlZ2lvbikgZS5uZXh0KCk7Ci0JCQkJYm9vbGVhbiBvayA9IHRydWU7IC8vIG5vIGxvbmdlciBoYXMgcGFyZW50LgotCQkJCQkJCQkgICAvLyAvLyhyZWdpb24uZ2V0UGFyZW50KCkgPT0gZmxhdE5vZGUpOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihpICsgIigiICsgZmxhdE5vZGUuZ2V0VGV4dChyZWdpb24pICsgIikiICsgb2spOwotCQkJfQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCIiKTsKLQotCQkJYi5zZXRBdHRyaWJ1dGUoImMiLCAiZCIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb246Iik7Ci0JCQlub2RlID0gKElET01Ob2RlKSBiOwotCQkJZmxhdE5vZGUgPSBub2RlLmdldFN0YXJ0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oZmxhdE5vZGUuZ2V0VGV4dCgpKTsKLQkJCWUgPSBmbGF0Tm9kZS5nZXRSZWdpb25zKCkuaXRlcmF0b3IoKTsKLQkJCWkgPSAwOwotCQkJd2hpbGUgKGUuaGFzTmV4dCgpKSB7Ci0JCQkJSVRleHRSZWdpb24gcmVnaW9uID0gKElUZXh0UmVnaW9uKSBlLm5leHQoKTsKLQkJCQlib29sZWFuIG9rID0gdHJ1ZTsgLy8gbm8gbG9uZ2VyIGhhcyBwYXJlbnQuCi0JCQkJCQkJCSAgIC8vIChyZWdpb24uZ2V0UGFyZW50KCkgPT0gZmxhdE5vZGUpOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihpICsgIigiICsgZmxhdE5vZGUuZ2V0VGV4dChyZWdpb24pICsgIikiICsgb2spOwotCQkJfQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCIiKTsKLQotCQkJYS5zZXRBdHRyaWJ1dGUoImIiLCAiY2QiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOiIpOwotCQkJbm9kZSA9IChJRE9NTm9kZSkgYjsKLQkJCWZsYXROb2RlID0gbm9kZS5nZXRTdGFydFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpOwotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKGZsYXROb2RlLmdldFRleHQoKSk7Ci0JCQllID0gZmxhdE5vZGUuZ2V0UmVnaW9ucygpLml0ZXJhdG9yKCk7Ci0JCQlpID0gMDsKLQkJCXdoaWxlIChlLmhhc05leHQoKSkgewotCQkJCUlUZXh0UmVnaW9uIHJlZ2lvbiA9IChJVGV4dFJlZ2lvbikgZS5uZXh0KCk7Ci0JCQkJYm9vbGVhbiBvayA9IHRydWU7IC8vIChyZWdpb24uZ2V0UGFyZW50KCkgPT0gZmxhdE5vZGUpOwotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbihpICsgIigiICsgZmxhdE5vZGUuZ2V0VGV4dChyZWdpb24pICsgIikiICsgb2spOwotCQkJfQotCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCIiKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDExLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDExLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhZjZmYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QxMSBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0MTEuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3QxMShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QxMSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QxMSgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYiIpOwotCQkJYS5hcHBlbmRDaGlsZCh0ZXh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJdGV4dC5zZXREYXRhKCJiIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMzEzYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxMi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MTIgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDEyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MTIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MTIoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MTIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IGEyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuaW5zZXJ0QmVmb3JlKGEyLCBhKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJZG9jdW1lbnQucmVtb3ZlQ2hpbGQoYTIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0MTMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODEzNDE3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDEzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MTMgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDEzLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MTMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MTMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MTMoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQucmVwbGFjZVRleHQobnVsbCwgMCwgMCwgIjxhPlxyXG48Yj5cclxuPC9hPiIpOwotCi0JCQlFbGVtZW50IGEgPSAoRWxlbWVudCkgZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJRWxlbWVudCBiID0gKEVsZW1lbnQpIGEuZ2V0TGFzdENoaWxkKCk7Ci0JCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICAiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodGV4dCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCWEucmVtb3ZlQ2hpbGQoYik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDE0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDE0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyN2M5ZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxNC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MTQgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDE0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MTQoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MTQoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MTQoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPCU9IGFhYWEgJT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDIsIDAsICIgIik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDE1LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDE1LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzMmIxMWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QxNS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MTUgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDE1LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MTUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MTUoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0MTUoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCS8vIFhNTCBjYXNlCi0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJLy9Eb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCXN0cnVjdHVyZWREb2N1bWVudC5yZXBsYWNlVGV4dChudWxsLCAwLCAwLCAiPCU9IGFhYWEgJT48UD4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJLy8JSFRNTCBjYXNlCi0JCQltb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQkJc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkvL2RvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDAsIDAsICI8JT0gYWFhYSAlPjxQPiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI1ZGExYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3QyIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3QyLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0MihTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3QyKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDIoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZUhUTUxNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxIVE1MPlxyXG48SEVBRD48L0hFQUQ+XHJcbjxCT0RZPjwvQk9EWT5cclxuPC9IVE1MPlxyXG4iKTsKLQkJCUVsZW1lbnQgaHRtbCA9IChFbGVtZW50KSBkb2N1bWVudC5nZXRGaXJzdENoaWxkKCk7Ci0JCQlFbGVtZW50IGhlYWQgPSAoRWxlbWVudCkgaHRtbC5nZXRGaXJzdENoaWxkKCkuZ2V0TmV4dFNpYmxpbmcoKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBtZXRhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiTUVUQSIpOwotCQkJbWV0YS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCAiR0VORVJBVE9SIik7Ci0JCQltZXRhLnNldEF0dHJpYnV0ZSgiY29udGVudCIsICJVcGRhdGVyIFRlc3QgMiIpOwotCQkJaGVhZC5hcHBlbmRDaGlsZChtZXRhKTsKLQkJCVRleHQgdGV4dDQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXHJcbiIpOwotCQkJaGVhZC5pbnNlcnRCZWZvcmUodGV4dDQsIG1ldGEpOwotCQkJVGV4dCB0ZXh0NSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcclxuIik7Ci0JCQloZWFkLmFwcGVuZENoaWxkKHRleHQ1KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlRJVExFIik7Ci0JCQlUZXh0IHRleHQ2ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwotCQkJdGl0bGUuYXBwZW5kQ2hpbGQodGV4dDYpOwotCQkJaGVhZC5hcHBlbmRDaGlsZCh0aXRsZSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3QzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2U4ZmI3Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0MyBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0My4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDMoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0MygpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3QzKCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCQlFbGVtZW50IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChhKTsKLQkJCUVsZW1lbnQgYiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImIiKTsKLQkJCWEuYXBwZW5kQ2hpbGQoYik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdDEgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXG4iKTsKLQkJCWEuaW5zZXJ0QmVmb3JlKHQxLCBiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJVGV4dCB0MiA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJcbiIpOwotCQkJYS5hcHBlbmRDaGlsZCh0Mik7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0NC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NjRlNTY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0NC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uRWxlbWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5UZXh0OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3Q0IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3Q0LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0NChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3Q0KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDQoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKGEpOwotCQkJVGV4dCB0ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoImIiKTsKLQkJCWEuYXBwZW5kQ2hpbGQodCk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCXQuc2V0RGF0YSgiYiIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q1LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzMyZTlmNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0NSBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0NS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0NSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3Q1KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVYTUxNb2RlbCgpOwotCQl0cnkgewotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQotCQkJc3RydWN0dXJlZERvY3VtZW50LnNldFRleHQodGhpcywgIjxhPiZhcG9zOzwvYT4iKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJTm9kZSBhID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCQkJTm9kZSB0ID0gYS5nZXRGaXJzdENoaWxkKCk7Ci0JCQlhLnJlbW92ZUNoaWxkKHQpOwotCQkJYS5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Ni5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q2LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhMjgzOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q2LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci0KLXB1YmxpYyBjbGFzcyBVcGRhdGVyVGVzdDYgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBVcGRhdGVyVGVzdDYuCi0JICogCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgVXBkYXRlclRlc3Q2KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBVcGRhdGVyVGVzdDYoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFVwZGF0ZXJUZXN0NigpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlWE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQoYSk7Ci0JCQlUZXh0IHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiYiIpOwotCQkJYS5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5yZW1vdmVDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJYS5hcHBlbmRDaGlsZCh0KTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0Ny5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjMDQxODguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q3LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3Q3IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3Q3LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0NyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3Q3KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDcoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCQkJRWxlbWVudCBiID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiQiIpOwotCQkJcC5hcHBlbmRDaGlsZChiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJRWxlbWVudCBiMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkIiKTsKLQkJCXAuaW5zZXJ0QmVmb3JlKGIyLCBiKTsKLQotCQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQkJcHJpbnRUcmVlKG1vZGVsKTsKLQotCQkJc2F2ZUFuZENvbXBhcmVUZXN0UmVzdWx0cygpOwotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvcGFyc2VyL1VwZGF0ZXJUZXN0OC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q4LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NGY0N2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q4LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMucGFyc2VyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3Q4IGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3Q4LgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0OChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3Q4KCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdDgoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0KLQkJCUVsZW1lbnQgcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlAiKTsKLQkJCWRvY3VtZW50LmFwcGVuZENoaWxkKHApOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlFbGVtZW50IHAyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiUCIpOwotCQkJZG9jdW1lbnQuYXBwZW5kQ2hpbGQocDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3Q5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmOTE2NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdDkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZG9jdW1lbnQuSURPTU1vZGVsOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uVGV4dDsKLQotcHVibGljIGNsYXNzIFVwZGF0ZXJUZXN0OSBleHRlbmRzIE1vZGVsVGVzdCB7Ci0JLyoqCi0JICogQ29uc3RydWN0b3IgZm9yIFVwZGF0ZXJUZXN0OS4KLQkgKiAKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBVcGRhdGVyVGVzdDkoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIFVwZGF0ZXJUZXN0OSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihqYXZhLmxhbmcuU3RyaW5nW10gYXJncykgewotCQluZXcgVXBkYXRlclRlc3Q5KCkudGVzdE1vZGVsKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE1vZGVsKCkgewotCQlJRE9NTW9kZWwgbW9kZWwgPSBjcmVhdGVIVE1MTW9kZWwoKTsKLQkJdHJ5IHsKLQkJCURvY3VtZW50IGRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLQotCQkJRWxlbWVudCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIlNUWUxFIik7Ci0JCQlkb2N1bWVudC5hcHBlbmRDaGlsZChzdHlsZSk7Ci0KLQkJCXByaW50U291cmNlKG1vZGVsKTsKLQkJCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJCVRleHQgdGV4dDIgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgicCIpOwotCQkJc3R5bGUuYXBwZW5kQ2hpbGQodGV4dDIpOwotCi0JCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCQlwcmludFRyZWUobW9kZWwpOwotCi0JCQlzYXZlQW5kQ29tcGFyZVRlc3RSZXN1bHRzKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJhM2MyZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9VcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5wYXJzZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlN0cnVjdHVyZWREb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotCi1wdWJsaWMgY2xhc3MgVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkIGV4dGVuZHMgTW9kZWxUZXN0IHsKLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkLgotCSAqIAotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFVwZGF0ZXJUZXN0UmVnaW9uQ2hhbmdlZChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgVXBkYXRlclRlc3RSZWdpb25DaGFuZ2VkKCkgewotCQlzdXBlcigpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKGphdmEubGFuZy5TdHJpbmdbXSBhcmdzKSB7Ci0JCW5ldyBVcGRhdGVyVGVzdFJlZ2lvbkNoYW5nZWQoKS50ZXN0TW9kZWwoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TW9kZWwoKSB7Ci0JCUlET01Nb2RlbCBtb2RlbCA9IGNyZWF0ZVhNTE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlEb2N1bWVudCBkb2N1bWVudCA9IG1vZGVsLmdldERvY3VtZW50KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlzdHJ1Y3R1cmVkRG9jdW1lbnQuc2V0VGV4dCh0aGlzLCAiPGEgYj0gYz48L2E+Iik7Ci0KLQkJCU5vZGUgYmVmb3JlID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlTdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCBmbUV2ZW50ID0gc3RydWN0dXJlZERvY3VtZW50LnJlcGxhY2VUZXh0KG51bGwsIDUsIDEsICIiKTsKLQkJCWlmIChmbUV2ZW50IGluc3RhbmNlb2YgUmVnaW9uQ2hhbmdlZEV2ZW50KSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJvazogUmVnaW9uQ2hhbmdlZEV2ZW50Iik7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlmT3V0cHV0V3JpdGVyLndyaXRlbG4oIm5vdCBvazogIiArIGZtRXZlbnQuZ2V0Q2xhc3MoKS5nZXROYW1lKCkpOwotCQkJfQotCi0JCQlOb2RlIGFmdGVyID0gZG9jdW1lbnQuZ2V0Rmlyc3RDaGlsZCgpOwotCi0JCQlpZiAoYmVmb3JlICE9IGFmdGVyKSB7Ci0JCQkJZk91dHB1dFdyaXRlci53cml0ZWxuKCJub3Qgb2s6IE5vZGUgcmVwbGFjZWQiKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZPdXRwdXRXcml0ZXIud3JpdGVsbigib2s6IE5vZGUgbm90IHJlcGxhY2VkIik7Ci0JCQl9Ci0KLQkJCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9jc3MvU3R5bGVUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3BhcnNlci9jc3MvU3R5bGVUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5YTU4MmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy9wYXJzZXIvY3NzL1N0eWxlVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5jc3M7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnBhcnNlci5Nb2RlbFRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLlRleHQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uY3NzLkNTU1N0eWxlU2hlZXQ7Ci1pbXBvcnQgb3JnLnczYy5kb20uc3R5bGVzaGVldHMuRG9jdW1lbnRTdHlsZTsKLWltcG9ydCBvcmcudzNjLmRvbS5zdHlsZXNoZWV0cy5MaW5rU3R5bGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uc3R5bGVzaGVldHMuU3R5bGVTaGVldExpc3Q7Ci0KLXB1YmxpYyBjbGFzcyBTdHlsZVRlc3QgZXh0ZW5kcyBNb2RlbFRlc3QgewotCS8qKgotCSAqIENvbnN0cnVjdG9yIGZvciBTdHlsZVRlc3QuCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgU3R5bGVUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBTdHlsZVRlc3QoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oamF2YS5sYW5nLlN0cmluZ1tdIGFyZ3MpIHsKLQkJbmV3IFN0eWxlVGVzdCgpLnRlc3RNb2RlbCgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNb2RlbCgpIHsKLQkJSURPTU1vZGVsIG1vZGVsID0gY3JlYXRlSFRNTE1vZGVsKCk7IC8vbmV3IEhUTUxNb2RlbEltcGwoKTsKLQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBtb2RlbC5nZXREb2N1bWVudCgpOwotCi0JCUVsZW1lbnQgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJTVFlMRSIpOwotCQlUZXh0IHRleHQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiQk9EWSB7IGNvbG9yIDogcmVkOyB9IFAgeyBjb2xvciA6IGdyZWVuOyB9IEIgeyBjb2xvciA6IGJsdWU7IH0iKTsKLQkJc3R5bGUuYXBwZW5kQ2hpbGQodGV4dCk7Ci0JCWRvY3VtZW50LmFwcGVuZENoaWxkKHN0eWxlKTsKLQotCQlwcmludFNvdXJjZShtb2RlbCk7Ci0JCXByaW50VHJlZShtb2RlbCk7Ci0KLQkJRG9jdW1lbnRTdHlsZSBkcyA9IChEb2N1bWVudFN0eWxlKSBkb2N1bWVudDsKLQkJU3R5bGVTaGVldExpc3Qgc3NsID0gZHMuZ2V0U3R5bGVTaGVldHMoKTsKLQkJaWYgKHNzbC5nZXRMZW5ndGgoKSA+IDApIHsKLQkJCUNTU1N0eWxlU2hlZXQgc3MgPSAoQ1NTU3R5bGVTaGVldCkgc3NsLml0ZW0oMCk7Ci0JCQlzcy5kZWxldGVSdWxlKDEpOwotCQl9Ci0KLQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQlwcmludFRyZWUobW9kZWwpOwotCi0JCUxpbmtTdHlsZSBscyA9IChMaW5rU3R5bGUpIHN0eWxlOwotCQlDU1NTdHlsZVNoZWV0IHNzMiA9IChDU1NTdHlsZVNoZWV0KSBscy5nZXRTaGVldCgpOwotCQlpZiAoc3MyICE9IG51bGwpIHsKLQkJCXNzMi5kZWxldGVSdWxlKDApOwotCQl9Ci0KLQkJcHJpbnRTb3VyY2UobW9kZWwpOwotCQlwcmludFRyZWUobW9kZWwpOwotCi0JCXNhdmVBbmRDb21wYXJlVGVzdFJlc3VsdHMoKTsKLQotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC9TdHlsZUFkYXB0ZXJQZXJmVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L1N0eWxlQWRhcHRlclBlcmZUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyMmM5MjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L1N0eWxlQWRhcHRlclBlcmZUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogCQlNYXNha2kgU2FpdG9oIChNU0FJVE9IQGpwLmlibS5jb20pCi0gKgkJU2VlIEJ1ZyAxNTMwMDAgIFN0eWxlIEFkYXB0ZXJzIHNob3VsZCBiZSBsYXppZXIKLSAqCQlodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTUzMDAwCi0gKgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudGV4dDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSFRNTDQwTmFtZXNwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01Nb2RlbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlOwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGVMaXN0OwotaW1wb3J0IG9yZy53M2MuZG9tLnN0eWxlc2hlZXRzLkxpbmtTdHlsZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFN0eWxlQWRhcHRlclBlcmZUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogY3JpdGVyaWEgZm9yICJmYWlsIiwgaW4gbXNlY3MKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIE1BWF9FWFBFQ1RFRF9USU1FID0gNDAwMDsKLQotCXB1YmxpYyB2b2lkIHRlc3RQZXJmb3JtYW5jZSgpIHsKLQkJdHJ5IHsKLQkJCVN0cmluZyBmaWxlbmFtZSA9ICJ0ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDQuaHRtbCI7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSksIG51bGwpOwotCQkJaWYgKG1vZGVsIGluc3RhbmNlb2YgSURPTU1vZGVsKSB7Ci0JCQkJSURPTURvY3VtZW50IGRvYyA9ICgoSURPTU1vZGVsKSBtb2RlbCkuZ2V0RG9jdW1lbnQoKTsKLQkJCQlOb2RlTGlzdCBub2RlcyA9IGRvYy5nZXRFbGVtZW50c0J5VGFnTmFtZShIVE1MNDBOYW1lc3BhY2UuRWxlbWVudE5hbWUuU1RZTEUpOwotCQkJCWlmIChub2RlcyAhPSBudWxsICYmIG5vZGVzLmdldExlbmd0aCgpID4gMCkgewotCQkJCQlOb2RlIG5vZGUgPSBub2Rlcy5pdGVtKDApOwotCQkJCQlpZiAobm9kZSBpbnN0YW5jZW9mIExpbmtTdHlsZSkgewotCQkJCQkJbG9uZyBzdGFydCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQkJCQkJKChMaW5rU3R5bGUpIG5vZGUpLmdldFNoZWV0KCk7Ci0JCQkJCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oImVsYXBzZWQgdGltZSA9ICIgKyAoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydCkpOwotCQkJCQkJLy8gVE9ETzogd2Ugc2hvdWxkIHByb2JhYmx5IHVzZSBzb21ldGhpbmcgbGlrc2Ugby5lLmNvcmUucnVudGltZS5QZXJmb3JtYW5jZVN0YXRzCi0JCQkJCQkvLyBJIHBpY2tlZCB0aGUgZm9sbG93aW5nIGZhaWwgY3JpdGVyaWEgc2ltcGxlIHNpbmNlIGJlZm9yZSBmaXgsIHRoZSBwcmludGxpbiByZXBvcnRzIGFib3V0IDcwMDAgCi0JCQkJCQkvLyBvbiBteSBjb21wdXRlciwgYnV0IHdpdGggZml4LCByZXBvcnRlZCBhYm91dCAxMDAwLiAKLQkJCQkJCS8vIFRoZSBhcHByb3ByaWF0ZSB0aW1lIG1heSB2YXJ5IGdyZWF0bHkgZGVwZW5kaW5nIG9uIHRoZSBidWlsZC90ZXN0IG1hY2hpbmUuIAotCQkJCQkJLy8gVGhpcyBpcyBqdXN0IHRvIGNhdGNoIHNvbWUgbGFyZ2UgY2hhbmdlIGluIGJlaGF2aW9yCi0JCQkJCQlsb25nIGVsYXBzZWRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgLSBzdGFydDsKLQkJCQkJCWlmIChlbGFwc2VkVGltZSA+IE1BWF9FWFBFQ1RFRF9USU1FKSB7Ci0JCQkJCQkJZmFpbCgiZ2V0U2hlZXQgdG9vayBsb25nZXIgdGhhbiBleHBlY3RlZCB0aGUgZXhwZWN0ZWQgIiArIE1BWF9FWFBFQ1RFRF9USU1FICsibXMiKTsKLQkJCQkJCX0gCi0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbVJlYWQoKTsKLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJfQotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L1Rlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJIVE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckhUTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmNkZTBkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckhUTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudGV4dDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ0J1ZmZlcklucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUeXBlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRleHQuSUhUTUxQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmc7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnV0aWxzLlN0cmluZ1V0aWxzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXh0LklYTUxQYXJ0aXRpb25zOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5EZWNpbWFsRm9ybWF0OwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lckhUTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGJvb2xlYW4gREVCVUdfUFJJTlRfUkVTVUxUID0gZmFsc2U7Ci0JcHJvdGVjdGVkIElUeXBlZFJlZ2lvbltdIHBhcnRpdGlvbnMgPSBudWxsOwotCi0JcHJpdmF0ZSBib29sZWFuIHVzZUZvcm1hdHRlciA9IHRydWU7Ci0JcHJvdGVjdGVkIERlY2ltYWxGb3JtYXQgZm9ybWF0dGVyOwotCi0JcHVibGljIFRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJIVE1MKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikKLQkJCWZvcm1hdHRlciA9IG5ldyBEZWNpbWFsRm9ybWF0KCk7Ci0JfQotCQotCS8qKgotCSAqIG11c3QgcmVsZWFzZSBtb2RlbCAoZnJvbSBlZGl0KSBhZnRlcgotCSAqIEBwYXJhbSBmaWxlbmFtZSByZWxhdGl2ZSB0byB0aGlzIGNsYXNzIChUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQlpblN0cmVhbSA9IG5ldyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbSgiIik7Ci0JCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdERpc2Nvbm5lY3RDb25uZWN0KCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS54bWwiKTsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQlhc3NlcnRUcnVlKCJzRG9jIGltcGxlbWVudGF0aW9uIG5vdCBpbnN0YW5jZSBvZiBJRG9jdW1lbnRFeHRlbnNpb24zIiwgc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjMpOwotCQkJCi0JCQkJSURvY3VtZW50UGFydGl0aW9uZXIgcGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpc0RvYykuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCQlhc3NlcnRUcnVlKCJwYXJ0aXRpb25lciBkb2Vzbid0IGltcGxlbWVudCBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciIsIHBhcnRpdGlvbmVyIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpOwotCQkJCQotCQkJCUlTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIHN0cCA9IChJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcilwYXJ0aXRpb25lcjsKLQkJCQlhc3NlcnROb3ROdWxsKCJwYXJ0aXRpb25lciB3YXMgbnVsbCBmb3Igc0RvYzoiICsgc0RvYywgcGFydGl0aW9uZXIpOwotCQkJCXRyeSB7Ci0JCQkJCXN0cC5kaXNjb25uZWN0KCk7Ci0JCQkJfQotCQkJCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWFzc2VydFRydWUoInByb2JsZW0gZGlzY29ubmVjdGluZyB3LzoiICtzRG9jICsgIi9uIiArIGUsIGZhbHNlKTsKLQkJCQl9Ci0JCQkJdHJ5IHsKLQkJCQkJc3RwLmNvbm5lY3Qoc0RvYyk7Ci0JCQkJfQotCQkJCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWFzc2VydFRydWUoInByb2JsZW0gY29ubmVjdGluZyB3LzoiICsgc0RvYyArICIvbiIgKyBlLCBmYWxzZSk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwiLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSAgewotCQkJaWYobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERlZmF1bHRQYXJ0aXRpb25UeXBlKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS54bWwiKTsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQlhc3NlcnRUcnVlKCJzRG9jIGltcGxlbWVudGF0aW9uIG5vdCBpbnN0YW5jZSBvZiBJRG9jdW1lbnRFeHRlbnNpb24zIiwgc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjMpOwotCQkJCi0JCQkJSURvY3VtZW50UGFydGl0aW9uZXIgcGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpc0RvYykuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCQlhc3NlcnRUcnVlKCJwYXJ0aXRpb25lciBkb2Vzbid0IGltcGxlbWVudCBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciIsIHBhcnRpdGlvbmVyIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpOwotCQkJCQotCQkJCUlTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIHN0cCA9IChJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcilwYXJ0aXRpb25lcjsKLQkJCQlTdHJpbmcgZGVmYXVsdFBhcnRpdGlvblR5cGUgPSBzdHAuZ2V0RGVmYXVsdFBhcnRpdGlvblR5cGUoKTsKLQkJCQlhc3NlcnRUcnVlKCJ3cm9uZyBkZWZhdWx0IHBhcnRpdGlvbiB0eXBlIHdhczogWyIgKyBkZWZhdWx0UGFydGl0aW9uVHlwZSArICJdIHNob3VsZCBiZTogWyIgKyBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCArICJdIiwgZGVmYXVsdFBhcnRpdGlvblR5cGUuZXF1YWxzKElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUKSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCIsIGZhbHNlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5ICB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9CQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UGFydGl0aW9uVHlwZSgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9Z2V0TW9kZWxGb3JFZGl0KCJ0ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDEueG1sIik7Ci0JCQlpZihtb2RlbCAhPSBudWxsKSB7Ci0JCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgic0RvYyBpbXBsZW1lbnRhdGlvbiBub3QgaW5zdGFuY2Ugb2YgSURvY3VtZW50RXh0ZW5zaW9uMyIsIHNEb2MgaW5zdGFuY2VvZiBJRG9jdW1lbnRFeHRlbnNpb24zKTsKLQkJCQotCQkJCUlEb2N1bWVudFBhcnRpdGlvbmVyIHBhcnRpdGlvbmVyID0gKChJRG9jdW1lbnRFeHRlbnNpb24zKXNEb2MpLmdldERvY3VtZW50UGFydGl0aW9uZXIoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORyk7Ci0JCQkJYXNzZXJ0VHJ1ZSgicGFyaXRpb25lciBkb2Vzbid0IGltcGxlbWVudCBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciIsIHBhcnRpdGlvbmVyIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpOwotCQkJCQotCQkJCUlTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIHN0cCA9IChJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcilwYXJ0aXRpb25lcjsKLQkJCQlTdHJpbmcgZGVmYXVsdFBhcnRpdGlvblR5cGUgPSBzdHAuZ2V0RGVmYXVsdFBhcnRpdGlvblR5cGUoKTsKLQkJCQlhc3NlcnRUcnVlKCJ3cm9uZyBkZWZhdWx0IHBhcnRpdGlvbiB0eXBlIHdhczogWyIgKyBkZWZhdWx0UGFydGl0aW9uVHlwZSArICJdIHNob3VsZCBiZTogWyIgKyBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCArICJdIiwgZGVmYXVsdFBhcnRpdGlvblR5cGUuZXF1YWxzKElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUKSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJjb3VsZCBub3QgcmV0cmlldmUgc3RydWN0dXJlZCBtb2RlbCIsIGZhbHNlKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5ICB7Ci0JCQlpZihtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9CQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTDEoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDQ7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS5odG1sIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVDTEFSQVRJT04sIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0NPTU1FTlQsIElIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SFRNTDIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDc7Ci0JCS8vVE9ETyBOaXRpbiwgd2UgbmVlZCB0byByZXZpZXcgdGhlIFVua25vd24gdG8gU2NyaXB0IGNoYW5nZSAoOC8xLzAzLCA5OjAwUE0pCi0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy9odG1sL2V4YW1wbGUwMi5odG1sIik7Ci0JCWFzc2VydFRydWUoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgblBhcnRpdGlvbnMgPT0gZXhwZWN0ZWRQYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLlNDUklQVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLlNDUklQVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVCwgSUhUTUxQYXJ0aXRpb25zLlNDUklQVCwgSUhUTUxQYXJ0aXRpb25zLkhUTUxfREVGQVVMVH0pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RIVE1MMygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gMTsKLQkJU3RyaW5nIGZpbGUgPSAidGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAzLmh0bWwiOwotCQlpbnQgblBhcnRpdGlvbnMgPSBkb0NvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KGZpbGUpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBudW1iZXIgb2YgcGFydGl0aW9ucyIsIG5QYXJ0aXRpb25zID09IGV4cGVjdGVkUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lIVE1MUGFydGl0aW9ucy5IVE1MX0RFRkFVTFR9KTsKLQotCQkvLyAxMjEgaWYgQ1JMRgotCQkvLyAgSVR5cGVkUmVnaW9uIHNjcmlwdFBhcnRpdGlvbiA9IGdldFBhcnRpdGlvblRlc3QoZmlsZSwgMTIxKTsKLQkJLy8gMTE2IGlmIExGIG9yIENSIG9ubHkKLQkJLy8gIElUeXBlZFJlZ2lvbiBzY3JpcHRQYXJ0aXRpb24gPSBnZXRQYXJ0aXRpb25UZXN0KGZpbGUsIDEyMSk7Ci0KLQkJSVR5cGVkUmVnaW9uIHBhcnQxID0gZ2V0UGFydGl0aW9uVGVzdChmaWxlLCAxMjEpOwotCQlJVHlwZWRSZWdpb24gcGFydDIgPSBnZXRQYXJ0aXRpb25UZXN0KGZpbGUsIDExNik7Ci0KLS8vCQlhc3NlcnRFcXVhbHMoInBhcnRpdGlvbiBpcyB3cm9uZyB0eXBlISIsIHNjcmlwdFBhcnRpdGlvbi5nZXRUeXBlKCksIElIVE1MUGFydGl0aW9ucy5TVF9TQ1JJUFQpOwotCQkvLyB0aGUgY3JpdGljYWwgcG9zaXRpb24gaXMgc3Vycm91bmRlZCB3aXRoIEhUTUwgPiA1IGNoYXJhY3RlcnMgaW4gZWl0aGVyIGRpcmVjdGlvbjsgdGhpcyBzaG91bGQgYmUgZ29vZCBlbm91Z2gKLQkJYXNzZXJ0VHJ1ZSgicGFydGl0aW9uIGlzIHdyb25nIHR5cGUhIDooIiArIHBhcnQxLmdldFR5cGUoKSArICJ8IiArIHBhcnQyLmdldFR5cGUoKSArICIpIiwgcGFydDEuZ2V0VHlwZSgpLmVxdWFscyhJSFRNTFBhcnRpdGlvbnMuU0NSSVBUKSB8fCBwYXJ0Mi5nZXRUeXBlKCkuZXF1YWxzKElIVE1MUGFydGl0aW9ucy5TQ1JJUFQpKTsKLQkJYXNzZXJ0VHJ1ZSgicGFydGl0aW9uIGlzIG5vdCB6ZXJvIGxlbmd0aCEiLCAocGFydDEuZ2V0TGVuZ3RoKCkgPT0gMCB8fCBwYXJ0Mi5nZXRMZW5ndGgoKSA9PSAwKSk7Ci0JfQotCQotCS8qKgotCSAqIEVuc3VyZSB0aGF0IHRoZSBjdXJyZW50IGxpc3Qgb2YgcGFydGl0aW9ucyBhcmUgYWxsIGFkamFjZW50IHRvIG9uZSBhbm90aGVyCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgY2hlY2tTZWFtcygpIHsKLQkJaWYgKHBhcnRpdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybjsKLQkJaW50IG9mZnNldCA9IDA7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJwYXJ0aXRpb25zIGFyZSBub3QgY29udGlndW91cyEiLCBwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBvZmZzZXQpOwotCQkJb2Zmc2V0ID0gcGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSArIHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDb21wdXRlIHRoZSBwYXJ0aXRpb25zIGZvciB0aGUgZ2l2ZW4gZmlsZW5hbWUgdXNpbmcgdGhlIGRlZmF1bHQgcGFydGl0aW9uZXIKLQkgKiBmb3IgdGhhdCBmaWxlIHR5cGUuCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybiBpbnQKLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBpbnQgZG9Db21wdXRlUGFydGl0aW9uaW5nVGVzdChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCWluU3RyZWFtID0gbmV3IFN0cmluZ0J1ZmZlcklucHV0U3RyZWFtKCIiKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUICYmIHVzZUZvcm1hdHRlcikgewotCQkJZG91YmxlIGJhc2VUZW4gPSBNYXRoLmxvZygxMCk7Ci0JCQlmb3JtYXR0ZXIuc2V0TWluaW11bUludGVnZXJEaWdpdHMoKGludCkgKE1hdGgubG9nKHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSkgLyBiYXNlVGVuKSArIDEpOwotCQkJZm9ybWF0dGVyLnNldEdyb3VwaW5nVXNlZChmYWxzZSk7Ci0JCX0KLQotCQlwYXJ0aXRpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmNvbXB1dGVQYXJ0aXRpb25pbmcoMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCkgewotCQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCJcbmZpbGVuYW1lOiAiICsgZmlsZW5hbWUpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdHJ5IHsKLQkJCQkJY29udGVudHMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCksIHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpOwotCQkJCX0KLQkJCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCQljb250ZW50cyA9ICIqZXJyb3IqIjsKLQkJCQl9Ci0JCQkJaWYgKHVzZUZvcm1hdHRlcikKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSkgKyAiOiIgKyBmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0TGVuZ3RoKCkpICsgIiAtICIgKyBwYXJ0aXRpb25zW2ldLmdldFR5cGUoKSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCQllbHNlCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihwYXJ0aXRpb25zW2ldICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJfQotCQl9Ci0JCWNoZWNrU2VhbXMoKTsKLQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCWluU3RyZWFtLmNsb3NlKCk7Ci0KLQkJaWYgKHBhcnRpdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybiAtMTsKLQkJcmV0dXJuIHBhcnRpdGlvbnMubGVuZ3RoOwotCX0KLQotCS8qKgotCSAqIFJldHJpZXZlcyB0aGUgc2luZ2xlIHBhcnRpdGlvbiBhdCB0aGUgZ2l2ZW4gb2Zmc2V0IGZvciB0aGUgZ2l2ZW4gZmlsZSwgdXNpbmcgdGhlCi0JICogZGVmYXVsdCBwYXJ0aXRpb25lciBmb3IgdGhhdCBmaWxlIHR5cGUuICBUaGlzIHRlc3QgYWxsb3dzIGZvciB2ZXJpZnlpbmcgdGhlIHplcm8tbGVuZ3RoCi0JICogcGFydGl0aW9uaW5nIGJlaGF2aW9yLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEBwYXJhbSBvZmZzZXQKLQkgKiBAcmV0dXJuIElUeXBlZFJlZ2lvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKiBAdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uCi0JICovCi0JcHJvdGVjdGVkIElUeXBlZFJlZ2lvbiBnZXRQYXJ0aXRpb25UZXN0KFN0cmluZyBmaWxlbmFtZSwgaW50IG9mZnNldCkgdGhyb3dzIElPRXhjZXB0aW9uLCBCYWRMb2NhdGlvbkV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChmaWxlbmFtZSwgaW5TdHJlYW0sIG51bGwpOwotCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0KLQkJcGFydGl0aW9ucyA9IG51bGw7Ci0JCUlUeXBlZFJlZ2lvbiBwYXJ0aXRpb24gPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0UGFydGl0aW9uKG9mZnNldCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCXRyeSB7Ci0JCQkJY29udGVudHMgPSBzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0KHBhcnRpdGlvbi5nZXRPZmZzZXQoKSwgcGFydGl0aW9uLmdldExlbmd0aCgpKTsKLQkJCX0KLQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQl9Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQl9Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCXJldHVybiBwYXJ0aXRpb247Ci0JfQotCi0JLyoqCi0JICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGFydGl0aW9ucyBhcmUgb2YgdGhlIGdpdmVuIHBhcnRpdGlvbiB0eXBlcwotCSAqIEBwYXJhbSB0eXBlZFJlZ2lvbnMKLQkgKiBAcGFyYW0gdHlwZXMKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB2ZXJpZnlQYXJ0aXRpb25UeXBlcyhJVHlwZWRSZWdpb24gYWN0dWFsVHlwZWRSZWdpb25zW10sIFN0cmluZyBleHBlY3RlZFR5cGVzW10pIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZFR5cGVzLmxlbmd0aDsgaSsrKQotCQkJYXNzZXJ0RXF1YWxzKCJwYXJ0aXRpb24gdHlwZSBtaXNtYXRjaGVkIiwgZXhwZWN0ZWRUeXBlc1tpXSwgYWN0dWFsVHlwZWRSZWdpb25zW2ldLmdldFR5cGUoKSk7Ci0JfQotCi0JLyoqCi0JICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gcGFydGl0aW9ucyBiZWdpbiBhdCB0aGUgZ2l2ZW4gb2Zmc2V0cwotCSAqIEBwYXJhbSB0eXBlZFJlZ2lvbnMKLQkgKiBAcGFyYW0gdHlwZXMKLQkgKi8KLQlwcm90ZWN0ZWQgdm9pZCB2ZXJpZnlQYXJ0aXRpb25SZWdpb25zKElUeXBlZFJlZ2lvbiB0eXBlZFJlZ2lvbnNbXSwgaW50IG9mZnNldHNbXSkgewotCQlmb3IgKGludCBpID0gMDsgaSA8IG9mZnNldHMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygib2Zmc2V0IG1pc21hdGNoZWQiLCB0eXBlZFJlZ2lvbnNbaV0uZ2V0T2Zmc2V0KCksIG9mZnNldHNbaV0pOwotCQkJaWYgKGkgPiAwKSB7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJsZW5ndGhzIG1pc2FsaWduZWQiLCB0eXBlZFJlZ2lvbnNbaV0uZ2V0T2Zmc2V0KCksIHR5cGVkUmVnaW9uc1tpIC0gMV0uZ2V0T2Zmc2V0KCkgKyB0eXBlZFJlZ2lvbnNbaSAtIDFdLmdldExlbmd0aCgpKTsKLQkJCX0KLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAxLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAxLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRhMGZmZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMS5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08IURPQ1RZUEUgaHRtbCBTWVNURU0gbm9uc2Vuc2U+Ci08aHRtbD4KLTxibzwhLS1jb21tZW50cy0tPmR5PgotYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTwvYm9keT48L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAyLmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL2h0bWwvZXhhbXBsZTAyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwMjg2YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMi5odG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwMy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzhkYWYzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPGh0bWw+PGhlYWQ+Ci08TUVUQSBjcmVhdG9yPXdzc2EvNC4wcHJlMTE5PgotPHRpdGxlPlNjcmlwdCBUZXN0czwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxTY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPjwvU0NSSVBUPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwNC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy9odG1sL2V4YW1wbGUwNC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODA3OGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMvaHRtbC9leGFtcGxlMDQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIyODMgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci08SFRNTD4KLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVMtQVNDSUkiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gU29mdHdhcmUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iPgotPFRJVExFPmVtcHR5Lmh0bTwvVElUTEU+Ci08U1RZTEUgdHlwZT0idGV4dC9jc3MiPgotPCEtLQotLmNsYXNzMCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTAgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczExIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxMiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczEzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxNCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTUgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczE2IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxNyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTggewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczE5IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyMCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjEgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczIyIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyMyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczI0IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyNSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjYgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczI3IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyOCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjkgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMwIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzMSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzIgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzMyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczM1IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzNiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzcgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczM4IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzOSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDAgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQxIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0MiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0NCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDUgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQ2IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0NyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDggewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQ5IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1MCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTEgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczUyIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1MyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczU0IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1NSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTYgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczU3IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1OCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTkgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczYwIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2MSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjIgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczYzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2MyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczY1IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2NiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjcgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczY4IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2OSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzAgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczcxIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3MiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczczIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3NCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzUgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczc2IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3NyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzggewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczc5IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4MCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODEgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczgyIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4MyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODMgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczg0IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4NSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODYgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczg3IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4OCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODkgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczkwIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5MSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTIgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczkzIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5MyB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczk1IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5NiB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTcgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczk4IHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5OSB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTAgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczExIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxMiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczEzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxNCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTUgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczE2IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MxNyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMTggVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczE5IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyMCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjEgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczIyIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyMyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczI0IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyNSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjYgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczI3IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MyOCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMjkgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMwIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzMSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzIgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczMzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzMyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzQgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczM1IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzNiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzMzcgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczM4IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3MzOSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDAgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQxIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0MiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0NCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDUgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQ2IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M0NyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNDggVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczQ5IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1MCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTEgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczUyIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1MyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczU0IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1NSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTYgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczU3IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M1OCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNTkgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczYwIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2MSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjIgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczYzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2MyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjQgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczY1IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2NiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNjcgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczY4IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M2OSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzAgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczcxIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3MiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczczIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3NCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzUgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczc2IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M3NyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzNzggVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczc5IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4MCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODEgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczgyIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4MyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODMgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczg0IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4NSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODYgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczg3IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M4OCBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzODkgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczkwIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5MSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTIgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczkzIFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5MyBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTQgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczk1IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5NiBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLmNsYXNzOTcgVEQgewotCWJhY2tncm91bmQtY29sb3I6IHJlZDsKLQlib3JkZXItY29sb3I6IGxpbWU7Ci0JbWFyZ2luOiAxMHB4OwotCWJvcmRlci13aWR0aDogMXB4OwotCWJvcmRlci1zdHlsZTogc29saWQKLX0KLS5jbGFzczk4IFREIHsKLQliYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0JYm9yZGVyLWNvbG9yOiBsaW1lOwotCW1hcmdpbjogMTBweDsKLQlib3JkZXItd2lkdGg6IDFweDsKLQlib3JkZXItc3R5bGU6IHNvbGlkCi19Ci0uY2xhc3M5OSBURCB7Ci0JYmFja2dyb3VuZC1jb2xvcjogcmVkOwotCWJvcmRlci1jb2xvcjogbGltZTsKLQltYXJnaW46IDEwcHg7Ci0JYm9yZGVyLXdpZHRoOiAxcHg7Ci0JYm9yZGVyLXN0eWxlOiBzb2xpZAotfQotLS0+Ci08L1NUWUxFPgotPC9IRUFEPgotPEJPRFk+Ci08VEFCTEUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiPgotCTxUQk9EWT4KLQkJPFRSPgotCQkJPFREIGNvbHNwYW49IjIiPjxUQUJMRSBib3JkZXI9IjEiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQkJPFREPjwvVEQ+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJPC9UUj4KLQkJCQk8L1RCT0RZPgotCQkJPC9UQUJMRT4KLQkJCTwvVEQ+PC9UUj4KLQkJPFRSPgotCQkJPFREIHJvd3NwYW49IjQiPgotCQkJPFRBQkxFIGJvcmRlcj0iMSI+Ci0JCQkJPFRCT0RZPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+PC9URD4KLQkJCQkJCTxURD48L1REPgotCQkJCQk8L1RSPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJCTxURD4KLQkJCTxUQUJMRSBib3JkZXI9IjEiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPjxURD4KLQkJCTxUQUJMRSBib3JkZXI9IjEiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPjxURD4KLQkJCTxUQUJMRSBib3JkZXI9IjEiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJPC9UUj4KLQkJPFRSPjxURD4KLQkJCTxUQUJMRSBib3JkZXI9IjEiPgotCQkJCTxUQk9EWT4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCQk8VFI+Ci0JCQkJCQk8VEQ+YTwvVEQ+Ci0JCQkJCQk8VEQ+YjwvVEQ+Ci0JCQkJCQk8VEQ+YzwvVEQ+Ci0JCQkJCQk8VEQ+ZDwvVEQ+Ci0JCQkJCQk8VEQ+ZTwvVEQ+Ci0JCQkJCQk8VEQ+ZjwvVEQ+Ci0JCQkJCQk8VEQ+ZzwvVEQ+Ci0JCQkJCQk8VEQ+aDwvVEQ+Ci0JCQkJCQk8VEQ+aTwvVEQ+Ci0JCQkJCQk8VEQ+ajwvVEQ+Ci0JCQkJCTwvVFI+Ci0JCQkJCTxUUj4KLQkJCQkJCTxURD5hPC9URD4KLQkJCQkJCTxURD5iPC9URD4KLQkJCQkJCTxURD5jPC9URD4KLQkJCQkJCTxURD5kPC9URD4KLQkJCQkJCTxURD5lPC9URD4KLQkJCQkJCTxURD5mPC9URD4KLQkJCQkJCTxURD5nPC9URD4KLQkJCQkJCTxURD5oPC9URD4KLQkJCQkJCTxURD5pPC9URD4KLQkJCQkJCTxURD5qPC9URD4KLQkJCQkJPC9UUj4KLQkJCQkJPFRSPgotCQkJCQkJPFREPmE8L1REPgotCQkJCQkJPFREPmI8L1REPgotCQkJCQkJPFREPmM8L1REPgotCQkJCQkJPFREPmQ8L1REPgotCQkJCQkJPFREPmU8L1REPgotCQkJCQkJPFREPmY8L1REPgotCQkJCQkJPFREPmc8L1REPgotCQkJCQkJPFREPmg8L1REPgotCQkJCQkJPFREPmk8L1REPgotCQkJCQkJPFREPmo8L1REPgotCQkJCQk8L1RSPgotCQkJCTwvVEJPRFk+Ci0JCQk8L1RBQkxFPgotCQkJPC9URD4KLQkJPC9UUj4KLQk8L1RCT0RZPgotPC9UQUJMRT4KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvQ29tbW9uWE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0NvbW1vblhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGUxNmEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvQ29tbW9uWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5PdXRwdXRLZXlzOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLnczYy5kb20uRG9jdW1lbnQ7Ci0KLS8qKgotICovCi1wdWJsaWMgY2xhc3MgQ29tbW9uWE1MIHsKLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIERvY3VtZW50QnVpbGRlciBnZXREb2N1bWVudEJ1aWxkZXIoKSB7Ci0JCURvY3VtZW50QnVpbGRlciByZXN1bHQgPSBudWxsOwotCQl0cnkgewotCQkJcmVzdWx0ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgZ2V0RG9jdW1lbnRCdWlsZGVyKGJvb2xlYW4gdmFsaWRhdGluZykgewotCQlEb2N1bWVudEJ1aWxkZXIgcmVzdWx0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCURvY3VtZW50QnVpbGRlckZhY3RvcnkgaW5zdGFuY2UgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCQlpbnN0YW5jZS5zZXRWYWxpZGF0aW5nKHZhbGlkYXRpbmcpOwotCQkJcmVzdWx0ID0gaW5zdGFuY2UubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemUoRG9jdW1lbnQgZG9jdW1lbnQsIE91dHB1dFN0cmVhbSBvc3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTb3VyY2UgZG9tU291cmNlID0gbmV3IERPTVNvdXJjZShkb2N1bWVudCk7Ci0JCXRyeSB7Ci0JCQlUcmFuc2Zvcm1lciBzZXJpYWxpemVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLQkJCXRyeSB7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOwotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjQiKTsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsICJVVEYtMTYiKTsKLQkJCX0KLQkJCWNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJCS8vIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMKLQkJCX0KLQkJCXNlcmlhbGl6ZXIudHJhbnNmb3JtKGRvbVNvdXJjZSwgbmV3IFN0cmVhbVJlc3VsdChvc3RyZWFtKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3IgZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0RhdGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL0RhdGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0ZDE4MzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9EYXRlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5EYXRlRm9ybWF0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLWltcG9ydCBqYXZhLnV0aWwuQ2FsZW5kYXI7Ci1pbXBvcnQgamF2YS51dGlsLkRhdGU7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUbyBjaGFuZ2UgdGhpcyBnZW5lcmF0ZWQgY29tbWVudCBlZGl0IHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZSAidHlwZWNvbW1lbnQiOgotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+VGVtcGxhdGVzLgotICogVG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiB0eXBlIGNvbW1lbnRzIGdvIHRvCi0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5Db2RlIEdlbmVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBEYXRlVXRpbCB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQWxsVGVzdHMuCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgbm93ID0gbnVsbDsKLQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgbm93KCkgewotCQkvLyBqdXN0IGNhbGN1bGF0ZSBvbmNlLCBzbyB3aG9sZSBydW4gYXMgc2FtZSB0aW1lc3RhbXAKLQkJaWYgKERhdGVVdGlsLm5vdyA9PSBudWxsKSB7Ci0JCQlEYXRlRm9ybWF0IGZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCctJ2trJy0nbW0nLSdzcyIpOwotCQkJQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotCQkJRGF0ZSB0b2RheSA9IGNhbGVuZGFyLmdldFRpbWUoKTsKLQkJCURhdGVVdGlsLm5vdyA9IGZvcm1hdC5mb3JtYXQodG9kYXkpOwotCQl9Ci0JCXJldHVybiBEYXRlVXRpbC5ub3c7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODcxNDM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlbmFtZUZpbHRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLnV0aWwuTnVsbElucHV0U3RyZWFtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqLwotcHVibGljIGNsYXNzIEZpbGVVdGlsIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMiOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIGNvbW1vbkVPTCA9ICJcclxuIjsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmTGluZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgibGluZS5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmUGF0aFNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgicGF0aC5zZXBhcmF0b3IiKTsKLQlwdWJsaWMgc3RhdGljIFN0cmluZyBmRmlsZVNlcGFyYXRvciA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5zZXBhcmF0b3IiKTsKLQotCXN0YXRpYyBGaWxlIHByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IG51bGw7Ci0Jc3RhdGljIHByaXZhdGUgU3RyaW5nIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0KLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIG5vdFRyaWVkWWV0ID0gdHJ1ZTsKLQlzdGF0aWMgaW50IHVuaXF1ZU51bSA9IDA7Ci0KLQlwdWJsaWMgc3RhdGljIGNsYXNzIERpckZpbGVuYW1lRmlsdGVyIGltcGxlbWVudHMgRmlsZW5hbWVGaWx0ZXIgewotCQlTdHJpbmcgc3RhcnRPZkFjY2VwdGFibGVOYW1lczsKLQotCQlwdWJsaWMgRGlyRmlsZW5hbWVGaWx0ZXIoU3RyaW5nIHN0YXJ0T2ZEaXJOYW1lKSB7Ci0JCQlzdGFydE9mQWNjZXB0YWJsZU5hbWVzID0gc3RhcnRPZkRpck5hbWU7Ci0JCX0KLQotCQkvKioKLQkJICogQHNlZSBqYXZhLmlvLkZpbGVGaWx0ZXIjYWNjZXB0KEZpbGUpCi0JCSAqLwotCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBwYXRobmFtZSwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCQkvLyB3ZSdsbCBqdXN0IGFzc3VtZSBpZiBpdCBzdGFydHMgd2l0aCByaWdodCBrZXksIGl0IGlzIGEgZGlyZWN0b3J5IC4uLiBmb3Igbm93Ci0JCQlyZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aChzdGFydE9mQWNjZXB0YWJsZU5hbWVzKTsKLQkJfQotCi0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeShTdHJpbmcgZGlyZWN0b3J5Um9vdE5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChwcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkgPT0gbnVsbCAmJiBub3RUcmllZFlldCkgewotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeSgiLyIpOyAvLyROT04tTkxTLTEkCi0JCQkvL1N0cmluZyBpbnN0YWxsUGF0aCA9IHVybC5nZXRQYXRoKCk7Ci0JCQkvLyBhZGQga25vd24gZmlsZSBzbyBVUkwgbWV0aG9kIGJlbG93IGNhbiBiZSB1c2VkCi0JCQkvLyAoZG9lc24ndCBzZWVtIHRvIHdvcmsgZm9yIGRpcmVjdG9yeT8pCi0JCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgInBsdWdpbi54bWwiKTsKLQkJCVVSTCBmaW5hbHVybCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh0b3RhbFVSTCk7Ci0JCQlTdHJpbmcgZmluYWxGaWxlID0gZmluYWx1cmwuZ2V0RmlsZSgpOwotCQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJCVN0cmluZyBmaW5hbFBhdGggPSBmaWxlLmdldFBhcmVudCgpOwotCQkJRmlsZSBwbHVnaW5Ib21lRGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJCUZpbGVuYW1lRmlsdGVyIGRpckZpbHRlciA9IG5ldyBEaXJGaWxlbmFtZUZpbHRlcihkaXJlY3RvcnlSb290TmFtZSk7Ci0JCQlGaWxlW10gYWxsRGlycyA9IHBsdWdpbkhvbWVEaXIubGlzdEZpbGVzKGRpckZpbHRlcik7Ci0KLQkJCS8vIGFzc3VtZSBmaXJzdCBpbiBsaXN0IGlzIG5ld2VzdCwgdGhlbiBzdGFydCBsb29raW5nIHdpdGggdGhlIAotCQkJLy8gc2Vjb25kIGl0ZW0gLi4uIGp1c3QgdG8gYXZvaWQgIm51bGwiIGNhc2UgY2hlY2tpbmcKLQkJCWlmIChhbGxEaXJzLmxlbmd0aCA+IDApIHsKLQkJCQlGaWxlIGN1cnJlbnROZXdlc3QgPSBhbGxEaXJzWzBdOwotCQkJCWZvciAoaW50IGkgPSAxOyBpIDwgYWxsRGlycy5sZW5ndGg7IGkrKykgewotCQkJCQlGaWxlIGN1cnJlbnQgPSBhbGxEaXJzW2ldOwotCQkJCQkvLyBOT1RFOiB3ZSBnbyBieSBtb2RpZmllZCBkYXRlLCBub3QgYnkgdGhlIGFjdHVhbCB0aW1lIHN0YW1wIGluIG5hbWUuCi0JCQkJCS8vIFRoaXMgc2hvdWxkIHdvcmsgZm9yIGFsbCBub3JtYWwgY2FzZXMsIGJ1dCBtYXkgbm90IGlmIHNvbWVvbmUgZG9lcyBzb21lCi0JCQkJCS8vICJmdW5ueSIgY29weWluZywgb3IgdXBkYXRpbmcgZnJvbSByZXBvc2l0b3J5LgotCQkJCQlpZiAoY3VycmVudC5sYXN0TW9kaWZpZWQoKSA+IGN1cnJlbnROZXdlc3QubGFzdE1vZGlmaWVkKCkpIHsKLQkJCQkJCWN1cnJlbnROZXdlc3QgPSBjdXJyZW50OwotCQkJCQl9Ci0JCQkJfQotCQkJCXByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSA9IGN1cnJlbnROZXdlc3Q7Ci0JCQl9Ci0JCQlub3RUcmllZFlldCA9IGZhbHNlOwotCQl9Ci0JCXJldHVybiBwcmV2aW91c1Jlc3VsdHNEaXJlY3Rvcnk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIG1ha2VGaWxlRm9yKFN0cmluZyBkaXJlY3RvcnksIFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4KSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCVVSTCB1cmwgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsgIC8vJE5PTi1OTFMtMSQKLQkJVVJMIGxvY2FsVVJMID0gRmlsZUxvY2F0b3IudG9GaWxlVVJMKHVybCk7Ci0JCVN0cmluZyBpbnN0YWxsUGF0aCA9IGxvY2FsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIHRvdGFsRGlyZWN0b3J5ID0gaW5zdGFsbFBhdGggKyBkaXJlY3Rvcnk7Ci0JCVN0cmluZyB0b3RhbFBhdGggPSB0b3RhbERpcmVjdG9yeSArICIvIiArIGZpbGVuYW1lOwotCQlVUkwgdG90YWxVUkwgPSBuZXcgVVJMKHVybCwgdG90YWxQYXRoKTsKLQkJLy9VUkwgZmluYWx1cmwgPSBQbGF0Zm9ybS5hc0xvY2FsVVJMKHRvdGFsVVJMKTsKLQkJU3RyaW5nIGZpbmFsRmlsZSA9IHRvdGFsVVJMLmdldEZpbGUoKTsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmluYWxGaWxlKTsKLQkJU3RyaW5nIGZpbmFsUGF0aCA9IGZpbGUuZ2V0UGFyZW50KCk7Ci0JCUZpbGUgZGlyID0gbmV3IEZpbGUoZmluYWxQYXRoKTsKLQkJaWYgKCFkaXIuZXhpc3RzKCkpIHsKLQkJCS8vIGEgbGl0dGxlIHNhZmV0eSBuZXQsIGJlIHN1cmUgdGhlIHByZXZpb3VzIG5ld2VzdCBkaXJlY3RvcnkKLQkJCS8vIGlzIGluaXRpYWxpemVkLCBqdXN0IGluIGNhc2Ugbm8gb25lIGVsc2UgaGFzIGRvbmUgc28KLQkJCWlmICh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCAhPSBudWxsICYmIHRlc3RSZXN1bHRzRGlyZWN0b3J5UHJlZml4Lmxlbmd0aCgpID4gMCkgewotCQkJCUZpbGVVdGlsLmdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeSh0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCk7Ci0JCQl9Ci0JCQkvLyBub3cgaXRzICJzYWZlIiB0byBtYWtlIHRoZSBuZXcgb25lCi0JCQlkaXIubWtkaXJzKCk7Ci0JCX0KLQkJcmV0dXJuIGZpbGU7Ci0JfQotCi0JLyoqCi0JICogSnVzdCBhIGdlbmVyYWwgdXRpbGl0eSBtZXRob2QKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcmV0dXJuIFN0cmluZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldEV4dGVuc2lvbihTdHJpbmcgZmlsZW5hbWUpIHsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9IG51bGw7Ci0JCWludCBkb3RQb3N0aW9uID0gZmlsZW5hbWUubGFzdEluZGV4T2YoJy4nKTsKLQkJaWYgKGRvdFBvc3Rpb24gPiAtMSkgewotCQkJZXh0ZW5zaW9uID0gZmlsZW5hbWUuc3Vic3RyaW5nKGRvdFBvc3Rpb24gKyAxKTsKLQkJfQotCQllbHNlIHsKLQkJCWV4dGVuc2lvbiA9IG5ldyBTdHJpbmcoKTsKLQkJfQotCQlyZXR1cm4gZXh0ZW5zaW9uOwotCX0KLQotCS8qKgotCSAqIEdlbmVyYWwgcHVycG9zZSB1dGlsaXR5IG1ldGhvZCB0byBlbnN1cmUgdGhlIGxvZwotCSAqIGRpcmVjdG9yeSBleGlzdHMsIGFuZCByZXR1cm5zIHRoZSBuYW1lLiAKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRMb2dEaXJlY3RvcnkoKSB7Ci0JCWlmIChsb2dTdWJEaXJlY3RvcnlQYXRoID09IG51bGwpIHsKLQkJCVN0cmluZyBtYWluRGlyZWN0b3J5ID0gIi9sb2dzIjsKLQkJCUZpbGUgZGlyID0gbmV3IEZpbGUobWFpbkRpcmVjdG9yeSk7Ci0JCQllbnN1cmVFeGlzdHMoZGlyKTsKLQkJCVN0cmluZyBzdWJEaXJlY3RvcnkgPSBUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcCgpOwotCQkJbG9nU3ViRGlyZWN0b3J5UGF0aCA9IG1haW5EaXJlY3RvcnkgKyAiLyIgKyBzdWJEaXJlY3Rvcnk7Ci0JCQlGaWxlIHN1YmRpciA9IG5ldyBGaWxlKGxvZ1N1YkRpcmVjdG9yeVBhdGgpOwotCQkJZW5zdXJlRXhpc3RzKHN1YmRpcik7Ci0JCX0KLQkJcmV0dXJuIGxvZ1N1YkRpcmVjdG9yeVBhdGg7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGVuc3VyZUV4aXN0cyhGaWxlIGRpcikgewotCQlpZiAoIWRpci5leGlzdHMoKSkgewotCQkJZGlyLm1rZGlycygpOwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UGVyZm9ybWFuY2VPdXRwdXRMb2dOYW1lKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gbnVsbDsKLQkJU3RyaW5nIGRpcmVjdG9yeU5hbWUgPSBGaWxlVXRpbC5nZXRMb2dEaXJlY3RvcnkoKTsKLQkJU3RyaW5nIGV4dGVuc2lvbiA9ICIub3V0IjsKLQkJU3RyaW5nIGJhc2VOYW1lID0gInNlZFRlc3RzIjsKLQkJbG9uZyBub3cgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJU3RyaW5nIG5vd1N0ciA9IFN0cmluZy52YWx1ZU9mKG5vdyk7Ci0JCXJlc3VsdCA9IGRpcmVjdG9yeU5hbWUgKyBGaWxlVXRpbC5mRmlsZVNlcGFyYXRvciArIGJhc2VOYW1lICsgbm93U3RyICsgZXh0ZW5zaW9uOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQlwdWJsaWMgc3RhdGljIElET01Nb2RlbCBjcmVhdGVIVE1MTW9kZWwoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCi0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdCgidGVzdCIgKyB1bmlxdWVOdW0rKyArICIuaHRtbCIsIG5ldyBOdWxsSW5wdXRTdHJlYW0oKSwgbnVsbCk7IC8vJE5PTi1OTFMtMSQKLQotCQkJLy8gYWx3YXlzIHVzZSB0aGUgc2FtZSBsaW5lIGRlbGltaXRlciBmb3IgdGhlc2UgdGVzdHMsIHJlZ2FyZGxlc3MKLQkJCS8vIG9mIHBsYWZvcm0gb3IgcHJlZmVyZW5jZSBzZXR0aW5ncwotCQkJbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCkuc2V0TGluZURlbGltaXRlcihjb21tb25FT0wpOwotCi0KLQkJfQotCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuICAoSURPTU1vZGVsKSBtb2RlbDsKLQotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvU3RyaW5nQ29tcGFyZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvU3RyaW5nQ29tcGFyZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMzYmE2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uU3RyaW5nUmVhZGVyOwotCi1wdWJsaWMgY2xhc3MgU3RyaW5nQ29tcGFyZVV0aWwgewotCi0JcHVibGljIGJvb2xlYW4gZXF1YWxzSWdub3JlTGluZVNlcGVyYXRvcihTdHJpbmcgc3RyaW5nMSwgU3RyaW5nIHN0cmluZzIpIHsKLQotCQlpZiAoc3RyaW5nMSA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCQlpZiAoc3RyaW5nMiA9PSBudWxsKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZ1JlYWRlciBzMVJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nMSk7Ci0JCVN0cmluZ1JlYWRlciBzMlJlYWRlciA9IG5ldyBTdHJpbmdSZWFkZXIoc3RyaW5nMik7Ci0KLQkJLy8gYXNzdW1lIHRydWUgdW5sZXNzIGZpbmQgZXZpZGVuY2UgdG8gdGhlIGNvbnRyYXJ5Ci0JCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLQkJaW50IHMxQ2hhciA9IC0xOwotCQlpbnQgczJDaGFyID0gLTE7Ci0JCWRvIHsKLQotCQkJczFDaGFyID0gZ2V0TmV4dENoYXIoczFSZWFkZXIpOwotCi0JCQlzMkNoYXIgPSBnZXROZXh0Q2hhcihzMlJlYWRlcik7Ci0KLQkJCWlmIChzMUNoYXIgIT0gczJDaGFyKSB7Ci0JCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJd2hpbGUgKHMxQ2hhciAhPSAtMSAmJiBzMkNoYXIgIT0gLTEpOwotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogTWV0aG9kIGdldE5leHRDaGFyLgotCSAqIEBwYXJhbSBzMVJlYWRlcgotCSAqIEByZXR1cm4gY2hhcgotCSAqLwotCXByaXZhdGUgaW50IGdldE5leHRDaGFyKFN0cmluZ1JlYWRlciByZWFkZXIpIHsKLQkJaW50IG5leHRDaGFyID0gLTE7Ci0JCXRyeSB7Ci0JCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl3aGlsZSAoaXNFT0wobmV4dENoYXIpKSB7Ci0JCQkJbmV4dENoYXIgPSByZWFkZXIucmVhZCgpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCXJldHVybiBuZXh0Q2hhcjsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNFT0woaW50IGFDaGFyKSB7Ci0JCXJldHVybiAoYUNoYXIgPT0gJ1xuJyB8fCBhQ2hhciA9PSAnXHInKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1Rlc3RSdW50aW1lRXhjZXB0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1Rlc3RSdW50aW1lRXhjZXB0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkN2Q2Y2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9UZXN0UnVudGltZUV4Y2VwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzOwotCi0KLQotLyoqCi0gKiBUaGUgU291cmNlRWRpdGluZ1J1bnRpbWVFeGNlcHRpb24gaXMgb2Z0ZW4gdGhyb3duIGJ5IFNvdXJjZSBFZGl0b3IgbWV0aG9kcyB3aGVuCi0gKiBhIHNlcnZpY2Ugd2UgdXNlIHRocm93cyBhIGNoZWNrZWQgZXhjZXB0aW9uLCBidXQgd2Ugd2FudCB0byBjb252ZXJ0IGFuZCB0cmVhdAotICogYXMgYSBydW50aW1lIGV4Y2VwdGlvbi4gKFN1Y2ggYXMgQmFkTG9jYXRpb25FeGNlcHRpb24gaXMgYSBjb21tb24gZXhhbXBsZSkuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0UnVudGltZUV4Y2VwdGlvbiBleHRlbmRzIFJ1bnRpbWVFeGNlcHRpb24gewotCS8qKgotCSAqIERlZmF1bHQgPGNvZGU+c2VyaWFsVmVyc2lvblVJRDwvY29kZT4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBsb25nIHNlcmlhbFZlcnNpb25VSUQgPSAxTDsKLQlwcml2YXRlIFRocm93YWJsZSBvcmlnaW5hbEV4Y2VwdGlvbjsKLQotCXB1YmxpYyBUZXN0UnVudGltZUV4Y2VwdGlvbigpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgVGVzdFJ1bnRpbWVFeGNlcHRpb24oU3RyaW5nIHMpIHsKLQkJc3VwZXIocyk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBmb3JtIG9mIHRoZSBjb25zdHJ1Y3RvciBpcyB1c2VkIHRvIHdyYXBwZXIgYW5vdGhlciBleGNlcHRpb24uCi0JICovCi0JcHVibGljIFRlc3RSdW50aW1lRXhjZXB0aW9uKFRocm93YWJsZSB0KSB7Ci0JCXN1cGVyKCk7Ci0JCW9yaWdpbmFsRXhjZXB0aW9uID0gdDsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIGZvcm0gb2YgdGhlIGNvbnN0cnVjdG9yIGlzIHVzZWQgdG8gd3JhcHBlciBhbm90aGVyIGV4Y2VwdGlvbiwgYnV0IHN0aWxsCi0JICogcHJvdmlkZSBhIG5ldyBkZXNjcmlwdGl2ZSBtZXNzYWdlLgotCSAqLwotCXB1YmxpYyBUZXN0UnVudGltZUV4Y2VwdGlvbihUaHJvd2FibGUgdCwgU3RyaW5nIHMpIHsKLQkJc3VwZXIocyk7Ci0JCW9yaWdpbmFsRXhjZXB0aW9uID0gdDsKLQl9Ci0KLQlwdWJsaWMgU3RyaW5nIGdldE1lc3NhZ2UoKSB7Ci0JCVN0cmluZyByZXN1bHQgPSBzdXBlci5nZXRNZXNzYWdlKCk7Ci0JCWlmICgocmVzdWx0ICE9IG51bGwpICYmICghcmVzdWx0LmVuZHNXaXRoKCIuIikpKSAvLyROT04tTkxTLTEkCi0JCQlyZXN1bHQgPSByZXN1bHQgKyAiLiI7IC8vJE5PTi1OTFMtMSQKLQkJaWYgKG9yaWdpbmFsRXhjZXB0aW9uICE9IG51bGwpIHsKLQkJCVN0cmluZyBlbWJlZGRlZE1lc3NhZ2UgPSBvcmlnaW5hbEV4Y2VwdGlvbi5nZXRNZXNzYWdlKCk7Ci0JCQkvLyBub3QgYWxsIGV4Y2VwdGlvbnMgKGUuZy4gbWFueSBOdWxsUG9pbnRlciBleGNlcHRpb24pIGhhdmUgbWVzc2FnZXMKLQkJCVN0cmluZyBvcmlnaW5hbEVycm9yID0gIk9yaWdpbmFsIGVycm9yOiI7CS8vJE5PTi1OTFMtMSQKLQkJCWlmIChlbWJlZGRlZE1lc3NhZ2UgIT0gbnVsbCkKLQkJCQlyZXN1bHQgPSByZXN1bHQgKyAiICAiICsgb3JpZ2luYWxFcnJvciArICIgIiArIGVtYmVkZGVkTWVzc2FnZTsvLyROT04tTkxTLTIkLy8kTk9OLU5MUy0xJAotCQkJZWxzZQotCQkJCXJlc3VsdCA9IHJlc3VsdCArICIgICIgKyBvcmlnaW5hbEVycm9yICsgIiAiICsgb3JpZ2luYWxFeGNlcHRpb24udG9TdHJpbmcoKTsvLyROT04tTkxTLTIkLy8kTk9OLU5MUy0xJAotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIFRocm93YWJsZSBnZXRPcmlnaW5hbEV4Y2VwdGlvbigpIHsKLQkJcmV0dXJuIG9yaWdpbmFsRXhjZXB0aW9uOwotCX0KLQotCXB1YmxpYyBTdHJpbmcgdG9TdHJpbmcoKSB7Ci0JCS8vIHdlIGRvbid0IHB1dCBzdXBlci50b1N0cmluZyBvciBnZXRDbGFzcyB0byAiaGlkZSIgdGhhdCBpdCB3YXMgYQotCQkvLyBTb3VyY2VFZGl0aW5nIGV4Y2VwdGlvbiAob3RoZXJ3aXNlLCBmb2N1cyBnb2VzIG9uIHRoYXQsCi0JCS8vIGluc3RlYWQgb2Ygb3JpZ2luYWwgZXhjZXB0aW9uLgotCQlTdHJpbmcgbWVzc2FnZSA9IGdldE1lc3NhZ2UoKTsKLQkJLy8gbWVzc2FnZSBzaG91bGQgbmV2ZXIgYmUgbnVsbCAuLi4gYnV0IGp1c3QgaW4gY2FzZQotCQlyZXR1cm4gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogc3VwZXIudG9TdHJpbmcoKTsKLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1Rlc3RXcml0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGVzdFdyaXRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OTNmNTYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGVzdFdyaXRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgamF2YS5pby5TdHJpbmdXcml0ZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0V3JpdGVyIGV4dGVuZHMgU3RyaW5nV3JpdGVyIHsKLQkvLyB3ZSBkb24ndCByZWFsbHkgd2FudCB0byB1c2UgdGhlIHN5c3RlbSBFT0wsIHNpbmNlCi0JLy8gd2Ugd2FudCBhIGNvbW1vbiBvbmNlIGFjcm9zcyBwbGF0Zm9ybXMsIENWUywgZXRjLgotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIGNvbW1vbkVPTCA9ICJcclxuIjsKLQotCS8vU3lzdGVtLmdldFByb3BlcnR5KCJsaW5lLnNlcGFyYXRvciIpOyAKLQotCXB1YmxpYyB2b2lkIHdyaXRlbG4oU3RyaW5nIGxpbmUpIHsKLQkJd3JpdGUobGluZSk7Ci0JCXdyaXRlKGNvbW1vbkVPTCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL2NvcmUvdGVzdHMvdXRpbHMvVGltZXN0YW1wVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9UaW1lc3RhbXBVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzOThiYjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9UaW1lc3RhbXBVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMudXRpbHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRhdGVGb3JtYXQ7Ci1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5TaW1wbGVEYXRlRm9ybWF0OwotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgb25lIHRpbWVzdGFtcCBwZXIgVk0gcnVuLgotICogKFRlY2huaWNhbGx5LCBwZXIgY2xhc3MgbG9hZGluZy4pCi0gKi8KLXB1YmxpYyBjbGFzcyBUaW1lc3RhbXBVdGlsIHsKLQotCXByaXZhdGUgc3RhdGljIERhdGUgdGltZXN0YW1wID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBEYXRlRm9ybWF0IHNob3J0Rm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXknLSdNTSctJ2RkIik7Ci0JLy8JcHJpdmF0ZSBzdGF0aWMgRGF0ZUZvcm1hdCBsb25nRm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXknLSdNTSctJ2RkJy0na2snLSdtbSctJ3NzIik7Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgbm93U2hvcnQgPSBudWxsOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdGltZXN0YW1wKCkgewotCi0JCWlmIChUaW1lc3RhbXBVdGlsLm5vd1Nob3J0ID09IG51bGwpIHsKLQkJCVRpbWVzdGFtcFV0aWwubm93U2hvcnQgPSBzaG9ydEZvcm1hdC5mb3JtYXQoZW5zdXJlVGltZXN0YW1wKCkpOwotCQl9Ci0JCXJldHVybiBUaW1lc3RhbXBVdGlsLm5vd1Nob3J0OwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgRGF0ZSBlbnN1cmVUaW1lc3RhbXAoKSB7Ci0JCS8vIGp1c3QgY2FsY3VsYXRlICd0aW1lc3RhbXAnIG9uY2UgcGVyIGNsYXNzIGxvYWRpbmcsIAotCQkvLyBzbyB0aGlzICd0aW1lc3RhbXAnIHJlbWFpbnMgdGhlIHNhbWUgZHVyaW5nIAotCQkvLyBlbnRpcmUgcnVuLiAKLQkJaWYgKFRpbWVzdGFtcFV0aWwudGltZXN0YW1wID09IG51bGwpIHsKLQkJCUNhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLQkJCVRpbWVzdGFtcFV0aWwudGltZXN0YW1wID0gY2FsZW5kYXIuZ2V0VGltZSgpOwotCQl9Ci0JCXJldHVybiBUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcDsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvY29yZS90ZXN0cy91dGlscy9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM3MGFjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC9jb3JlL3Rlc3RzL3V0aWxzL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLnRlc3RzLnV0aWxzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLWNsYXNzIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBsZW1lbnRzIElQcm9ncmVzc01vbml0b3IgewotCXByaXZhdGUgYm9vbGVhbiBmaW5pc2hlZCA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgYmVnaW5UYXNrKFN0cmluZyBuYW1lLCBpbnQgdG90YWxXb3JrKSB7Ci0JCS8vIHdlIGRvbnQnIGNhcmUKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkb25lKCkgewotCQlmaW5pc2hlZCA9IHRydWU7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNGaW5pc2hlZCgpIHsKLQkJcmV0dXJuIGZpbmlzaGVkOwotCX0KLQotCXB1YmxpYyB2b2lkIGludGVybmFsV29ya2VkKGRvdWJsZSB3b3JrKSB7Ci0JCS8vIHdlIGRvbnQnIGNhcmUKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGVkKCkgewotCQlyZXR1cm4gZmluaXNoZWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q2FuY2VsZWQoYm9vbGVhbiB2YWx1ZSkgewotCQlpZiAodmFsdWUgPT0gdHJ1ZSkKLQkJCWZpbmlzaGVkID0gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUYXNrTmFtZShTdHJpbmcgbmFtZSkgewotCQkvLyB3ZSBkb24ndCBjYXJlCi0JfQotCi0JcHVibGljIHZvaWQgc3ViVGFzayhTdHJpbmcgbmFtZSkgewotCQkvLyB3ZSBkb24ndCBjYXJlCi0JfQotCi0JcHVibGljIHZvaWQgd29ya2VkKGludCB3b3JrKSB7Ci0JCS8vIHdlIGRvbid0IGNhcmUKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2OTI5MjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCi0JPHByb3BlcnR5Ci0JCW5hbWU9InBsdWdpbi1uYW1lIgotCQl2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS50ZXN0cy5IVE1MQ29yZVRlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJjb3JlLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NTFjOGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLmN2c2lnbm9yZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjA0OGUyYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLWh0bWxlbmNvZGluZ3Rlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA2OGI1Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJkNzUyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogaHRtbGVuY29kaW5ndGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5IVE1MRW5jb2RpbmdUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcsCi0gb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLAotIG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5qdW5pdCwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjNTk4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDIsIDIwMDY8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYjYyM2QuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotc291cmNlLmh0bWxlbmNvZGluZ3Rlc3RzLmphciA9IHNyYy8KLW91dHB1dC5odG1sZW5jb2Rpbmd0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBodG1sZW5jb2Rpbmd0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLyxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNmMxZmMxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gSFRNTCBFbmNvZGluZyBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL0hUTUxFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL0hUTUxFbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWIzZjQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9IVE1MRW5jb2RpbmdUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbC5IVE1MRW5jb2RpbmdUZXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5odG1sLkhUTUxIZWFkVG9rZW5pemVyVGVzdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWwuVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySFRNTDsKLQotcHVibGljIGNsYXNzIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtIVE1MRW5jb2RpbmdUZXN0cy5jbGFzcywgSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuY2xhc3MsIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckhUTUwuY2xhc3N9OwotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJIVE1MIEVuY29kaW5nIFRlc3QgU3VpdGUiKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoY2xhc3Nlc1tpXSwgY2xhc3Nlc1tpXS5nZXROYW1lKCkpKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqLwotCXB1YmxpYyBIVE1MRW5jb2RpbmdUZXN0U3VpdGUoQ2xhc3MgdGhlQ2xhc3MpIHsKLQkJc3VwZXIodGhlQ2xhc3MpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RTdWl0ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL0hUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJmOWVmOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZVJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotCi0vKioKLSAqIFRoZSBtYWluIHBsdWdpbiBjbGFzcyB0byBiZSB1c2VkIGluIHRoZSBkZXNrdG9wLgotICovCi1wdWJsaWMgY2xhc3MgSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vIFRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4gcGx1Z2luOwotCi0JcHVibGljIHN0YXRpYyBMaXN0IGdldEFsbFRlc3RGaWxlcyhTdHJpbmcgdG9wRGlyTmFtZSkgewotCQlMaXN0IHJlc3VsdCA9IG51bGw7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyB0b3BEaXJOYW1lOwotCQlGaWxlIHRvcERpciA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJaWYgKCF0b3BEaXIuaXNEaXJlY3RvcnkoKSkgewotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbih0b3BEaXJOYW1lICsgIiBpcyBub3QgYSBkaXJlY3RvcnkiKTsKLQkJfQotCQlyZXN1bHQgPSBnZXRGaWxlc0luRGlyKHRvcERpcik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBMaXN0IGdldEZpbGVzSW5EaXIoRmlsZSB0b3BEaXIpIHsKLQkJTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJRmlsZVtdIHRvcEZpbGVzID0gdG9wRGlyLmxpc3RGaWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRvcEZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlGaWxlIGZpbGUgPSB0b3BGaWxlc1tpXTsKLQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7Ci0JCQkJZmlsZXMuYWRkKGZpbGUpOwotCQkJfQotCQkJZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpICYmICFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiQ1ZTIikpIHsKLQkJCQlMaXN0IGlubmVyRmlsZXMgPSBnZXRGaWxlc0luRGlyKGZpbGUpOwotCQkJCWZpbGVzLmFkZEFsbChpbm5lckZpbGVzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBVUkwgZ2V0SW5zdGFsbExvY2F0aW9uKCkgewotCQlVUkwgaW5zdGFsbExvY2F0aW9uID0gUGxhdGZvcm0uZ2V0QnVuZGxlKCJvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLCBvciAna2V5JyBpZiBub3QKLQkgKiBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCA/IGJ1bmRsZS5nZXRTdHJpbmcoa2V5KSA6IGtleSk7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFRlc3RGaWxlKFN0cmluZyBmaWxlcGF0aCkgewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCUZpbGUgcmVzdWx0ID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgUmVhZGVyIGdldFRlc3RSZWFkZXIoU3RyaW5nIGZpbGVwYXRoKSB0aHJvd3MgRmlsZU5vdEZvdW5kRXhjZXB0aW9uIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy8gU3RyaW5nIHNjaGVtZSA9IGluc3RhbGxVUkwuZ2V0UHJvdG9jb2woKTsKLQkJU3RyaW5nIHBhdGggPSBpbnN0YWxsVVJMLmdldFBhdGgoKTsKLQkJU3RyaW5nIGxvY2F0aW9uID0gcGF0aCArIGZpbGVwYXRoOwotCQlSZWFkZXIgcmVzdWx0ID0gbmV3IEZpbGVSZWFkZXIobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgSFRNTEVuY29kaW5nVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIG51bGw7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEVuY29kaW5nVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC90ZXN0cy9lbmNvZGluZy9odG1sL0hUTUxFbmNvZGluZ1Rlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ZWQ4Y2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEVuY29kaW5nVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtUmVhZGVyOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldDsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0LkNoYXJzZXREZWNvZGVyOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ29kaW5nRXJyb3JBY3Rpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuSFRNTEVuY29kaW5nVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSVJlc291cmNlQ2hhcnNldERldGVjdG9yOwotCi1wdWJsaWMgY2xhc3MgSFRNTEVuY29kaW5nVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBFbnN1cmVzIHRoYXQgYW4gSW5wdXRTdHJlYW0gaGFzIG1hcmsvcmVzZXQgc3VwcG9ydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKElucHV0U3RyZWFtIG9yaWdpbmFsKSB7Ci0JCWlmIChvcmlnaW5hbCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWlmIChvcmlnaW5hbC5tYXJrU3VwcG9ydGVkKCkpCi0JCQlyZXR1cm4gb3JpZ2luYWw7Ci0JCXJldHVybiBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShvcmlnaW5hbCk7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJodG1sLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgaW50IFJFQURfQlVGRkVSX1NJWkUgPSA4MDAwOwotCi0JcHVibGljIEhUTUxFbmNvZGluZ1Rlc3RzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlU3RyZWFtKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkSUFOQUVuY29kaW5nLCBJUmVzb3VyY2VDaGFyc2V0RGV0ZWN0b3IgZGV0ZWN0b3IpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUZpbGUgZmlsZSA9IEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RGaWxlKGZpbGVuYW1lKTsKLQkJaWYgKCFmaWxlLmV4aXN0cygpKQotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbihmaWxlbmFtZSArICIgd2FzIG5vdCBmb3VuZCIpOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCS8vIElucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSW5wdXRTdHJlYW0gaXN0cmVhbSA9IGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oaW5wdXRTdHJlYW0pOwotCQl0cnkgewotCQkJZGV0ZWN0b3Iuc2V0KGlzdHJlYW0pOwotCQkJRW5jb2RpbmdNZW1lbnRvIGVuY29kaW5nTWVtZW50byA9ICgoSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcilkZXRlY3RvcikuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlTdHJpbmcgZm91bmRJQU5BRW5jb2RpbmcgPSBudWxsOwotCQkJaWYgKGVuY29kaW5nTWVtZW50byAhPSBudWxsKSB7Ci0JCQkJZm91bmRJQU5BRW5jb2RpbmcgPSBlbmNvZGluZ01lbWVudG8uZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0JCQl9Ci0JCQkvLyBJIGNoYW5nZWQgbWFueSAiZXF1YWxzIiB0byAiZXF1YWxzSWdub3JlQ2FzZSIgb24gMTEvNC8yMDAyLAotCQkJLy8gc2luY2UKLQkJCS8vIHNvbWUgaXNzdWVzIHdpdGggU0hJRlRfSklTIHZzLiBTaGlmdF9KSVMgd2VyZSBjYXVzaW5nIGZhaWx1cmVzLgotCQkJLy8gV2UgZG8gd2FudCB0byBiZSB0b2xlcmFudCBvbiBpbnB1dCwgYW5kIGFjY2VwdCBlaXRoZXIsIGJ1dCBJCi0JCQkvLyB0aGluawotCQkJLy8gdGhhdCBTdXBwb3J0ZWRKYXZhRW5jb2RpbmdzIG5lZWRzIHRvIGJlIGNoYW5nZWQgdG8gInJlY29tbWVuZCIKLQkJCS8vIFNoaWZ0X0pJUy4KLQkJCWJvb2xlYW4gZXhwZWN0ZWRJQU5BUmVzdWx0ID0gZmFsc2U7Ci0JCQlpZiAoZXhwZWN0ZWRJQU5BRW5jb2RpbmcgPT0gbnVsbCkgewotCQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IChleHBlY3RlZElBTkFFbmNvZGluZyA9PSBmb3VuZElBTkFFbmNvZGluZyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlleHBlY3RlZElBTkFSZXN1bHQgPSBleHBlY3RlZElBTkFFbmNvZGluZy5lcXVhbHNJZ25vcmVDYXNlKGZvdW5kSUFOQUVuY29kaW5nKTsKLQkJCX0KLQotCQkJYXNzZXJ0VHJ1ZSgiZW5jb2RpbmcgdGVzdCBmaWxlICIgKyBmaWxlbmFtZSArICIgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZElBTkFFbmNvZGluZyArICIgZm91bmQ6ICIgKyBmb3VuZElBTkFFbmNvZGluZywgZXhwZWN0ZWRJQU5BUmVzdWx0KTsKLQkJCS8vIGEgdmVyeSBzaW1wbGUgcmVhZCB0ZXN0IC4uLiB3aWxsIGNhdXNlIEpVbml0IGVycm9yIChub3QgZmFpbCkKLQkJCS8vIGlmCi0JCQkvLyB0aHJvd3MgZXhjZXB0aW9uLgotCQkJaWYgKGV4cGVjdGVkSUFOQUVuY29kaW5nICE9IG51bGwpIHsKLQkJCQllbnN1cmVDYW5SZWFkKGZpbGVuYW1lLCBmb3VuZElBTkFFbmNvZGluZywgaXN0cmVhbSk7Ci0JCQl9Ci0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChpc3RyZWFtICE9IG51bGwpIHsKLQkJCQlpc3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBqdXN0IHJlYWRzIHRvIHN0cmVhbSwgdG8gYmUgc3VyZSBpdCBjYW4gYmUgcmVhZCBwZXIKLQkgKiBlbmNvZGluZywgd2l0aG91dCBleGNlcHRpb24uCi0JICovCi0JcHJpdmF0ZSB2b2lkIGVuc3VyZUNhblJlYWQoU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgZW5jb2RpbmcsIElucHV0U3RyZWFtIGluU3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoZW5jb2RpbmcpOwotCQlDaGFyc2V0RGVjb2RlciBjaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQljaGFyc2V0RGVjb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCi0JCUlucHV0U3RyZWFtUmVhZGVyIHJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpblN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gcmVhZElucHV0U3RyZWFtKHJlYWRlcik7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZmlsZW5hbWUpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKHN0cmluZ0J1ZmZlci50b1N0cmluZygpKTsKLQkJfQotCX0KLQotCXByaXZhdGUgU3RyaW5nQnVmZmVyIHJlYWRJbnB1dFN0cmVhbShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbUkVBRF9CVUZGRVJfU0laRV07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlcjsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHlGaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIkVtcHR5RmlsZS5odG1sIjsKLQkJLy8gSFRNTCBoYXMgbm8gc3BlYyBkZWZhdWx0IGVuY29kaW5nLiBXaWxsIHVzZSBwbGF0Zm9ybSBkZWZhdWx0IGVuY29kaW5nLgotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuZW5jb2RpbmciKSwgbmV3IEhUTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiVVRGLTgiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TXVsdGlOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk11bHRpTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIklTTy04ODU5LTYiLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmh0bWwiOwotCQkvLyBIVE1MIGhhcyBubyBzcGVjIGRlZmF1bHQgZW5jb2RpbmcuIFdpbGwgdXNlIHBsYXRmb3JtIGRlZmF1bHQgZW5jb2RpbmcuCi0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsIFN5c3RlbS5nZXRQcm9wZXJ0eSgiZmlsZS5lbmNvZGluZyIpLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9xdW90ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAibm9xdW90ZXMuaHRtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtOCIsIG5ldyBIVE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsTm9uRGVmYXVsdC5odG1sIjsKLQkJU3RyaW5nIGlhbmFJbkZpbGUgPSAiVVRGLTgiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgSFRNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9IVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjBlYzRiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9IVE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuaHRtbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLnJlZ2V4LlBhdHRlcm47Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkhUTUxIZWFkVG9rZW5pemVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuSFRNTEhlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IZWFkUGFyc2VyVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcuSFRNTEVuY29kaW5nVGVzdHNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkVuY29kaW5nUGFyc2VyQ29uc3RhbnRzOwotCi1wdWJsaWMgY2xhc3MgSFRNTEhlYWRUb2tlbml6ZXJUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBTdHJpbmcgZkNoYXJzZXQ7Ci0KLQlwcml2YXRlIFN0cmluZyBmQ29udGVudFR5cGVWYWx1ZTsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImh0bWwvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlSG9tZSA9ICJ0ZXN0ZmlsZXMvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSB0aGlzLmZpbGVIb21lICsgdGhpcy5maWxlRGlyOwotCXByaXZhdGUgU3RyaW5nIGZQYWdlRW5jb2RpbmdWYWx1ZSA9IG51bGw7Ci0JcHJpdmF0ZSBTdHJpbmcgZlhNTERlY0VuY29kaW5nTmFtZTsKLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RGaWxlKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGV4cGVjdGVkTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgZXhwZWN0ZWROYW1lLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBmaW5hbFRva2VuVHlwZSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSFRNTEhlYWRUb2tlbml6ZXIgdG9rZW5pemVyID0gbnVsbDsKLQkJUmVhZGVyIGZpbGVSZWFkZXIgPSBudWxsOwotCQl0cnkgewotCQkJaWYgKHRoaXMuREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAiICsgZmlsZW5hbWUpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJfQotCQkJZmlsZVJlYWRlciA9IEhUTUxFbmNvZGluZ1Rlc3RzUGx1Z2luLmdldFRlc3RSZWFkZXIoZmlsZW5hbWUpOwotCQkJdG9rZW5pemVyID0gbmV3IEhUTUxIZWFkVG9rZW5pemVyKGZpbGVSZWFkZXIpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkVycm9yIG9wZW5pbmcgZmlsZSBcIiIgKyBmaWxlbmFtZSArICJcIiIpOwotCQl9Ci0KLQkJSGVhZFBhcnNlclRva2VuIHJlc3VsdFRva2VuID0gbnVsbDsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gcGFyc2VIZWFkZXIodG9rZW5pemVyKTsKLQkJU3RyaW5nIHJlc3VsdFZhbHVlID0gZ2V0QXBwcm9wcmlhdGVFbmNvZGluZygpOwotCQlmaWxlUmVhZGVyLmNsb3NlKCk7Ci0JCWlmIChmaW5hbFRva2VuVHlwZSAhPSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJkaWQgbm90IGVuZCBhcyBleHBlY3RlZC4gZm91bmQ6ICAiICsgdG9rZW4uZ2V0VHlwZSgpLCBmaW5hbFRva2VuVHlwZS5lcXVhbHModG9rZW4uZ2V0VHlwZSgpKSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAoZXhwZWN0ZWROYW1lID09IG51bGwpIHsKLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCBubyBlbmNvZGluZywgYnV0IGZvdW5kOiAiICsgcmVzdWx0VmFsdWUsIHJlc3VsdFRva2VuID09IG51bGwpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gVE9ETzogbmVlZCB0byB3b3JrIG9uIGNhc2UgaXNzdWVzCi0JCQkJYXNzZXJ0VHJ1ZSgiZXhwZWN0ZWQgIiArIGV4cGVjdGVkTmFtZSArICIgYnV0IGZvdW5kICIgKyByZXN1bHRWYWx1ZSwgZXhwZWN0ZWROYW1lLmVxdWFscyhyZXN1bHRWYWx1ZS50b1VwcGVyQ2FzZSgpKSk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RNYWxmb3JtZWROb0VuY29kaW5nWFNMKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxOb25EZWZhdWx0KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3ROb3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0ZGVmZWN0MjIzMzY1KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJTZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiOwotCS8vIGRvVGVzdEZpbGUoZmlsZW5hbWUpOwotCS8vIH0KLQkvKioKLQkgKiByZXR1cm5zIGVuY29kaW5nIGFjY29yZGluZyB0byBwcmlvcml0eTogMS4gWE1MIERlY2xhcmF0aW9uIDIuIHBhZ2UKLQkgKiBkaXJlY3RpdmUgcGFnZUVuY29kaW5nIG5hbWUgMy4gcGFnZSBkaXJlY3RpdmUgY29udGVudFR5cGUgY2hhcnNldCBuYW1lCi0JICovCi0JcHJpdmF0ZSBTdHJpbmcgZ2V0QXBwcm9wcmlhdGVFbmNvZGluZygpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCWlmICh0aGlzLmZYTUxEZWNFbmNvZGluZ05hbWUgIT0gbnVsbCkgewotCQkJcmVzdWx0ID0gdGhpcy5mWE1MRGVjRW5jb2RpbmdOYW1lOwotCQl9Ci0JCWVsc2UgaWYgKHRoaXMuZlBhZ2VFbmNvZGluZ1ZhbHVlICE9IG51bGwpIHsKLQkJCXJlc3VsdCA9IHRoaXMuZlBhZ2VFbmNvZGluZ1ZhbHVlOwotCQl9Ci0JCWVsc2UgaWYgKHRoaXMuZkNoYXJzZXQgIT0gbnVsbCkgewotCQkJcmVzdWx0ID0gdGhpcy5mQ2hhcnNldDsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0xlZ2FsU3RyaW5nKFN0cmluZyB0b2tlblR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHRva2VuVHlwZSA9PSBudWxsKSB7Ci0JCQlyZXN1bHQgPSBmYWxzZTsKLQkJfQotCQllbHNlIHsKLQkJCXJlc3VsdCA9IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5JbnZhbGlkVGVybWluYXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW50YXRlZFVuRGVsaW1pdGVkU3RyaW5nVmFsdWUpOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBhcnNlQ29udGVudFR5cGVWYWx1ZShTdHJpbmcgY29udGVudFR5cGUpIHsKLQkJUGF0dGVybiBwYXR0ZXJuID0gUGF0dGVybi5jb21waWxlKCI7XFxzKmNoYXJzZXRcXHMqPVxccyoiKTsKLQkJU3RyaW5nW10gcGFydHMgPSBwYXR0ZXJuLnNwbGl0KGNvbnRlbnRUeXBlKTsKLQkJaWYgKHBhcnRzLmxlbmd0aCA+IDApIHsKLQkJCS8vIGlmIG9ubHkgb25lIGl0ZW0sIGl0IGNhbiBzdGlsbCBiZSBjaGFyc2V0IGluc3RlYWQgb2YKLQkJCS8vIGNvbnRlbnRUeXBlCi0JCQlpZiAocGFydHMubGVuZ3RoID09IDEpIHsKLQkJCQlpZiAocGFydHNbMF0ubGVuZ3RoKCkgPiA2KSB7Ci0JCQkJCVN0cmluZyBjaGVja0ZvckNoYXJzZXQgPSBwYXJ0c1swXS5zdWJzdHJpbmcoMCwgNyk7Ci0JCQkJCWlmIChjaGVja0ZvckNoYXJzZXQuZXF1YWxzSWdub3JlQ2FzZSgiY2hhcnNldCIpKSB7Ci0JCQkJCQlpbnQgZXFwb3MgPSBwYXJ0c1swXS5pbmRleE9mKCc9Jyk7Ci0JCQkJCQllcXBvcyA9IGVxcG9zICsgMTsKLQkJCQkJCWlmIChlcXBvcyA8IHBhcnRzWzBdLmxlbmd0aCgpKSB7Ci0JCQkJCQkJdGhpcy5mQ2hhcnNldCA9IHBhcnRzWzBdLnN1YnN0cmluZyhlcXBvcyk7Ci0JCQkJCQkJdGhpcy5mQ2hhcnNldCA9IHRoaXMuZkNoYXJzZXQudHJpbSgpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJLy8gZkNvbnRlbnRUeXBlID0gcGFydHNbMF07Ci0JCQl9Ci0KLQkJfQotCQlpZiAocGFydHMubGVuZ3RoID4gMSkgewotCQkJdGhpcy5mQ2hhcnNldCA9IHBhcnRzWzFdOwotCQl9Ci0JfQotCi0JLyoqCi0JICogR2l2ZSdzIHByaW9yaXR5IHRvIGVuY29kaW5nIHZhbHVlLCBpZiBmb3VuZCBlbHNlLCBsb29rcyBmb3IgY29udGVudFR5cGUKLQkgKiB2YWx1ZTsKLQkgKi8KLQlwcml2YXRlIEhlYWRQYXJzZXJUb2tlbiBwYXJzZUhlYWRlcihIVE1MSGVhZFRva2VuaXplciB0b2tlbml6ZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCXRoaXMuZlBhZ2VFbmNvZGluZ1ZhbHVlID0gbnVsbDsKLQkJdGhpcy5mQ2hhcnNldCA9IG51bGw7Ci0JCS8qCi0JCSAqIGlmICh0b2tlblR5cGUgPT0gWE1MSGVhZFRva2VuaXplckNvbnN0YW50cy5YTUxEZWxFbmNvZGluZykgeyBpZgotCQkgKiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgeyBJVGV4dEhlYWRSZWdpb24gdmFsdWVUb2tlbiA9Ci0JCSAqIHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsgU3RyaW5nIHZhbHVlVG9rZW5UeXBlID0KLQkJICogdmFsdWVUb2tlbi5nZXRUeXBlKCk7IGlmIChpc0xlZ2FsKHZhbHVlVG9rZW5UeXBlKSkgeyByZXN1bHRWYWx1ZSA9Ci0JCSAqIHZhbHVlVG9rZW4uZ2V0VGV4dCgpOyBpZiAoREVCVUcpIHsgU3lzdGVtLm91dC5wcmludGxuKCJYTUwgSGVhZAotCQkgKiBUb2tlbml6ZXIgRm91bmQgRW5jb2Rpbmc6ICIgKyByZXN1bHRWYWx1ZSk7IH0gfSB9IH0KLQkJICovCi0JCUhlYWRQYXJzZXJUb2tlbiB0b2tlbiA9IG51bGw7Ci0JCUhlYWRQYXJzZXJUb2tlbiBmaW5hbFRva2VuID0gbnVsbDsKLQkJZG8gewotCQkJdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQlpZiAodGhpcy5ERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbih0b2tlbik7Ci0JCQl9Ci0JCQlTdHJpbmcgdG9rZW5UeXBlID0gdG9rZW4uZ2V0VHlwZSgpOwotCQkJaWYgKHRva2VuVHlwZSA9PSBIVE1MSGVhZFRva2VuaXplckNvbnN0YW50cy5NZXRhVGFnQ29udGVudFR5cGUpIHsKLQkJCQlpZiAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCQlIZWFkUGFyc2VyVG9rZW4gdmFsdWVUb2tlbiA9IHRva2VuaXplci5nZXROZXh0VG9rZW4oKTsKLQkJCQkJaWYgKHRoaXMuREVCVUcpIHsKLQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbih2YWx1ZVRva2VuKTsKLQkJCQkJfQotCQkJCQlTdHJpbmcgdmFsdWVUb2tlblR5cGUgPSB2YWx1ZVRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodmFsdWVUb2tlblR5cGUpKSB7Ci0JCQkJCQl0aGlzLmZDb250ZW50VHlwZVZhbHVlID0gdmFsdWVUb2tlbi5nZXRUZXh0KCk7Ci0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQotCQl9Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKTsKLQkJaWYgKHRoaXMuZkNvbnRlbnRUeXBlVmFsdWUgIT0gbnVsbCkgewotCQkJcGFyc2VDb250ZW50VHlwZVZhbHVlKHRoaXMuZkNvbnRlbnRUeXBlVmFsdWUpOwotCQl9Ci0JCWZpbmFsVG9rZW4gPSB0b2tlbjsKLQkJcmV0dXJuIGZpbmFsVG9rZW47Ci0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QmVzdENhc2UoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0Lmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQuanNwIjsKLQkvLyBkb1Rlc3RGaWxlKGZpbGVuYW1lKTsKLQkvLyB9Ci0JLy8gcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZDIoKSB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQyLmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCS8vIHB1YmxpYyB2b2lkIHRlc3RJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0KCkgewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCI7Ci0JLy8gZG9UZXN0RmlsZShmaWxlbmFtZSk7Ci0JLy8gfQotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWROb3JtYWxOb25EZWZhdWx0KCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gdGhpcy5maWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExhcmdlQ2FzZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IHRoaXMuZmlsZUxvY2F0aW9uICsgIkxhcmdlTm9uRGVmYXVsdC5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIklTTy04ODU5LTEiKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RMYXJnZU5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJMYXJnZU5vRW5jb2RpbmcuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwsIEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLk1BWF9DSEFSU19SRUFDSEVEKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RNdWx0aU5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJNdWx0aU5vbkRlZmF1bHQuaHRtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS02Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5vRW5jb2RpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJOb0VuY29kaW5nLmh0bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0bm9xdW90ZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSB0aGlzLmZpbGVMb2NhdGlvbiArICJub3F1b3Rlcy5odG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0KLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JIVE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdGVzdHMvZW5jb2RpbmcvaHRtbC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JIVE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRhYjM3YjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3Rlc3RzL2VuY29kaW5nL2h0bWwvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9ySFRNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nLmh0bWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb250ZW50VHlwZURldGVjdGlvbjsKLQotcHVibGljIGNsYXNzIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvckhUTUwgZXh0ZW5kcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gewotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmh0bWxzb3VyY2UiLCAidGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUuaHRtbHNvdXJjZSIsICJ0ZXN0ZmlsZXMvaHRtbC9Ob3JtYWxOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYmY3NzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy5IVE1MRW5jb2RpbmdUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWY4YjVjOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTg+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS02Ij4KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPgotPFRJVExFPklCTSBXZWJTcGhlcmUgU2FtcGxlcyBHYWxsZXJ5PC9USVRMRT4KLTwvSEVBRD4KLTxGUkFNRVNFVCByb3dzPSI3NSwqIj4KLQk8RlJBTUUgbmFtZT0idGl0bGUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvVGl0bGUuaHRtbCIgc2Nyb2xsaW5nPSJOTyIgbm9yZXNpemU+Ci0JPEZSQU1FU0VUIGNvbHM9IjE2MCwqIj4KLQkJPEZSQU1FIG5hbWU9Im1lbnUiIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvTWVudS5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCQk8RlJBTUUgbmFtZT0ibWFpbiIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9TYW1wbGVzSW50cm8uaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQk8L0ZSQU1FU0VUPgotCTxOT0ZSQU1FUz4KLQk8Qk9EWT4KLQk8UD5UbyB2aWV3IHRoaXMgcGFnZSwgeW91IG5lZWQgYSBicm93c2VyIHRoYXQgc3VwcG9ydHMgZnJhbWVzLjwvUD4KLQk8L0JPRFk+Ci0JPC9OT0ZSQU1FUz4KLTwvRlJBTUVTRVQ+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NGNhNjBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjY0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDL0RURC8gSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJNb3ppbGxhLzQuNyBbZW5dIChXaW5OVDsgVSkgW05ldHNjYXBlXSI+Ci08TUVUQSBjb250ZW50PSJ0ZXh0L2NzcyIgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIj4KLTx0aXRsZT5zbW9rZTwvdGl0bGU+Ci08L2hlYWQ+Ci08Ym9keT4KLTxoMj4gU21va2UgVGVzdCAtIFhNTCBFZGl0b3I8L2gyPgotTGFzdCB1cGRhdGVkOiBKdW5lIDI1LCAyMDAxCi08UD5UaGlzIFNtb2tlIFRlc3QgcHJpbWFyaWx5IGZvY3VzZXMgb24gdGhlIFJUUCBwb3J0aW9uIG9mIHRoZSBYTUwgCi1FZGl0aW9yLCB3aGljaCBpcyB0aGUgU291cmNlIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IuIEl0IGFsc28gcGVyZm9ybXMgCi1zb21lIGludGVncmF0aW9uIHRlc3RpbmcuIEZvciBleGFtcGxlLCBpdCB0ZXN0cyBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiAKLXRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlcyBvZiB0aGUgWE1MIEVkaXRvciwgYXMgd2VsbCBhcyB3aXRoIHRoZSAKLU91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlld3MuIEl0IGFsc28gdmVyaWZpZXMgdGhhdCBmaWxlcyBjcmVhdGVkIAotdGhyb3VnaCB0aGUgWE1MIEZpbGUgd2l6YXJkIGFuZCByZWZlcmVuY2VzIHRvIHRoZSBYTUwgQ2F0YWxvZyBhcmUgCi1zdXBwb3J0ZWQgYXMgZXhwZWN0ZWQuPC9QPgotPFA+PEZPTlQgY29sb3I9IiNmZjAwMDAiPjxCPk5PVEU8L0I+OiBYTUwgZmlsZXMgYXJlIGNhc2Utc2Vuc2l0aXZlIHNvIGJlIHN1cmUgdGhhdCB0aGluZ3MgYXBwZWFyIAotZXhhY3RseSBhcyBub3RlZC48L0ZPTlQ+PC9QPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBTZXR1cAotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNldHVwPC9GT05UPjwvSDI+Ci08UD48Qj5TdGFydGluZyBDbGVhbjwvQj48L1A+Ci08dWw+Ci0gICAgPGxpPiBEZWxldGUgYW55IGV4aXN0aW5nIHdvcmtiZW5jaDwvbGk+Ci0gICAgPGxpPiBTdGFydCBFY2xpcHNlPC9saT4KLTwvdWw+Ci08UD48Qj5PcGVuIGFuIFhNTCBQZXJzcGVjdGl2ZTxCUj4KLTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+T3BlbiBQZXJzcGVjdGl2ZTwvQj4gdG9vbGJhciBidXR0b24gaW4gdGhlIHVwcGVyIGxlZnQ8L0xJPgotICAgIDxMST5TZWxlY3QgPEI+T3RoZXIuLi48L0I+PC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPlhNTDwvQj48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyB2aWV3cyBhcHBlYXIgaW4gdGhlIFhNTCBwZXJzcGVjdGl2ZTogPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoZSBsb2NhdGlvbiBvZiB0aGUgT3V0bGluZSBhbmQgTmF2aWdhdG9yIHZpZXdzIGFyZSByZXZlcnNlZCBmcm9tIHRoZSBSZXNvdXJjZSBhbmQgV2ViIHBlcnNwZWN0aXZlcy4gRG8gd2Ugd2FudCB0byB0cnkgdG8gYmUgY29uc2lzdGVudCBhY3Jvc3MgdGhlIHBlcnNwZWN0aXZlcz8gQWxzbywgSSBvcGVuZWQgPEI+ZGVmZWN0PC9CPiAxNzc2NjQgdG8gZW5hYmxlIGVhc3kgYWNjZXNzIHRvIHRoZSBQcm9wZXJ0aWVzIHZpZXcgZnJvbSB3aXRoaW4gdGhlIFhNTCBwZXJzcGVjdGl2ZS4gSWYgdGhpcyB2aWV3IGlzbid0IGluY2x1ZGVkIGluIHRoZSBQZXJzcGVjdGl2ZSBiZWNhdXNlIGl0cyB1c2UgaXMgbGltaXRlZCwgdGhlbiByZWNvbW1lbmQgd2UgYXQgbGVhc3QgcHJvdmlkZSBhIFNob3cgb3IgSGlkZSBQcm9wZXJ0aWVzIFZpZXcgdG9vbGJhciBidXR0b24gKHNpbWlsYXIgdG8gdGhlIGJ1dHRvbnMgdGhhdCBQYWdlIERlc2lnbmVyIHByb3ZpZGVzKS48L0ZPTlQ+PC9MST4KLTwvVUw+Ci08UD48Qj5Qcm9qZWN0IENyZWF0aW9uIGFuZCBGaWxlIEltcG9ydHM8QlI+Ci08L0I+PC9QPgotPFVMPgotICAgIDxMST5DcmVhdGUgYSBQcm9qZWN0LCA8Qj5YTUxUZXN0MjwvQj4gPC9MST4KLSAgICA8TEk+SW1wb3J0IHRoZSBmb2xsb3dpbmcgZmlsZXMgaW50byB0aGlzIHByb2plY3Q6Ci0gICAgPFVMPgotICAgICAgICA8TEk+PEI+UHVyY2hhc2VPcmRlci54c2Q8L0I+PC9MST4KLSAgICAgICAgPExJPjxCPkludm9pY2UuZHRkPC9CPjwvTEk+Ci0gICAgPExJPjxCPkpvYkRlc2MueG1sPC9CPjwvTEk+Ci0gICAgPExJPjxCPldpcmVsZXNzLnhtbDwvQj48L0xJPgotICAgIDxMST48Qj5nb3RjaGFUQ0JlYW5zLnNldDwvQj48L0xJPgotICAgIDxMST48Qj5BVFMuZHRkPC9CPjwvTEk+Ci0gICAgPExJPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5hbnkgb3RoZXJzPzwvRk9OVD48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLTwvVUw+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgQ3JlYXRlL09wZW4vRWRpdCB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q3JlYXRlL09wZW4vRWRpdCB0ZXN0IGNhc2VzPC9GT05UPjwvSDI+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBzY3JhdGNoPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgQ3JlYXRlIGEgWE1MIEZpbGUgd2l6YXJkIGFwcGVhcnMgYW5kIHRoZSBGaW5pc2ggYnV0dG9uIGlzIGRpc2FibGVkLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+PEI+REVGRUNUOjwvQj4gMTc3NjYwIC0gWE1MIEZpbGUgd2l6YXJkOiBkaXNhYmxlIEZpbmlzaCBidXR0b24gb24gdGhlIGZpcnN0IHBhZ2U8L0ZPTlQ+LjwvTEk+Ci0gICAgPExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPmZyb21TY3JhdGNoPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZzoKLSAgICA8VUw+Ci0gICAgICAgIDxMST5mcm9tU2NyYXRjaC54bWwgYXBwZWFycyBpbiB0aGUgTmF2aWdhdG9yIHZpZXcuPC9MST4KLSAgICAgICAgPExJPmZyb21TY3JhdGNoLnhtbCBpcyBvcGVuIHRvIHRoZSBEZXNpZ24gcGFnZSBvZiB0aGUgWE1MIEVkaXRvciBhbmQgaGFzIGZvY3VzLjwvTEk+Ci0gICAgICAgIDxMST50aGUgRGVzaWduIHRhYiBhcHBlYXJzIGJlZm9yZSB0aGUgU291cmNlIHRhYiBpbiB0aGUgWE1MIEVkaXRvci48L0xJPgotICAgICAgICA8TEk+dGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2Ugc2hvdyBubyBjb250ZW50LjwvTEk+Ci0gICAgICAgIDxMST50aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3cyBzaG93IG5vdGhpbmcuPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlN3aXRjaCB0byB0aGUgU291cmNlIHBhZ2UuIFZlcmlmeSB0aGUgY3Vyc29yIGFwcGVhcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5SaWdodCBtb3VzZSBidXR0b24gMiBhbmQgdmVyaWZ5IGEgcG9wdXAgbWVudSBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi4gVmVyaWZ5IHRoZSBjb250ZW50IGFzc2lzdCBwcm9wb3NhbCBsaXN0IGFwcGVhcnMuPC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDs8L0I+PC9MST4KLSAgICA8TEk+VmVyaWZ5ICZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsgaXMgaW5zZXJ0ZWQgYW5kIGFwcGVhcnMgc3ludGF4IGhpZ2hsaWdodGVkIGFuZCBhbiBlbnRyeSBhcHBlYXJzIGZvciBpdCBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3Igd2l0aGluIHRoZSBYTUwgZGVjbGFyYXRpb24gYW5kIHZlcmlmeSA8Qj52ZXJzaW9uPC9CPiBhbmQgPEI+ZW5jb2Rpbmc8L0I+IGFwcGVhciBpbiB0aGUgUHJvcGVydGllcyB2aWV3LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhpcyB1c2VkIHRvIHdvcmssIGJ1dCBub3cgaXQncyBub3Qgd29ya2luZy4gT3BlbmVkIDxCPmRlZmVjdDwvQj4gMTc3NjYyIC0gWE1MIGRlY2xhcmF0aW9uIGF0dHJpYnV0ZXMgbm90IGFwcGVhcmluZyBpbiBQcm9wZXJ0aWVzIHZpZXcuIElmIHdlIGRlY2lkZSB0byBub3QgdHJlYXQgdmVyc2lvbiBhbmQgZW5jb2RpbmcgYXMgYXR0cmlidXRlcywgdGhlbiB0aGlzIHN0ZXAgc2hvdWxkIGJlIHJlbW92ZWQuPC9GT05UPjwvTEk+Ci0gICAgPExJPkNvbnRpbnVlIHRvIHRoZSBuZXh0IHNlY3Rpb24uPC9MST4KLTwvVUw+Ci08UD48Qj5JZGVudGlmeSBhIGxvY2FsIERURCAoPC9CPnZlcmlmaWVzIGEgRFREIGlzIGltbWVkaWF0ZWx5IHJlY29nbml6ZWQ7IGluIHRoZSBwYXN0LCB5b3UgaGFkIHRvIGNsb3NlIGFuZCByZW9wZW4gdGhlIFdvcmtiZW5jaDxCPik8L0I+PC9QPgotPFVMPgotICAgIDxMST5UeXBlIHRoZSBmb2xsb3dpbmcgYWZ0ZXIgdGhlIFhNTCBkZWNsYXJhdGlvbiBpbiA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+OiA8Qj4mbHQ7IURPQ1RZUEUgSW52b2ljZSBTWVNURU0gJnF1b3Q7SW52b2ljZS5kdGQmcXVvdDsmZ3Q7PC9CPi4gVGhlIHRleHQgc2hvdWxkIGJlIHN5bnRheCBoaWdobGlnaHRlZCBhcyB5b3UgdHlwZSBhbmQgeW91IHNob3VsZCBzZWUgYW4gZW50cnkgZ2V0IGFkZGVkIHRvIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBjcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgRE9DVFlQRSBkZWNsYXJhdGlvbi48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uVmVyaWZ5IG9ubHkgPEI+SW52b2ljZTwvQj4gYW5kIDxCPmNvbW1lbnQ8L0I+IGFwcGVhciBpbiB0aGUgcHJvcG9zYWwgbGlzdC4gKDxCPk5PVEU8L0I+OiA8Qj5JbnZvaWNlPC9CPiBpcyB0aGUgcm9vdCBlbGVtZW50KTwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gYWNjZXB0IDxCPkludm9pY2U8L0I+IGFzIGEgc2VsZWN0aW9uLiBWZXJpZnkgdGhlIEludm9pY2Ugc3RhcnQgYW5kIGVuZCB0YWdzIGFyZSBpbnNlcnRlZCBpbnRvIHRoZSBTb3VyY2UgYW5kIHRoZSBjdXJzb3IgYXBwZWFycyBiZXR3ZWVuIHRoZW0uIEFuIGVsZW1lbnQgZW50cnkgc2hvdWxkIGFwcGVhciBmb3IgSW52b2ljZSBpbiB0aGUgT3V0bGluZSB2aWV3LiAoPEI+Tk9URTwvQj46IFhNTCBpcyBjYXNlLXNlbnNpdGl2ZSBzbyBiZSBzdXJlIHlvdSBzZWUgSW52b2ljZSBhbmQgbm90IGludm9pY2UgZXZlcnl3aGVyZSkuPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LiBWZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXJzIGluIHRoZSBwcm9wb3NhbCBsaXN0IChpbiB0aGUgb3JkZXIgc2hvd24pOiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SXRlbSBpcyBhcHBlYXJpbmcgYmVmb3JlIEhlYWRlci4gVGhlIGRlZmF1bHQgaXMgbm90IHRvIHNvcnQgdGhlIGxpc3QgYWxwaGFiZXRpY2FsbHkuIFRoYXQgbWVhbnMgdGhlIGxpc3Qgc2hvdWxkIGJlIHNvcnRlZCBiYXNlZCBvbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhlIGNoaWxkIHRhZ3MgYXJlIGRlZmluZWQgaW4gdGhlIGVsZW1lbnQgZGVmaW5pdGlvbiBmb3IgSW52b2ljZSBpbiB0aGUgRFRELiBJbiBvdGhlciB3b3JkcywgdXNlcnMgc2hvdWxkIHNlZSBjaGlsZCB0YWdzIGxpc3RlZCBhY2NvcmRpbmcgdG8gdGhlaXIgc2VxdWVuY2luZyBvcmRlciBpbiB0aGUgRFRELCB3aGljaCB0aGUgRFREIEVkaXRvciBzaG93cy4gVmlvbGF0aW5nIHRoZSBzZXF1ZW5jaW5nIG9yZGVyIGNhdXNlcyBhbiBYTUwgZmlsZSB0byBiZWNvbWUgbm90IHZhbGlkLiA8Qj5ERUZFQ1Q6PC9CPiAxNzc2Njg8L0ZPTlQ+Ci0gICAgPFVMPgotICAgICAgICA8TEk+SGVhZGVyPC9MST4KLSAgICAgICAgPExJPkl0ZW08L0xJPgotICAgICAgICA8TEk+Y29tbWVudDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGFjY2VwdCA8Qj5IZWFkZXI8L0I+IGFzIGEgc2VsZWN0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgU291cmNlIG5vdyBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgYW5kIHRoZSBjdXJzb3IgYXBwZWFycyBiZWZvcmUgPEI+aW52b2ljZU51bWJlcjwvQj46PElNRyBib3JkZXI9IjAiIGhlaWdodD0iODMiIHNyYz0iaWRlbnRpZnlEVEQuanBnIiB3aWR0aD0iNDg1Ij48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+SGVhZGVyPC9CPiBhcHBlYXJzIG5lc3RlZCB1bmRlciA8Qj5JbnZvaWNlPC9CPiBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gIDxMST5DbG9zZSB0aGlzIGZpbGUsIGFuZCByZXNwb25kIDxCPlllczwvQj4gd2hlbiBwcm9tcHRlZCB0byBzYXZlIHRoZSBjaGFuZ2VzLjwvTEk+Ci0gIDxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSB0aGUgY2hhbmdlcyB3ZXJlIHNhdmVkLjwvTEk+Ci0gIDxMST5DbG9zZSB0aGUgZmlsZS4gVmVyaWZ5IG5vIHNhdmUgY2hhbmdlcyBwcm9tcHQgYXBwZWFycy48L0xJPgotPC9VTD4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIGFuIGltcG9ydGVkIERURDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+RmlsZS0mZ3Q7TmV3LSZndDtYTUwgRmlsZTwvQj4uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBDcmVhdGUgYSBYTUwgRmlsZSB3aXphcmQgYXBwZWFycy48L0xJPgotICAgIDxMST5TZWxlY3QgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlIGZyb20gYSBEVEQgZmlsZTwvQj48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+ZnJvbUxvY2FsRFREPC9CPjwvTEk+Ci0gICAgICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+SW1wb3J0IEZpbGU8L0I+IGJ1dHRvbgotICAgIDxVTD4KLSAgICAgICAgPExJPlVzZSB0aGUgQnJvd3NlIGJ1dHRvbiB0byBmaW5kIDxCPnRlc3RjYXNlLmR0ZDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V291bGQgYmUgbmljZSBpZiB0aGlzIHdlcmUgYWxyZWFkeSBmaWxsZWQgaW4uIE9wZW4gYSBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPiB0byBjbG9zZSB0aGUgSW1wb3J0IEZpbGUgd2l6YXJkPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPkV4cGFuZCA8Qj5YTUx0ZXN0MjwvQj4gYW5kIHRoZW4gc2VsZWN0IDxCPnRlc3RjYXNlLmR0ZDwvQj4uIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5XYXMgZXhwZWN0aW5nIHRvIHNlZSB0aGUgaW1wb3J0ZWQgZmlsZSBzZWxlY3RlZCBpbiB0aGUgV29ya2JlbmNoIGZpbGVzIGxpc3QsIGJ1dCBpdCB3YXNuJ3QuIE9wZW4gYSBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UuPC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPnRlc3RjYXNlPC9CPiBhcyB0aGUgUm9vdCBFbGVtZW50LjwvTEk+Ci0gICAgPExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgcmVxdWlyZWQgY29udGVudCBvbmx5PC9CPi48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+dGVzdGNhc2UuZHRkPC9CPiBhcHBlYXJzIGFzIHRoZSBTeXN0ZW0gSWQuPC9MST4KLSAgICA8TEk+U2VsZWN0IEZpbmlzaC4gVmVyaWZ5IDxCPmZyb21Mb2NhbERURC54bWw8L0I+IGFwcGVhcnMgaW4gdGhlIFhNTCBFZGl0b3IuIFZlcmlmeSB0aGUgU291cmNlIHBhZ2UgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nOiA8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyOTAiIHNyYz0iaW1wb3J0RFRELmpwZyIgd2lkdGg9IjY2MCI+PC9MST4KLSAgPExJPlZlcmlmeSB0aGUgT3V0bGluZSB2aWV3IGFuZCB0aGUgZm9ybWF0dGluZyBpbmRlbnRhdGlvbiByZWZsZWN0IHRoZSBwcm9wZXIgZWxlbWVudC90YWcgaGllcmFyY2h5LiBIZXJlJ3Mgd2hhdCB0aGUgT3V0bGluZSB2aWV3IHNob3VsZCBsb29rIGxpa2U6PElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjk3IiBzcmM9Im91dGxpbmUxLmpwZyIgd2lkdGg9IjY1NSI+PC9MST4KLSAgPExJPlZlcmlmeSBzZWxlY3Rpb24gc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCAKLSAgICAgICAgYW5kIFByb3BlcnRpZXMgdmlldy4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY2xpY2sgd2l0aGluIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy4gCi0gICAgICAgICAgICBWZXJpZnkgPEI+aGVhZGVyPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IGFuZCBpbiB0aGUgRGVzaWduIAotICAgICAgICAgICAgcGFnZSBhbmQgdGhhdCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYW5kIHByb3BlcnR5IHZhbHVlcyBhcHBlYXIgaW4gdGhlIAotICAgICAgICAgICAgUHJvcGVydGllcyB2aWV3OgotICAgICAgICA8VEFCTEUgYm9yZGVyPSIxIj4KLSAgICAgICAgICAgIDxUQk9EWT4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj48Qj5Qcm9wZXJ0eTwvQj48L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij48Qj5WYWx1ZTwvQj48L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+Y2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij53ZWJ0b29sPC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPm51bWJlcjwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPmlkdmFsdWUwPC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN0YXRlPC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+Jm5ic3A7PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN1YkNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+QWNjZXNzYWJpbGl0eTwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdWJTdWJDYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPiZuYnNwOzwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgIDwvVEJPRFk+Ci0gICAgICAgIDwvVEFCTEU+Ci0gICAgICAgIDwvTEk+Ci0JPExJPkZyb20gdGhlIE91dGxpbmUgdmlldywgc2VsZWN0IHRoZSA8Qj50ZXN0QnVja2V0PC9CPiB0YWcuCi0gICAgICAgICAgICBWZXJpZnkgPEI+dGVzdEJ1Y2tldDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCB0aGUgY3VycmVudCBtYXJrZXIKLSAgICAgICAgICAgIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gb2YgdGhlIFNvdXJjZSBwYWdlIGluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIAotICAgICAgICAgICAgPEI+dGVzdEJ1Y2tldDwvQj4gdGFnLiBUaGUgUHJvcGVydGllcyB2aWV3IHNob3VsZCBzaG93IGEgcHJvcGVydHkgb2YgPEI+dHlwZTwvQj4KLSAgICAgICAgICAgIHdpdGggYSB2YWx1ZSBvZiA8Qj5Db21wb25lbnRUZXN0PC9CPi4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPiAgIAotICAgIDwvTEk+IAotICAgIDxMST5WZXJpZnkgZWRpdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBhbmQgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldyAoZm9jdXMgaGVyZSBpcyBvbiBhZGRpbmcgYXR0cmlidXRlcyBhbmQgYXR0cmlidXRlIHZhbHVlcykuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIHVzZSBjb250ZW50IGFzc2lzdCB0byBpbnNlcnQgYW4gYXR0cmlidXRlIGFuZCBhdHRyaWJ1dGUgdmFsdWUKLSAgICAgICAgICAgIGZvciB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciBhZnRlciB0aGUgPEI+Y2F0ZWdvcnk8L0I+IGF0dHJpYnV0ZSBpbiB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5UeXBlIDxCPnNwYWNlPC9CPiBhbmQgdGhlbiBoaXQgcHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSBvbmx5IDxCPnN0YXRlPC9CPiBhbmQgPEI+c3ViU3ViQ2F0ZWdvcnk8L0I+IGFwcGVhciBpbiB0aGUgcHJvcG9zYWwgbGlzdCAoY29udGVudCBhc3Npc3QgaXMgc21hcnQgZW5vdWdoIG5vdCB0byBsaXN0IGFueSBhdHRyaWJ1dGVzIHRoYXQgYWxyZWFkeSBleGlzdCBpbiB0aGUgc3RhcnQgdGFnIHNpbmNlIGF0dHJpYnV0ZXMgY2FuIG9ubHkgYXBwZWFyIG9uY2UuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPnN0YXRlPC9CPi48L0xJPiAgIAotICAgICAgICAgICAgPExJPlZlcmlmeSA8Qj5zdGF0ZT0iVW5kZXJDb25zdHJ1Y3Rpb24iPC9CPiBpcyBpbnNlcnRlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGNvbnRlbnQgYXNzaXN0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0cyBhbnkgZGVmYXVsdCB2YWx1ZXMuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLiBWZXJpZnkgdGhlIERlc2lnbiBwYWdlIGFuZCBQcm9wZXJ0aWVzIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS48L0xJPiAgICAgICAgIAotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIFByb3BlcnRpZXMgdmlldywgdXBkYXRlIHRoZSA8Qj5zdGF0ZTwvQj4gYXR0cmlidXRlIHZhbHVlIHRvICJVbmRlclJldmlldyIgCi0gICAgICAgICAgICAoYSBwdWxsZG93biBsaXN0IG9mIHZhbHVlcyBzaG91bGQgYmUgYXZhaWxhYmxlKS4gVmVyaWZ5IHRoZSBjaGFuZ2UgaXMgcmVmbGVjdGVkCi0gICAgICAgICAgICBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMuCi0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBEZXNpZ24gcGFnZSwgYWRkIGFuIGF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlIHZhbHVlIHRvIHRoZSA8Qj5oZWFkZXI8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5CcmluZyB1cCB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIDxCPmhlYWRlcjwvQj4gdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPkFkZCBBdHRyaWJ1dGUtPnN1YlN1YkNhdGVnb3J5PC9CPiBmcm9tIHRoZSBwb3B1cCBtZW51IChpdCdzIHNtYXJ0Ci0gICAgICAgICAgICAgICAgZW5vdWdoIHRvIGtub3cgd2hpY2ggYXR0cmlidXRlcyBoYXZlbid0IGJlZW4gc3BlY2lmaWVkIHlldCAuLi4gbGlrZSBjb250ZW50IAotICAgICAgICAgICAgICAgIGFzc2lzdC4gQ29vbCEpLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VHlwZSBpbiBhIHZhbHVlIG9mIDxCPktleWJvYXJkIHN1cHBvcnQ8L0I+LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2UgaXMgcmVmbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgUHJvcGVydGllcyB2aWV3PC9MST4KLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotPC9VTD4KLTxQPjxCPk9wZW4gYW4gWE1MIEZpbGUgdGhhdCByZWZlcmVuY2VzIGEgcmVtb3RlIERURDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPk9wZW4gdGhlIDxCPldpcmVsZXNzLnhtbDwvQj4gZmlsZS48L0xJPgotICAgIDxMST5WZXJpZnkgaXQgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGluIHRoZSBTb3VyY2UgcGFnZTo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyMzkiIHNyYz0id2lyZWxlc3MuanBnIiB3aWR0aD0iNjU2Ij48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIE91dGxpbmUgdmlldyBhbmQgdGhlIGZvcm1hdHRpbmcgaW5kZW50YXRpb24gcmVmbGVjdCB0aGUgcHJvcGVyIAotICAgICAgICBlbGVtZW50L3RhZyBoaWVyYXJjaHkuIEhlcmUncyB3aGF0IHRoZSBPdXRsaW5lIHZpZXcgc2hvdWxkIGxvb2sgbGlrZTogPElNRyBib3JkZXI9IjAiIGhlaWdodD0iMTg5IiBzcmM9Im91dGxpbmUyLmpwZyIgd2lkdGg9IjY1NiI+PC9MST4gCi0gICAgPExJPlZlcmlmeSBjb250ZW50IGFzc2lzdCA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+RGVmZWN0IDE3NjM3OSAoaW4gdmVyaWZ5IHN0YXRlLCBidXQgc3RpbGwgbm90IHdvcmtpbmcpPC9GT05UPi48L0xJPgotICAgICAgICA8VUw+Ci0gICAgICAgICAgIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgPEI+d21sPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Qgb24gdGhlIG5ldyBsaW5lLjwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXIgYXMgcHJvcG9zYWxzIChpbiB0aGUgb3JkZXIgc2hvd24pOiAKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+aGVhZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnRlbXBsYXRlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2FyZDwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgICAgICAgICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIDxCPndtbDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5UeXBlIGEgc3BhY2UgYmVmb3JlIHRoZSBlbmRpbmcgZGVsaW1pdGVyIG9uIHRoZSBjYXJkIHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdDwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyBhcHBlYXIgYXMgcHJvcG9zYWxzIChub3QgbmVjZXNzYXJpbHkgaW4gdGhlCi0gICAgICAgICAgICAgICBvcmRlciBzaG93bikuIAotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST50aXRsZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm5ld2NvbnRleHQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vcmRlcmVkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+eG1sOmxhbmc8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vbmVudGVyYmFja3dhcmQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5vbnRpbWVyPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+aWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jbGFzczwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciB3aXRoaW4gdGhlIDxCPm1ldGhvZDwvQj4gYXR0cmlidXRlIHZhbHVlIGluIHRoZSA8Qj5nbzwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0PC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSA8Qj5wb3N0PC9CPiBhbmQgPEI+Z2V0PC9CPiBhcHBlYXIgYXMgcHJvcG9zYWxzLjwvTEk+Ci0gICAgICAgIDwvVUw+Ci0gICAgPExJPlZlcmlmeSBzZWxlY3Rpb24gc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCAKLSAgICAgICAgYW5kIFByb3BlcnRpZXMgdmlldy4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY2xpY2sgd2l0aGluIHRoZSA8Qj5jYXJkPC9CPiBzdGFydCB0YWcuIAotICAgICAgICAgICAgVmVyaWZ5IDxCPmNhcmQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgYW5kIGluIHRoZSBEZXNpZ24gCi0gICAgICAgICAgICBwYWdlIGFuZCB0aGF0IHRoZSBjb250ZW50IGFzc2lzdCBwcm9wb3NhbHMgbGlzdGVkIGFib3ZlIGZvciB0aGUKLSAgICAgICAgICAgIDxCPmNhcmQ8L0I+IHRhZyBhcHBlYXIgYXMgcHJvcGVydGllcyBpbiB0aGUgUHJvcGVydGllcyB2aWV3LiBObyB2YWx1ZXMgc2hvdWxkIGFwcGVhciBmb3IgdGhlc2UgcHJvcGVydGllcy48L0xJPgotCTxMST5Gcm9tIHRoZSBPdXRsaW5lIHZpZXcsIHNlbGVjdCB0aGUgPEI+cG9zdGZpZWxkPC9CPiB0YWcuCi0gICAgICAgICAgICBWZXJpZnkgPEI+cG9zdGZpZWxkPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIHRoZSBjdXJyZW50IG1hcmtlcgotICAgICAgICAgICAgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBvZiB0aGUgU291cmNlIHBhZ2UgaW5kaWNhdGVzIHRoZSByYW5nZSBvZiB0aGUgCi0gICAgICAgICAgICA8Qj5wb3N0ZmllbGQ8L0I+IHRhZy4gVGhlIFByb3BlcnRpZXMgdmlldyBzaG91bGQgc2hvdyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMsCi0gICAgICAgICAgICBub25lIG9mIHdoaWNoIHNob3VsZCBoYXZlIGEgdmFsdWU6Ci0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPm5hbWU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST52YWx1ZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmlkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2xhc3M8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICA8L1VMPiAgIAotICAgIDwvTEk+Ci0gICAgPExJPlZlcmlmeSBlZGl0IHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcgKGZvY3VzIGhlcmUgaXMgb24gYWRkaW5nIGVsZW1lbnRzL3RhZ3MpLgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjb3B5IGFuZCBwYXN0ZSB0aGUgPEI+Y2FyZDwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3IgaW4gdGhlIDxCPmNhcmQ8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPk5vdGljZSB0aGUgcmFuZ2Ugb2YgdGhlIDxCPmNhcmQ8L0I+IHRhZyBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIGFyZWEuPC9MST4KLSAgICAgICAgICAgIDxMST5Db3B5IHRoaXMgcmFuZ2Ugb2YgbGluZXMgdXNpbmcgdGhlIDxCPkVkaXQtPkNvcHk8L0I+IHB1bGxkb3duIG1lbnUgc2VsZWN0aW9uLjwvTEk+Ci0gICAgICAgICAgICA8TEk+UGFzdGUgYWZ0ZXIgdGhlIDxCPmNhcmQ8L0I+IGVuZCB0YWcgdXNpbmcgQ3RybCtWLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBhcHByb3ByaWF0ZSBsaW5lcyB3ZXJlIHBhc3RlZCBuIHRoZSBTb3VyY2UgcGFnZS4KLSAgICAgICAgICAgICAgICBWZXJpZnkgdGhlIERlc2lnbiBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCB0aGUgUHJvcGVydGllcyAKLSAgICAgICAgICAgICAgICB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuPC9MST4gICAgICAgICAKLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBEZXNpZ24gcGFnZSwgYWRkIGFub3RoZXIgPEI+Y2FyZDwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPkJyaW5nIHVwIHRoZSBwb3B1cCBtZW51IGZvciB0aGUgPEI+d21sPC9CPiB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+QWRkIENoaWxkLT5jYXJkPC9CPiBmcm9tIHRoZSBwb3B1cCBtZW51LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgdGhlIFByb3BlcnRpZXMKLSAgICAgICAgICAgICAgICB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuIE5PVEU6IGl0IHNob3VsZCBoYXZlIGdlbmVyYXRlZCBvdXQKLSAgICAgICAgICAgICAgICB0aGUgc2FtZSB0aGluZyBhcyB0aGUgb3JpZ2luYWwgY2FyZCB0YWcsIHdpdGggdGhlIGV4Y2VwdGlvbgotICAgICAgICAgICAgICAgIHRoYXQgYSA8Qj5tZXRob2Q8L0I+IGF0dHJpYnV0ZSBzaG91bGQgbm90IGV4aXN0IGluIHRoZSA8Qj5nbzwvQj4gc3RhcnQgdGFnLiA8L0xJPgotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+IAotPC9VTD4KLTxQPjxCPkNyZWF0ZSBhbmQgVmFsaWRhdGUgYW4gWE1MIEZpbGUgZnJvbSBhIHNjaGVtYTwvQj48QlI+Ci0KLTxQPih0aGVzZSBzdGVwcyBhcmUgdGFrZW4gZnJvbSB0aGUgJ0Rlc2lnbicgc21va2UgdGVzdCwgZXhjZXB0IHRoZSBTb3VyY2UgUGFnZSBpcyB0aGUgZm9jdXMpPC9QPgotPHVsPgotPGxpPgotUmlnaHQgbW91c2UgYnV0dG9uIDIgb24gdGhlIFB1cmNoYXNlT3JkZXIueHNkIGFuZCBzZWxlY3QgPGI+Q3JlYXRlIFhNTAotRmlsZTwvYj4uPC9saT4KLQotPGxpPgotQWNjZXB0IHRoZSBkZWZhdWx0IGZpbGUgbmFtZXMuPC9saT4KLQotPGxpPgotSW4gdGhlIFNlbGVjdCBSb290IEVsZW1lbnQgcGFnZSwgY2hvb3NlIDxiPnB1cmNoYXNlT3JkZXI8L2I+IGFzIHJvb3QgZWxlbWVudC48L2xpPgotCi08bGk+Ci1DaG9vc2UgPGI+Q3JlYXRlIHJlcXVpcmVkIGFuZCBvcHRpb25hbCBjb250ZW50PC9iPiB0byBjcmVhdGUgYSBtaW5pbWFsCi1kb2N1bWVudC48L2xpPgotCi08bGk+Ci1FbnRlciA8Yj5wbzwvYj4gYXMgdGhlIG5hbWVzcGFjZSBwcmVmaXguPC9saT4KLQotPGxpPk9uIEZpbmlzaCwgYSBQdXJjaGFzZU9yZGVyLnhtbCBpcyBjcmVhdGVkIGFuZCB0aGUgWE1MIEVkaXRvciBpcyBvcGVuZWQuIChTZWxlY3QgU291cmNlIFBhZ2UgaWYgbm90IGFscmVhZHkgdGhlcmUuKTwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIHNob3VsZCBiZSBpbnZhbGlkLjwvbGk+Ci0KLTxsaT4KLURvdWJsZSBjbGljayBvbiB0aGUgZXJyb3IgbWVzc2FnZS4gSXQgc2hvdWxkIGJlIHBvc2l0aW9uZWQgdG8gdGhlIGxpbmUKLWluIGVycm9yLCBpLmUuIHRoZSA8Yj5wYXJ0TnVtPC9iPiBhdHRyaWJ1dGUuIEl0IGlzIGludmFsaWQgYmVjYXVzZSB0aGUKLXZhbHVlIGlzIG5vdCBzZXQgdG8gbWF0Y2ggdGhlIFhNTCBzY2hlbWEgcGF0dGVybiBmYWNldCAiZDMtW0EtWl17Mn0iICgzCi1kaWdpdHMgZm9sbG93ZWQgYnkgMiBjaGFyYWN0ZXJzKS48L2xpPgotCi08bGk+SW4gdGhlIFNvdXJjZSBWaWV3LCBsb2NhdGUgdGhlIDxiPnBhcnROdW08L2I+IGF0dHJpYnV0ZSB1bmRlciBlbGVtZW50IGl0ZW0uCi1FbnRlciB0aGUgdmFsdWUgMzMzLUFCLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIGRvY3VtZW50IHNob3VsZCBub3cgYmUgdmFsaWQuPC9saT4KLTwvVUw+Ci08VUw+Ci0gIDxMST4KLSAgPEhSPjwvTEk+Ci0gIDxsaT5QbGFjZSB0aGUgY3Vyc29yIGFmdGVyIHRoZSAmbHQ7aXRlbXMmZ3Q7IHRhZyBhbmQgYmVzdXJlICJpdGVtIiBpcyAKLSAgbGlzdGVkIGluIHRoZSBjb250ZW50IGFzc2lzdCBsaXN0LiA8L2xpPgotPGxpPlJlbmFtZSB0aGUgcHVyY2hhc2VPcmRlci54c2QgdG8sIHNheSwgcHVyY2hhc2VPcmRlckhPTEQueHNkPC9saT4KLTxsaT5WZXJpZnkgdGhhdCBjb250ZW50IGFzc2lzdCBzdGlsbCBnaXZlcyB5b3UgIml0ZW0iIGFzIGFib3ZlLjwvbGk+Ci08bGk+Tm93IHNlbGVjdCB0aGUgIlJlbG9hZCBEZXBlbmRhbmNpZXMiIGJ1dHRvbi48L2xpPgotPGxpPlZlcmlmeSB0aGF0IG5vdyBjb250ZW50IGFzc2lzdCBubyBsb25nZXIgbGlzdHMgYW55IGl0ZW1zIG90aGVyIAotdGhhdCB0aGUgbWFjcm8gImNvbW1lbnQiLjwvbGk+Ci08bGk+UmVwZWF0IG1ha2luZyBwdXJjaGFzZU9yZGVyLnhzZCB3b3JrYWJsZSBhZ2Fpbi48L2xpPgotPC91bD4KLTxQPjwvUD48UD48L1A+PFA+PC9QPjxQPjwvUD48UD48L1A+PC9QPgotPFA+PEI+T3BlbiBhbiBYTUwgRmlsZSBmb3IgYSBzaGlwcGVkIERURCBjYXRhbG9nIGVudHJ5PC9CPjxCUj4KLTxCUj4KLVtwdXQgaW4gb3B0aW9uYWwgc2VjdGlvbiAuLiB0aGlzIGlzbid0IGEgY3VzdG9tZXIgc2NlbmVyaW9dPEJSPgotVG8gdmVyaWZ5IHRoYXQgc2hpcHBlZCBEVERzIGFyZSB3b3JraW5nOjxCUj4KLTxVTD4KLTxMST4KLVVzZSBhIHdlYiBwcm9qZWN0IHdpdGggYSBzdGFuZGFyZCB3ZWIueG1sIGZpbGUgaW4gaXQuIEJlIHN1cmUgCi10aGVyZSBpcyBubyB3ZWItYXBwXzJfMi5kdGQgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LiBJbiB0aGUgd2ViLnhtbCBmaWxlIAotaXRzZWxmLCBtYW5nbGUgdGhlIHdlYi1hcHBfMl8yLmR0ZCBmaWxlbmFtZSBpbiB0aGUgc3lzdGVtIGlkIGEgbGl0dGxlLCBzdWNoIGFzIAotY2hhbmdlIGl0IHRvIHhlYi1hcHBfMl8yLmR0ZCB0byBiZSBzdXJlIGl0IGNhbid0IGJlIGZvdW5kIHZpYSB0aGUKLW5vcm1hbCBodHRwIG1ldGhvZCAoVGhpcyBpc24ndCByZWFsbHkgbmVjZXNzYXJ5IGZvciB0aGUgZnVudGlvbiB0byB3b3JrLAotaXRzIGp1c3QgdG8gYmUgc3VyZSBvbmx5IHRoZSBjYXRhbG9nIGZ1bmN0aW9uIGlzIGluIGVmZmVjdCkuCi08L0xJPgotPExJPgotR28gdG8gdGhlIHByZWZlcmVuY2VzIHBhZ2UsIGFuZCBvcGVuIHRoZSBYTUwgQ2F0YWxvZy4gVmVyaWZ5IHRoZXJlIAotaXMgYW4gZW50cnkgZm9yIC0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBXZWIgQXBwbGljYXRpb24gMi4yLy9FTi4KLTwvTEk+Ci08TEk+Ci1PbmNlIGFsbCB0aGUgcHJlcCB3b3JrIGlzIGRvbmUgKGZpbGVzIGRlbGV0ZWQsIHRleHQgbW9kaWZpZWQpLCB5b3Ugc2hvdWxkIAotZXhpdCBhbmQgcmVzdGFydCBFY2xpcHNlIHRvIGJlIHN1cmUgeW91IGhhdmUgYSBmcmVzaCBzdGFydC4KLTwvTEk+Ci08TEk+Ci1PcGVuIHRoZSB3ZWIueG1sIGZpbGUgYW5kIGJlIHN1cmUgdGhhdCBjb250ZW50IGFzc2lzdCB3b3JrcyBmb3IgdGhhdCBmaWxlLgotRm9yIGV4YW1wbGUsIHJpZ2h0IGFmdGVyIHRoZSBlbmQgb2YgdGhlICZsdDsvZGlzcGxheS1uYW1lJmd0OyB0YWcsIGN0cmwtc3BhY2UgCi1zaG91bGQgcHJvdmlkZSBhIGxvbmcgbGlzdCBvZiBlbGVtZW50cywgc3RhcnRpbmcgd2l0aCBzZXJ2bGV0LCBzZXJ2bGV0LW1hcHBpbmcsIGV0Yy4KLVRoaXMgaW5kaWNhdGVzIHRoZSBzaGlwcGVkIERURCBmdW5jdGlvbiBpcyB3b3JraW5nIGFuZCBjb25maWd1cmVkIAotY29ycmVjdGx5IChhdCBsZWFzdCBmb3IgdGhlIHdlYi54bWwgZmlsZSkuCi08L0xJPgotPC9VTD4KLTwvUD4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIGEgbmV3IERURCBjYXRhbG9nIGVudHJ5PC9CPjxCUj48SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci0KLTxiPlRoZSBmb2xsb3dpbmcgY29tZXMgZGlyZWN0bHkgZnJvbSB0aGUgJ0Rlc2lnbicgU21va2UgVGVzdDogWE1MIENhdGFsb2cgZm9yIFhNTCBTY2hlbWE8L2I+Ci08dWw+Ci08bGk+Ci1SdW4gVmFsaWRhdGUgb24gUHVyY2hhc2VPcmRlci54bWwgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkPC9saT4KLQotPGxpPgotQ3JlYXRlIGEgbmV3IHByb2plY3QsIFhNTFRlc3QyPC9saT4KLQotPGxpPgotTW92ZSB0aGUgUHVyY2hhc2VPcmRlci54c2QgaW50byBYTUxUZXN0Mi48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUgb24gUHVyY2hhc2VPcmRlci54bWwuIFlvdSB3aWxsIG5vdGljZSB0aGF0IGl0IGlzIG5vIGxvbmdlcgotdmFsaWQuIFRoZSBlcnJvciBtZXNzYWdlIHNob3VsZCBnaXZlIHlvdSBhIGhpbnQgdGhhdCB0aGUgZmlsZSBQdXJjaGFzZU9yZGVyLnhzZAotY2FuIG5vIGxvbmdlciBiZSBmb3VuZC48L2xpPgotCi08bGk+Ci1PcGVuIHRoZSBXaW5kb3ctPlByZWZlcmVuY2VzIGFuZCBzZWxlY3QgdGhlIFhNTCBDYXRhbG9nLjwvbGk+Ci0KLTxsaT4KLUVudGVyIHRoZSBwYWlyIDxiPklkID0gUHVyY2hhc2VPcmRlci54c2QgVXJpID0gZjpcZWNsaXBzZVxYTUxUZXN0MlxQdXJjaGFzZU9yZGVyLnhzZDwvYj48L2xpPgotCi08YnI+T3IgYWx0ZXJuYXRpdmVseSwgeW91IGNhbiB1c2UgYSByZWxhdGl2ZSBwYXRoIHRvIHRoZSBpbnN0YWxsIGRpcmVjdG9yeQotb2YgdGhlIHdvcmtiZW5jaCBhcyBmb2xsb3dzOgotPGJyPjxiPklkID0gUHVyY2hhc2VPcmRlci54c2QgVXJpID0gLlxYTUxUZXN0MlxQdXJjaGFzZU9yZGVyLnhzZDwvYj4KLTxsaT4KLUNsaWNrIG9uIHRoZSBSZWxvYWQgYnV0dG9uIHRvIHJlbG9hZCB0aGUgY2F0YWxvZyBzZXR0aW5ncy48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBkb2N1bWVudCBzaG91bGQgbm93IGJlIHZhbGlkLjwvbGk+Ci08L3VsPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgIFNhdmUvVmFsaWRhdGUgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNhdmUvVmFsaWRhdGUgdGVzdCBjYXNlczwvRk9OVD48L0gyPgotPFA+PEI+U2F2aW5nIGFuIFhNTCBGaWxlPC9CPjxCUj4KLShOT1RFOiB0aGUgPEI+SWRlbnRpZnkgYSBsb2NhbCBEVEQ8L0I+IHRlc3QgY2FzZSB0ZXN0cyB0aGUgc2F2ZSBwcm9tcHQgb24gYSBmaWxlIGNsb3NlLik8L1A+Ci08VUw+Ci0gIDxMST5JZiBhbnkgZmlsZXMgYXJlIG9wZW4sIHNlbGVjdCA8Qj5GaWxlLSZndDtDbG9zZSBBbGw8L0I+IChvciA8Qj5DdHJsK1NoaWZ0K0Y0PC9CPikgdG8gY2xvc2UgdGhlbS48L0xJPgotICA8TEk+T3BlbiBhbnkgeG1sIGZpbGUgaW4gdGhlIDxCPlhNTFRlc3QyPC9CPiBwcm9qZWN0LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyAobm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbik6Ci0gIDxVTD4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZTwvQj4gaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBbGw8L0I+IGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQXM8L0I+IGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmU8L0I+IHRvb2xiYXIgYnV0dG9uIChhIGRpc2tldHRlKSBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZSBBczwvQj4gdG9vbGJhciBidXR0b24gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5TYXZlPC9CPiBpcyBkaXNhYmxlZCBvbiB0aGUgU291cmNlIHBvcHVwIG1lbnUuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Xb3VsZCBiZSBuaWNlIGlmIHRoZSBEZXNpZ24gcG9wdXAgbWVudSBhbHNvIGhhZCBhIFNhdmUgc2VsZWN0aW9uLiBPcGVuIGEgc3VnZ2VzdGlvbiBkZWZlY3QuPC9GT05UPjwvTEk+Ci0gICAgPExJPm5vIDxCPio8L0I+IGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGZvbGxvd2luZyAoY2hhbmdlcy1tYWRlIGNvbmRpdGlvbik6Ci0gIDxVTD4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZTwvQj4gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFsbDwvQj4gaXMgZW5hYmxlZDwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlPC9CPiB0b29sYmFyIGJ1dHRvbiAoYSBkaXNrZXR0ZSkgaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST48Qj5TYXZlPC9CPiBpcyBlbmFibGVkIG9uIHRoZSBTb3VyY2UgcG9wdXAgbWVudS48L0xJPgotICAgIDxMST5hIDxCPio8L0I+IGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkhpdCA8Qj5DdHJsK1M8L0I+LiA8L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2UuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPkZpbGUtJmd0O1NhdmUgQWxsPEI+PC9CPi48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgUHJvcGVydGllcyB2aWV3LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+U2F2ZTwvQj4gZnJvbSB0aGUgU291cmNlIHBvcHVwIG1lbnUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPkNsb3NlIGFuZCB0aGVuIHJlb3BlbiB0aGUgZmlsZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzIHRoYXQgd2VyZSBtYWRlIGluIHRoZSBwcmV2aW91cyBzdGVwcyBhcHBlYXIgaW4gdGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2VzLjwvTEk+Ci08L1VMPgotPFA+PEI+U2F2aW5nIGFuIFhNTCBGaWxlIGFjcm9zcyBtdWx0aXBsZSBwZXJzcGVjdGl2ZXMgKG9wdGlvbmFsKTwvQj48L1A+Ci08VUw+Ci0gIDxMST5PcGVuIGFueSB4bWwgZmlsZSBpbiB0aGUgPEI+WE1MVGVzdDI8L0I+IHByb2plY3QuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgdG8gdGhlIGZpbGUuPC9MST4KLSAgPExJPk9wZW4gYW5vdGhlciBYTUwgUGVyc3BlY3RpdmUgYnk6Ci0gIDxVTD4KLSAgICA8TEk+PEI+c2VsZWN0aW5nIFBlcnNwZWN0aXZlLSZndDtPcGVuLSZndDtPdGhlci4uLjwvQj48L0xJPgotICAgIDxMST53aGlsZSBob2xkaW5nIGRvd24gdGhlIDxCPlNoaWZ0PC9CPiBrZXksIHNlbGVjdCA8Qj5YTUw8L0I+LjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlZlcmlmeSBhbm90aGVyIFhNTCBQZXJzcGVjdGl2ZSBidXR0b24gYXBwZWFycyBpbiB0aGUgbGVmdGhhbmQgc2lkZSBvZiB0aGUgV29ya2JlbmNoIHRvIHJlcHJlc2VudCB0aGlzIHNlY29uZCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+T3BlbiB0aGUgc2FtZSB4bWwgZmlsZSBhcyBpbiB0aGUgZmlyc3Qgc3RlcCBhYm92ZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseSBpbiBib3RoIFhNTCBQZXJzcGVjdGl2ZXMgYW5kIHZlcmlmeSB0aGF0IHRoZSBjaGFuZ2VzIG1hZGUgdG8gdGhlIGZpbGUgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlIGFwcGVhciBpbiB0aGUgc2FtZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGUgKiBuZXZlciBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYiBvZiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlIGV2ZW4gd2hlbiBtYWtlIGNoYW5nZXMgdG8gdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS4gVGFsayB0byBEYXZpZC48L0ZPTlQ+PC9MST4KLSAgPExJPk1ha2Ugc29tZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGVzZSBjaGFuZ2VzIGFwcGVhciBpbiB0aGUgc2FtZSBmaWxlIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+Q2xvc2UgdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZSBhbmQgcmVzcG9uZCA8Qj5ZZXM8L0I+IHRvIHRoZSBzYXZlIGNoYW5nZXMgcHJvbXB0LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb24gYXBwbGllcyBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUuPC9MST4KLTwvVUw+Ci08UD48Qj5WYWxpZGF0aW5nIGEgbm9uIHdlbGwgZm9ybWVkIFhNTCBGaWxlIChubyBEVEQvU2NoZW1hKTwvQj48QlI+Ci0oTk9URTogaXQncyBpbXBvcnRhbnQgdGhhdCB0aGUgZm9sbG93aW5nIGJlIHR5cGVkIGluLiBUaGlzIHRlc3QgY2FzZSB0cmllcyB0byBjb3ZlciBzb21lIG9mIHRoZSBtb3JlIGNvbW1vbiBlcnJvcnMgdGhhdCByZW5kZXIgYW4gWE1MIGZpbGUgYXMgbm90IGJlaW5nIHdlbGwtZm9ybWVkLiBJdCBpcyBub3QgaW50ZW5kZWQgdG8gdmVyaWZ5IHRoYXQgYWxsIHBvc3NpYmxlIGVycm9ycyBhcmUgYmVpbmcgZGV0ZWN0ZWQgYW5kIGdyYWNlZnVsbHkgaGFuZGxlZC4gKTwvUD4KLTxVTD4KLSAgPExJPlNlbGVjdCB0aGUgPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPjxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPjwvTEk+Ci0gIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+Tm9uV2VsbEZvcm1lZDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0Oy48L0I+PC9MST4KLSAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSBYTUwgZGVjbGFyYXRpb24uPC9MST4KLSAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgPExJPlNlbGVjdCBjb21tZW50LjwvTEk+Ci0gIDxMST5FbWJlZCBtb3JlIHRoYW4gMiBjb25zZWN1dGl2ZSBkYXNoZXMgaW4gdGhlIGNvbW1lbnQuIAotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IG1vcmUgdGhhbiAyIGNvbnNlY3V0aXZlIGRhc2hlcyBjYW4gbm90IGJlIGVtYmVkZGVkIHdpdGhpbiBhIGNvbW1lbnQpPC9GT05UPjwvTEk+Ci0gIDxMST5UeXBlIGluIHRoZSByZW1haW5pbmcgbGluZXMgYXMgc2hvd24gYmVsb3c6IAotICAgICAgICA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+KEkgY2FuJ3Qgc2hvdyB0aGUgbGluZXMgdW50aWwgZGVmZWN0IDE3Nzc1NSBpcyBmaXhlZCAuLi4gdW50aWwgdGhlbiwgaGVyZSdzIHRoZSB0eXBlIG9mIHRoaW5ncyB0aGF0IGNhdXNlIAotICAgICAgICBhIGRvY3VtZW50IHRvIG5vdCBiZSB3ZWxsLWZvcm1lZCk6PC9GT05UPgotICA8VUw+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IGFuZCBlbmQgdGFnIHRoYXQgZG9uJ3QgbWF0Y2ggaW4gdGhlaXIgY2FzZSBzZW5zaXRpdml0eSAKLSAgICAgICAgKGUuZy4sICZsdDt0YWcmZ3Q7IGFuZCAmbHQ7L1RhZyZndDspLiA8L0xJPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCBhbmQgZW5kIHRhZyB3aGVyZSB0aGUgc3RhcnQgdGFnIGNvbnRhaW5zIGFuIGF0dHJpYnV0ZSB2YWx1ZSB0aGF0IGlzIG5vdCAKLSAgICAgICAgZW5jbG9zZWQgaW4gcXVvdGVzLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IHRoaXMgaXMgcGVybWl0dGVkIGluIEhUTUwsIGJ1dCBub3QgWE1MKTwvRk9OVD48L0xJPgotICAgIDxMST5jcmVhdGUgdGFncyB0aGF0IGFyZSBub3QgcHJvcGVybHkgbmVzdGVkLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IGEgY2hpbGQgdGFnIG11c3QgYmUgY29tcGxldGVkIGJlZm9yZSBpdHMgcGFyZW50IHRhZyk8L0ZPTlQ+PC9MST4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgdGFnIHdpdGhvdXQgYSBjb3JyZXNvbmRpbmcgZW5kIHRhZy4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBhbGwgc3RhcnQgdGFncyBtdXN0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGVuZCB0YWcgdW5sZXNzIHRoZSAKLSAgICAgICAgdGFnIGlzIGFuIGVtcHR5IHRhZywgaW4gd2hpY2ggY2FzZSB0aGUgc2hvcnRoYW5kIHZlcnNpb24gY2FuIGJlIHVzZWQgKCZsdDtzaG9ydFRhZy8mZ3Q7KSkuPC9GT05UPjwvTEk+Ci0gICAgPExJPmRvIG5vdCBwcm92aWRlIGFuIGF0dHJpYnV0ZSB2YWx1ZSAoPSZxdW90O3ZhbHVlJnF1b3Q7KS4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiB0aGlzIGlzIHBlcm1pdHRlZCBpbiBIVE1MIGZvciB0aG9zZSBhdHRyaWJ1dGVzIHRoYXQgaGF2ZSAKLSAgICAgICAgb25seSBvbmUgdmFsdWUsIGJ1dCBpdCdzIG5vdCB2YWxpZCBpbiBYTUwpPC9GT05UPjwvTEk+Ci0gICAgIDxMST5kZWZpbmUgYW4gYXR0cmlidXRlIG1vcmUgdGhhbiBvbmNlIGluIGEgc3RhcnQgdGFnLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLSAgPExJPlZlcmlmeSBlcnJvcnMgYXJlIGxpc3RlZCBpbiB0aGUgVGFza3MgdmlldyBmb3IgdGhlIGFib3ZlIHZpb2xhdGlvbnMgYW5kIHRoYXQgZXJyb3IgbWFya2VycyBhcHBlYXIgb24gdGhlIGFwcHJvcHJpYXRlIAotICAgICAgICAgbGluZXMgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SSdtIG5vdCBzdXJlIGhvdyB0aGUgRGVzaWduIHBhZ2UgaGFuZGxlcyBhbnkgb2YgdGhlc2UgdmlvbGF0aW9ucyAKLSAgICAgICAgIGFuZCB3aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYW5kIERhdmlkLjwvRk9OVD48L0xJPgotICA8TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgc2F2ZWQuPC9MST4KLTwvVUw+Ci0KLQotPFA+PEI+VmFsaWRhdGUgYW4gWE1MIEZpbGUgYmFzZWQgb24gYSBEVEQ8L0I+PC9QPgotPFVMPgotPExJPk9wZW4gPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPi48L0xJPgotPExJPkRlbGV0ZSBhIGNoYXJhY3RlciBmcm9tIG9uZSBvZiB0aGUgc3RhcnQgdGFncyAobWlzdHlwaW5nIGEgdGFnIGlzIG5vdCB1bmNvbW1vbikuPC9MST4KLTxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0IHdpdGhpbiB0aGUgYmFkIHRhZy4gVmVyaWZ5IGEgbWVzc2FnZSBhcHBlYXJzIGluIHRoZSBzdGF0dXMgYXJlYQotb2YgdGhlIFdvcmtiZW5jaCBpbmRpY2F0aW5nIHRoYXQgdGhlIGJhZCB0YWcgaXMgYW4gdW5rbm93biB0YWcuPC9MST4KLTxMST5TZWxlY3QgdGhlIDxCPlZhbGlkYXRlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPgotPExJPlZlcmlmeSBhbiBlcnJvciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3IGFuZCBhbiBlcnJvciBtYXJrZXIgYXBwZWFycyBpbiB0aGUgU291cmNlIHBhZ2UKLXRvIGZsYWcgdGhlIGludmFsaWQgdGFnLjwvTEk+Ci08TEk+U2VsZWN0IDxCPkVkaXQtPlVuZG88L0I+IGZyb20gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci08TEk+VmVyaWZ5IHRoZSBiYWQgdGFnIGVycm9yIG5vIGxvbmdlciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3LjwvTEk+Ci08TEk+UmVtb3ZlIHRoZSA8Qj5IZWFkZXI8L0I+IGVuZCB0YWcgZnJvbSB0aGUgU291cmNlIHBhZ2UuPC9MST4KLTxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci08TEk+VmVyaWZ5IGFuIGVycm9yIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcgaW5kaWNhdGluZyB0aGF0IHRoZSA8Qj5IZWFkZXI8L0I+IGVuZCB0YWcgaXMgbWlzc2luZzwvTEk+Ci08TEk+Q2xvc2UgdGhlIGZpbGUsIHJlc3BvbmRpbmcgPEI+WWVzPC9CPiB0byB0aGUgc2F2ZSBjaGFuZ2VzIHByb21wdC48L0xJPgotPExJPkRvdWJsZS1jbGljayBvbiB0aGUgZXJyb3IgaW4gdGhlIFRhc2tzIHZpZXcsIGFuZCB2ZXJpZnkgPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPiBvcGVucyB0byB0aGUKLWFwcHJvcHJpYXRlIGxpbmUgaW4gdGhlIFNvdXJjZSBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci08TEk+SGVyZSdzIHNvbWUgb3RoZXIgdmlvbGF0aW9ucyB0aGF0IGNhbiBiZSBhdHRlbXB0ZWQ6Ci08VUw+Ci08TEk+U3BlY2lmeSBhIGJhZCBhdHRyaWJ1dGUuPC9MST4KLTxMST5TcGVjaWZ5IGEgYmFkIGF0dHJpYnV0ZSB2YWx1ZS48L0xJPgotPExJPlNwZWNpZnkgY2hpbGQgdGFncyBvdXQgb2Ygc2VxdWVuY2luZyBvcmRlcjwvTEk+Ci08TEk+VmlvbGF0ZSB0aGUgb2NjdXJyZW5jZSBpbmRpY2F0b3IgZm9yIGEgdGFnIChlLmcuLCBpZiB0aGUgRFREIHNob3dzID8sIHRoZW4gb25seQotMCBvciAxIG9jY3VycmVuY2VzIG9mIHRoZSB0YWcgaXMgcGVybWl0dGVkKS4KLTwvVUw+PC9MST4KLTxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci08TEk+VmVyaWZ5IGVycm9ycyBhcmUgbGlzdGVkIGluIHRoZSBUYXNrcyB2aWV3IGZvciB0aGUgYWJvdmUgdmlvbGF0aW9ucyBhbmQgdGhhdCBlcnJvciBtYXJrZXJzIGFwcGVhciBvbiB0aGUgYXBwcm9wcmlhdGUgCi1saW5lcyBpbiB0aGUgU291cmNlIHBhZ2UuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JJ20gbm90IHN1cmUgaG93IHRoZSBEZXNpZ24gcGFnZSBoYW5kbGVzIGFueSBvZiB0aGVzZSB2aW9sYXRpb25zIAotYW5kIHdoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlldy4gVGFsayB0byBDcmFpZyBhbmQgRGF2aWQuPC9GT05UPjwvTEk+Ci08TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgZXZlcnl0aGluZyB3YXMgc2F2ZWQuPC9MST4KLTwvVUw+Ci0KLTwhLS0gIHJlbW92ZWQgc2luY2UgZG9uZSBlbHNld2hlcmUgYXMgcGFydCBvZiBvdGhlciBzY2VuZXJpb3MKLTxQPjxCPlZhbGlkYXRlIGFuIFhNTCBGaWxlIGJhc2VkIG9uIGEgU2NoZW1hPC9CPjxCUj4KLS0tPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgU3BlY2lmaWMgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlNvdXJjZSBTcGVjaWZpYyB0ZXN0IGNhc2VzIChvcHRpb25hbCk8L0ZPTlQ+PC9CPjwvSDI+Ci08UD48Qj5Vc2luZyB0aGUgQXV0byBDb21wbGV0aW9uIENvbnRlbnQgQXNzaXN0IFByZWZlcmVuY2U8L0I+PEJSPgotPFVMPgotPExJPk9wZW4gYSBhbnkgWE1MIGZpbGUgdGhhdCBoYXMgZW5vdWdoIHRhZ3MgdG8gcHJvdmlkZSBzeW50YXggaGlnaHRsaWdodGluZy48L0xJPgotPExJPldoaWxlIHRoYXQgZmlsZSBpcyBsZWZ0IG9wZW4sIGdvIHRvIHRoZSBQcmVmZXJlbmNlcyBwYWdlLCBzZWxlY3QKLVhNTCBFZGl0b3IsIHRoZW4gU291cmNlIFN0eWxlcy4gPC9MST4KLTxMST5PbiB0aGF0IHBhZ2UsIHVzZSB0aGUgbW91c2UgdG8gInNlbGVjdCIgYSB0YWcgbmFtZS4gVGhlIHRhZyBuYW1lIGlzIG5vdCBsaXRlcmFsbHkKLXNlbGVjdGVkLCBidXQgd2hlbiB5b3UgY2xpY2sgb24gYW4gZWxlbWVudCBpbiB0aGUgZXhhbXBsZSB0ZXh0LCB0aGUgbGlzdAotYWJvdmUgaXQgd2lsbCBkaXNwbGF5IHRoZSB0eXBlIG9mIGVsZW1lbnQgaXQgaXMsIGFuZCB3aGF0IGl0cyBjdXJyZW50IGNvbG9ycyBhcmUuPC9MST4KLTxMST5Gb3IgInRhZyBuYW1lIiwgc2VsZWN0IHRoZSBib2xkIGNoZWNrIGJveC4gVGhlbiBwcmVzcyBBcHBseSwgYW5kIHlvdSBzaG91bGQKLXNlZSB0aGUgY2hhbmdlIHRha2UgZWZmZWN0IGluIHlvdXIgYWN0aXZlIGVkaXRvci48L0xJPgotPExJPlNlbGVjdCAiRGVmYXVsdHMiIGFuZCBtYWtlIHN1cmUgdGhlIHRhZyBuYW1lcyBhcmUgc2V0IGJhY2sgdG8gbm90IGJvbGQuPC9MST4KLTwvVUw+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci08UD48Qj5Eb3VibGUtQ2xpY2tpbmcgV2l0aGluIHRoZSBTb3VyY2U8L0I+IDxCUj4KLShOT1RFOiBpZiB5b3UgY29udGludWUgdG8gZG91YmxlLWNsaWNrIGF0IGEgZ2l2ZW4gY3Vyc29yIHBvc2l0aW9uLCB0aGUgc2VsZWN0aW9uIGFyZWEgd2lsbCBjb250aW51ZSB0byBleHBhbmQuIFdoZW4gdGhlIG1heGltdW0gcmVnaW9uIGFyZWEgaGFzIGJlZW4gcmVhY2hlZCwgdGhlIG5leHQgZG91YmxlLWNsaWNrIHdpbGwgY2F1c2UgdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi4gU28sIHRoZSBzZWxlY3Rpb25zIHdpbGwgd3JhcC9jeWNsZS4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuPC9QPgotPFVMPgotICA8TEk+T3BlbiA8Qj5Kb2JEZXNjLnhtbDwvQj4uPC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gdGFnIGNvbnRlbnQ6Ci0gIDxVTD4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5NaWRkbGV3YXJlPC9CPiBvbiBsaW5lIDcuPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPk1pZGRsZXdhcmU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcyBhbmQgPEI+QnVzVHlwZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPk5vdCBzdXJlIHdoYXQgdGhlIFByb3BlcnRpZXMgdmlldyBpcyBzdXBwb3NlZCB0byBzaG93LiBJdCBnb2VzIGJsYW5rLiBTZWUgZGVmZWN0IDE3Nzc1My4gQWxzbywgPEI+TWlkZGxld2FyZTwvQj4gd2Fzbid0IHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhcyBoYWQgZXhwZWN0ZWQuIFRoZSBEZXNpZ24gcGFnZSBvbmx5IHNlZW1zIHRvIHN0YXkgaW4gc3luYyBhdCB0aGUgZWxlbWVudC90YWcgbGV2ZWwgbGlrZSB0aGUgT3V0bGluZSB2aWV3LiBUYWxrIHRvIENyYWlnIGFib3V0IHRoaXMuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhZ2FpbiBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkFwcGxpY2F0aW9uIGFuZCBNaWRkbGV3YXJlIFNvZnR3YXJlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMgYW5kIDxCPkJ1c1R5cGU8L0I+IHJlbWFpbnMgdG8gYmUgdGhlIG9ubHkgdGhpbmcgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGEgdGFnIG5hbWU6Ci0gIDxVTD4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5Ib3dUb0FwcGx5PC9CPiBvbiBsaW5lIDYxLjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UsIERlc2lnbiBwYWdlLCBhbmQgT3V0bGluZSB2aWV3LiAKLSAgICAgICAgPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiB0aGUgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhZ2FpbiBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykgaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZS4gPEI+SG93VG9BcHBseTwvQj4gc2hvdWxkIHJlbWFpbiBzZWxlY3RlZCBpbgotICAgICAgICB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgdmlldy4gPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYW4gYXR0cmlidXRlIG5hbWU6Ci0gIDxVTD4KLSAgICA8TEk+VHlwZSA8Qj5DdHJsK0VuZDwvQj4gdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+ZGlzdHJpYnV0ZTwvQj4gb24gbGluZSA2MS4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU8L0I+IGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSAKLSAgICAgICAgdmlldy4gPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiAKLSAgICAgICAgdGhlIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj5kaXN0cmlidXRlPSJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4gICAgICAgICAgICAgICAgIAotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhbiBhdHRyaWJ1dGUgdmFsdWU6Ci0gIDxVTD4KLSAgICA8TEk+VHlwZSA8Qj5DdHJsK0hvbWU8L0I+IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5TY3JvbGwgZG93biBzdWNoIHRoYXQgbGluZSA2MSBpcyB2aXNpYmxlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+aW50ZXJuYWw8L0I+IG9uIGxpbmUgNjEuIFZlcmlmeSA8Qj5pbnRlcm5hbDwvQj4gaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIAotICAgICAgICB2aWV3LiA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIAotICAgICAgICB0aGUgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPiJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU9ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPiAgICAgICAgICAgICAgICAgCi0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy4gPEI+PEZPTlQgY29sb3I9IiNmZjAwMDAiPkhvd1RvQXBwbHk8L0ZPTlQ+PC9CPjxGT05UIGNvbG9yPSIjZmYwMDAwIj4gYW5kIGFsbCBkZXNjZW5kZW50cyBiZWNvbWUgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyAoZGVmZWN0IDE3Nzc1MikuIEFsc28sIHRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvd3Mgbm8gcHJvcGVydGllcyAoZGVmZWN0IDE3Nzc1MykuPC9GT05UPjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLTwvVUw+Ci0KLTxQPjxCPkZvcm1hdHRpbmcgYSBGaWxlIENyZWF0ZWQgYnkgRGlmZmVyZW50IEVkaXRvcnM8L0I+PEJSPgotPHVsPgotPGxpPgotSW1wb3J0IHRoZSA8Yj5Kb2JQb3N0aW5nLmR0ZDwvYj4gYW5kIDxiPkpvYkRlc2MueG1sPC9iPjwvbGk+Ci0KLTxsaT4KLU9wZW4gdGhlIEpvYkRlc2MueG1sLiBDaGVjayB0aGUgc291cmNlIGZvciBpbmRlbnRhdGlvbiB0byBzZWUgaWYgaXQgcHJlc2VydmVzCi10aGUgd2hpdGUgc3BhY2UgZnJvbSB0aGUgb3JpZ2luYWwgZG9jdW1lbnQuPC9saT4KLQotPGxpPgotVGhlIG9yaWduYWwgZG9jdW1lbnQgdXNlcyBzcGFjZXMgYW5kIHRhYnMsIHNvIHRoZSBmb3JtYXR0aW5nIHdpbGwgYXBwZWFyIGEgbGl0dGxlIHdyb25nLgotQnkgdXNpbmcgdGhlIHJpZ2h0L2xlZnQgYXJyb3dzLCB2ZXJpZnkgdGhhdCBzb21lIHNwYWNlIGlzIHNwYWNlcyBhbmQgc29tZSBzcGFjZQotaXMgdGFiIGNoYXJhY3RlcnMuPC9saT4KLTxMST5Vc2UgJ2Zvcm1hdCBkb2N1bWVudCcgdG8gYmUgc3VyZSBpdCBmb3JtYXRzLiA8L0xJPgotPExJPlRoZSBkZWZhdWx0IGlzIHRvIGZvcm1hdCB3aXRoIHNwYWNlcyAuLi4gdmVyaWZ5IG9ubHkgc3BhY2VzIHJlbWFpbiBpbiBmaWxlLCBub3QgdGFiIGNoYXJhY3Rlcy4gCi0oSnVzdCBhIGxpdHRsZSBtb3ZlbWVudCB3aXRoIHRoZSBhcnJvdyBrZXlzIHNob3VsZCBzdWZmaWNlLjwvTEk+Ci08TEk+R28gdG8gdGhlIHByZWZlcmVuY2UgcGFnZSB0byBjaGFuZ2UgdGhlIGZvcm1hdCBzZXR0aW5ncyBmb3IgdGhlIFhNTCBFZGl0b3IKLXRvIHVzZSB0aGUgdGFiIGNoYXJhY3RlciBpbnN0ZWFkIG9mIDQgc3BhY2VzLiBXaGlsZSB0aGVyZSwgdmVyaWZ5IHRoYXQgdGhlIGRpYWxvZwotd2lsbCBub3QgYWxsb3cgb3RoZXIgdmFsdWVzIHRvIGJlIGludGVyZWQgZXhjZXB0ICJ3aGl0ZXNwYWNlIiAuLi4nXHQncyBhbmQgYmxhbmtzLgotPC9MST4KLTxMST5Gb3JtYXQgdGhlIGRvY3VtZW50IGFnYWluIGFuZCBiZSBzdXJlIHRoaXMgdGltZSB0YWIgY2hhcmFjdGVycyB3ZXJlIHVzZWQuPC9MST4KLTwvdWw+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBPdGhlciB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Qj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+T3RoZXIgdGVzdCBjYXNlczwvRk9OVD48L0I+PC9IMj4KLTxQPjxCPkFzc29jaWF0ZSB0aGUgWE1MIEVkaXRvciB0byBhIG5ldyBmaWxlIHR5cGU8L0I+PC9QPgotPFVMPgotICA8TEk+V2luZG93LSZndDtQcmVmZXJlbmNlczxCPjwvQj4uPC9MST4KLSAgPExJPkV4cGFuZCA8Qj5Xb3JrYmVuY2g8L0I+LjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+RmlsZSBFZGl0b3JzPC9CPi48L0xJPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5BZGQ8L0I+IGJ1dHRvbiB0byBhZGQgYSBuZXcgZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5TcGVjaWZ5IGEgZmlsZSB0eXBlIG9mIDxCPiouc2V0PC9CPiBhbmQgdGhlbiBjbG9zZSB0aGUgQWRkIGRpYWxvZy48L0xJPgotICA8TEk+VmVyaWZ5IDxCPiouc2V0PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgbGlzdCBvZiBmaWxlIHR5cGVzLjwvTEk+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkFkZDwvQj4gYnV0dG9uIHRvIGFzc29jaWF0ZSB0aGUgWE1MIEVkaXRvciB0byB0aGUgbmV3IGZpbGUgdHlwZS48L0xJPgotICA8TEk+U2VsZWN0IDxCPlhNTCBFZGl0b3I8L0I+IGZyb20gdGhlIGxpc3Qgb2YgZWRpdG9ycy4gVmVyaWZ5IGl0IGFwcGVhcnMgd2l0aCBpdHMgb3duIHNwZWNpYWwgaWNvbi4gQ2xvc2UgdGhlIGRpYWxvZy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPk5PVEU6IHdhaXRpbmcgdG8gaGVhciBiYWNrIGZyb20gT1RJIG9uIGhvdyBjYW4gcHJldmVudCAyIFhNTCBFZGl0b3IgZW50cmllcyBmcm9tIGFwcGVhcmluZyBpbiB0aGUgbGlzdC48L0ZPTlQ+PC9MST4KLSAgPExJPlZlcmlmeSA8Qj5YTUwgRWRpdG9yPC9CPiBhcHBlYXJzIGFzIHRoZSBkZWZhdWx0IGVkaXRvciBub3cgZm9yIHRoZSA8Qj4qLnNldDwvQj4gZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5PcGVuIDxCPmdvdGNoYVRDQmVhbnMuc2V0PC9CPiBmcm9tIHRoZSBOYXZpZ2F0b3Igdmlldy4gVmVyaWZ5IGl0IG9wZW5zIHRvIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci08L1VMPgotPFA+PEZPTlQgY29sb3I9IiMwMDAwZmYiPlRIRSBFTkQhPC9GT05UPjwvUD4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiY2RkMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2NjUgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvRFRELyBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Ci0KLTxodG1sPgotPGhlYWQ+Ci08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xIj4KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTW96aWxsYS80LjcgW2VuXSAoV2luTlQ7IFUpIFtOZXRzY2FwZV0iPgotPE1FVEEgY29udGVudD0idGV4dC9jc3MiIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSI+Ci08dGl0bGU+c21va2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDI+IFNtb2tlIFRlc3QgLSBYTUwgRWRpdG9yPC9oMj4KLUxhc3QgdXBkYXRlZDogSnVuZSAyNSwgMjAwMQotPFA+VGhpcyBTbW9rZSBUZXN0IHByaW1hcmlseSBmb2N1c2VzIG9uIHRoZSBSVFAgcG9ydGlvbiBvZiB0aGUgWE1MIAotRWRpdGlvciwgd2hpY2ggaXMgdGhlIFNvdXJjZSBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yLiBJdCBhbHNvIHBlcmZvcm1zIAotc29tZSBpbnRlZ3JhdGlvbiB0ZXN0aW5nLiBGb3IgZXhhbXBsZSwgaXQgdGVzdHMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gCi10aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZXMgb2YgdGhlIFhNTCBFZGl0b3IsIGFzIHdlbGwgYXMgd2l0aCB0aGUgCi1PdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXdzLiBJdCBhbHNvIHZlcmlmaWVzIHRoYXQgZmlsZXMgY3JlYXRlZCAKLXRocm91Z2ggdGhlIFhNTCBGaWxlIHdpemFyZCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgWE1MIENhdGFsb2cgYXJlIAotc3VwcG9ydGVkIGFzIGV4cGVjdGVkLjwvUD4KLTxQPjxGT05UIGNvbG9yPSIjZmYwMDAwIj48Qj5OT1RFPC9CPjogWE1MIGZpbGVzIGFyZSBjYXNlLXNlbnNpdGl2ZSBzbyBiZSBzdXJlIHRoYXQgdGhpbmdzIGFwcGVhciAKLWV4YWN0bHkgYXMgbm90ZWQuPC9GT05UPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dXAKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TZXR1cDwvRk9OVD48L0gyPgotPFA+PEI+U3RhcnRpbmcgQ2xlYW48L0I+PC9QPgotPHVsPgotICAgIDxsaT4gRGVsZXRlIGFueSBleGlzdGluZyB3b3JrYmVuY2g8L2xpPgotICAgIDxsaT4gU3RhcnQgRWNsaXBzZTwvbGk+Ci08L3VsPgotPFA+PEI+T3BlbiBhbiBYTUwgUGVyc3BlY3RpdmU8QlI+Ci08L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPk9wZW4gUGVyc3BlY3RpdmU8L0I+IHRvb2xiYXIgYnV0dG9uIGluIHRoZSB1cHBlciBsZWZ0PC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPk90aGVyLi4uPC9CPjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj5YTUw8L0I+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgdmlld3MgYXBwZWFyIGluIHRoZSBYTUwgcGVyc3BlY3RpdmU6IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGUgbG9jYXRpb24gb2YgdGhlIE91dGxpbmUgYW5kIE5hdmlnYXRvciB2aWV3cyBhcmUgcmV2ZXJzZWQgZnJvbSB0aGUgUmVzb3VyY2UgYW5kIFdlYiBwZXJzcGVjdGl2ZXMuIERvIHdlIHdhbnQgdG8gdHJ5IHRvIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBwZXJzcGVjdGl2ZXM/IEFsc28sIEkgb3BlbmVkIDxCPmRlZmVjdDwvQj4gMTc3NjY0IHRvIGVuYWJsZSBlYXN5IGFjY2VzcyB0byB0aGUgUHJvcGVydGllcyB2aWV3IGZyb20gd2l0aGluIHRoZSBYTUwgcGVyc3BlY3RpdmUuIElmIHRoaXMgdmlldyBpc24ndCBpbmNsdWRlZCBpbiB0aGUgUGVyc3BlY3RpdmUgYmVjYXVzZSBpdHMgdXNlIGlzIGxpbWl0ZWQsIHRoZW4gcmVjb21tZW5kIHdlIGF0IGxlYXN0IHByb3ZpZGUgYSBTaG93IG9yIEhpZGUgUHJvcGVydGllcyBWaWV3IHRvb2xiYXIgYnV0dG9uIChzaW1pbGFyIHRvIHRoZSBidXR0b25zIHRoYXQgUGFnZSBEZXNpZ25lciBwcm92aWRlcykuPC9GT05UPjwvTEk+Ci08L1VMPgotPFA+PEI+UHJvamVjdCBDcmVhdGlvbiBhbmQgRmlsZSBJbXBvcnRzPEJSPgotPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+Q3JlYXRlIGEgUHJvamVjdCwgPEI+WE1MVGVzdDI8L0I+IDwvTEk+Ci0gICAgPExJPkltcG9ydCB0aGUgZm9sbG93aW5nIGZpbGVzIGludG8gdGhpcyBwcm9qZWN0OgotICAgIDxVTD4KLSAgICAgICAgPExJPjxCPlB1cmNoYXNlT3JkZXIueHNkPC9CPjwvTEk+Ci0gICAgICAgIDxMST48Qj5JbnZvaWNlLmR0ZDwvQj48L0xJPgotICAgIDxMST48Qj5Kb2JEZXNjLnhtbDwvQj48L0xJPgotICAgIDxMST48Qj5XaXJlbGVzcy54bWw8L0I+PC9MST4KLSAgICA8TEk+PEI+Z290Y2hhVENCZWFucy5zZXQ8L0I+PC9MST4KLSAgICA8TEk+PEI+QVRTLmR0ZDwvQj48L0xJPgotICAgIDxMST48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+YW55IG90aGVycz88L0ZPTlQ+PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci08L1VMPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgIENyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPkNyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlczwvRk9OVD48L0gyPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gc2NyYXRjaDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIENyZWF0ZSBhIFhNTCBGaWxlIHdpemFyZCBhcHBlYXJzIGFuZCB0aGUgRmluaXNoIGJ1dHRvbiBpcyBkaXNhYmxlZC4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPjxCPkRFRkVDVDo8L0I+IDE3NzY2MCAtIFhNTCBGaWxlIHdpemFyZDogZGlzYWJsZSBGaW5pc2ggYnV0dG9uIG9uIHRoZSBmaXJzdCBwYWdlPC9GT05UPi48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5mcm9tU2NyYXRjaDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmc6Ci0gICAgPFVMPgotICAgICAgICA8TEk+ZnJvbVNjcmF0Y2gueG1sIGFwcGVhcnMgaW4gdGhlIE5hdmlnYXRvciB2aWV3LjwvTEk+Ci0gICAgICAgIDxMST5mcm9tU2NyYXRjaC54bWwgaXMgb3BlbiB0byB0aGUgRGVzaWduIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IgYW5kIGhhcyBmb2N1cy48L0xJPgotICAgICAgICA8TEk+dGhlIERlc2lnbiB0YWIgYXBwZWFycyBiZWZvcmUgdGhlIFNvdXJjZSB0YWIgaW4gdGhlIFhNTCBFZGl0b3IuPC9MST4KLSAgICAgICAgPExJPnRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlIHNob3cgbm8gY29udGVudC48L0xJPgotICAgICAgICA8TEk+dGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlld3Mgc2hvdyBub3RoaW5nLjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5Td2l0Y2ggdG8gdGhlIFNvdXJjZSBwYWdlLiBWZXJpZnkgdGhlIGN1cnNvciBhcHBlYXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+UmlnaHQgbW91c2UgYnV0dG9uIDIgYW5kIHZlcmlmeSBhIHBvcHVwIG1lbnUgYXBwZWFycy48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uIFZlcmlmeSB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWwgbGlzdCBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7PC9CPjwvTEk+Ci0gICAgPExJPlZlcmlmeSAmbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7IGlzIGluc2VydGVkIGFuZCBhcHBlYXJzIHN5bnRheCBoaWdobGlnaHRlZCBhbmQgYW4gZW50cnkgYXBwZWFycyBmb3IgaXQgaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgWE1MIGRlY2xhcmF0aW9uIGFuZCB2ZXJpZnkgPEI+dmVyc2lvbjwvQj4gYW5kIDxCPmVuY29kaW5nPC9CPiBhcHBlYXIgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoaXMgdXNlZCB0byB3b3JrLCBidXQgbm93IGl0J3Mgbm90IHdvcmtpbmcuIE9wZW5lZCA8Qj5kZWZlY3Q8L0I+IDE3NzY2MiAtIFhNTCBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzIG5vdCBhcHBlYXJpbmcgaW4gUHJvcGVydGllcyB2aWV3LiBJZiB3ZSBkZWNpZGUgdG8gbm90IHRyZWF0IHZlcnNpb24gYW5kIGVuY29kaW5nIGFzIGF0dHJpYnV0ZXMsIHRoZW4gdGhpcyBzdGVwIHNob3VsZCBiZSByZW1vdmVkLjwvRk9OVD48L0xJPgotICAgIDxMST5Db250aW51ZSB0byB0aGUgbmV4dCBzZWN0aW9uLjwvTEk+Ci08L1VMPgotPFA+PEI+SWRlbnRpZnkgYSBsb2NhbCBEVEQgKDwvQj52ZXJpZmllcyBhIERURCBpcyBpbW1lZGlhdGVseSByZWNvZ25pemVkOyBpbiB0aGUgcGFzdCwgeW91IGhhZCB0byBjbG9zZSBhbmQgcmVvcGVuIHRoZSBXb3JrYmVuY2g8Qj4pPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+VHlwZSB0aGUgZm9sbG93aW5nIGFmdGVyIHRoZSBYTUwgZGVjbGFyYXRpb24gaW4gPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPjogPEI+Jmx0OyFET0NUWVBFIEludm9pY2UgU1lTVEVNICZxdW90O0ludm9pY2UuZHRkJnF1b3Q7Jmd0OzwvQj4uIFRoZSB0ZXh0IHNob3VsZCBiZSBzeW50YXggaGlnaGxpZ2h0ZWQgYXMgeW91IHR5cGUgYW5kIHlvdSBzaG91bGQgc2VlIGFuIGVudHJ5IGdldCBhZGRlZCB0byB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gY3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24uPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LlZlcmlmeSBvbmx5IDxCPkludm9pY2U8L0I+IGFuZCA8Qj5jb21tZW50PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QuICg8Qj5OT1RFPC9CPjogPEI+SW52b2ljZTwvQj4gaXMgdGhlIHJvb3QgZWxlbWVudCk8L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGFjY2VwdCA8Qj5JbnZvaWNlPC9CPiBhcyBhIHNlbGVjdGlvbi4gVmVyaWZ5IHRoZSBJbnZvaWNlIHN0YXJ0IGFuZCBlbmQgdGFncyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgU291cmNlIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmV0d2VlbiB0aGVtLiBBbiBlbGVtZW50IGVudHJ5IHNob3VsZCBhcHBlYXIgZm9yIEludm9pY2UgaW4gdGhlIE91dGxpbmUgdmlldy4gKDxCPk5PVEU8L0I+OiBYTUwgaXMgY2FzZS1zZW5zaXRpdmUgc28gYmUgc3VyZSB5b3Ugc2VlIEludm9pY2UgYW5kIG5vdCBpbnZvaWNlIGV2ZXJ5d2hlcmUpLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi4gVmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFycyBpbiB0aGUgcHJvcG9zYWwgbGlzdCAoaW4gdGhlIG9yZGVyIHNob3duKTogPEZPTlQgY29sb3I9IiNmZjAwMDAiPkl0ZW0gaXMgYXBwZWFyaW5nIGJlZm9yZSBIZWFkZXIuIFRoZSBkZWZhdWx0IGlzIG5vdCB0byBzb3J0IHRoZSBsaXN0IGFscGhhYmV0aWNhbGx5LiBUaGF0IG1lYW5zIHRoZSBsaXN0IHNob3VsZCBiZSBzb3J0ZWQgYmFzZWQgb24gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBjaGlsZCB0YWdzIGFyZSBkZWZpbmVkIGluIHRoZSBlbGVtZW50IGRlZmluaXRpb24gZm9yIEludm9pY2UgaW4gdGhlIERURC4gSW4gb3RoZXIgd29yZHMsIHVzZXJzIHNob3VsZCBzZWUgY2hpbGQgdGFncyBsaXN0ZWQgYWNjb3JkaW5nIHRvIHRoZWlyIHNlcXVlbmNpbmcgb3JkZXIgaW4gdGhlIERURCwgd2hpY2ggdGhlIERURCBFZGl0b3Igc2hvd3MuIFZpb2xhdGluZyB0aGUgc2VxdWVuY2luZyBvcmRlciBjYXVzZXMgYW4gWE1MIGZpbGUgdG8gYmVjb21lIG5vdCB2YWxpZC4gPEI+REVGRUNUOjwvQj4gMTc3NjY4PC9GT05UPgotICAgIDxVTD4KLSAgICAgICAgPExJPkhlYWRlcjwvTEk+Ci0gICAgICAgIDxMST5JdGVtPC9MST4KLSAgICAgICAgPExJPmNvbW1lbnQ8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBhY2NlcHQgPEI+SGVhZGVyPC9CPiBhcyBhIHNlbGVjdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIFNvdXJjZSBub3cgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmVmb3JlIDxCPmludm9pY2VOdW1iZXI8L0I+OjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjgzIiBzcmM9ImlkZW50aWZ5RFRELmpwZyIgd2lkdGg9IjQ4NSI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkhlYWRlcjwvQj4gYXBwZWFycyBuZXN0ZWQgdW5kZXIgPEI+SW52b2ljZTwvQj4gaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICA8TEk+Q2xvc2UgdGhpcyBmaWxlLCBhbmQgcmVzcG9uZCA8Qj5ZZXM8L0I+IHdoZW4gcHJvbXB0ZWQgdG8gc2F2ZSB0aGUgY2hhbmdlcy48L0xJPgotICA8TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgdGhlIGNoYW5nZXMgd2VyZSBzYXZlZC48L0xJPgotICA8TEk+Q2xvc2UgdGhlIGZpbGUuIFZlcmlmeSBubyBzYXZlIGNoYW5nZXMgcHJvbXB0IGFwcGVhcnMuPC9MST4KLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhbiBpbXBvcnRlZCBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkZpbGUtJmd0O05ldy0mZ3Q7WE1MIEZpbGU8L0I+LjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgQ3JlYXRlIGEgWE1MIEZpbGUgd2l6YXJkIGFwcGVhcnMuPC9MST4KLSAgICA8TEk+U2VsZWN0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZSBmcm9tIGEgRFREIGZpbGU8L0I+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPmZyb21Mb2NhbERURDwvQj48L0xJPgotICAgICAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZTwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkltcG9ydCBGaWxlPC9CPiBidXR0b24KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Vc2UgdGhlIEJyb3dzZSBidXR0b24gdG8gZmluZCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlci4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldvdWxkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGFscmVhZHkgZmlsbGVkIGluLiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj4gdG8gY2xvc2UgdGhlIEltcG9ydCBGaWxlIHdpemFyZDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5FeHBhbmQgPEI+WE1MdGVzdDI8L0I+IGFuZCB0aGVuIHNlbGVjdCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V2FzIGV4cGVjdGluZyB0byBzZWUgdGhlIGltcG9ydGVkIGZpbGUgc2VsZWN0ZWQgaW4gdGhlIFdvcmtiZW5jaCBmaWxlcyBsaXN0LCBidXQgaXQgd2Fzbid0LiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj50ZXN0Y2FzZTwvQj4gYXMgdGhlIFJvb3QgRWxlbWVudC48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIHJlcXVpcmVkIGNvbnRlbnQgb25seTwvQj4uPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPnRlc3RjYXNlLmR0ZDwvQj4gYXBwZWFycyBhcyB0aGUgU3lzdGVtIElkLjwvTEk+Ci0gICAgPExJPlNlbGVjdCBGaW5pc2guIFZlcmlmeSA8Qj5mcm9tTG9jYWxEVEQueG1sPC9CPiBhcHBlYXJzIGluIHRoZSBYTUwgRWRpdG9yLiBWZXJpZnkgdGhlIFNvdXJjZSBwYWdlIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzogPElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjkwIiBzcmM9ImltcG9ydERURC5qcGciIHdpZHRoPSI2NjAiPjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIE91dGxpbmUgdmlldyBhbmQgdGhlIGZvcm1hdHRpbmcgaW5kZW50YXRpb24gcmVmbGVjdCB0aGUgcHJvcGVyIGVsZW1lbnQvdGFnIGhpZXJhcmNoeS4gSGVyZSdzIHdoYXQgdGhlIE91dGxpbmUgdmlldyBzaG91bGQgbG9vayBsaWtlOjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjI5NyIgc3JjPSJvdXRsaW5lMS5qcGciIHdpZHRoPSI2NTUiPjwvTEk+Ci0gIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuIAotICAgICAgICAgICAgVmVyaWZ5IDxCPmhlYWRlcjwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyBhbmQgaW4gdGhlIERlc2lnbiAKLSAgICAgICAgICAgIHBhZ2UgYW5kIHRoYXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFuZCBwcm9wZXJ0eSB2YWx1ZXMgYXBwZWFyIGluIHRoZSAKLSAgICAgICAgICAgIFByb3BlcnRpZXMgdmlldzoKLSAgICAgICAgPFRBQkxFIGJvcmRlcj0iMSI+Ci0gICAgICAgICAgICA8VEJPRFk+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+PEI+UHJvcGVydHk8L0I+PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+PEI+VmFsdWU8L0I+PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPmNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+d2VidG9vbDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5udW1iZXI8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij5pZHZhbHVlMDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdGF0ZTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPiZuYnNwOzwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdWJDYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPkFjY2Vzc2FiaWxpdHk8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3ViU3ViQ2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij4mbmJzcDs8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICA8L1RCT0RZPgotICAgICAgICA8L1RBQkxFPgotICAgICAgICA8L0xJPgotCTxMST5Gcm9tIHRoZSBPdXRsaW5lIHZpZXcsIHNlbGVjdCB0aGUgPEI+dGVzdEJ1Y2tldDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnRlc3RCdWNrZXQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgdGhlIGN1cnJlbnQgbWFya2VyCi0gICAgICAgICAgICBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIG9mIHRoZSBTb3VyY2UgcGFnZSBpbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIHRoZSAKLSAgICAgICAgICAgIDxCPnRlc3RCdWNrZXQ8L0I+IHRhZy4gVGhlIFByb3BlcnRpZXMgdmlldyBzaG91bGQgc2hvdyBhIHByb3BlcnR5IG9mIDxCPnR5cGU8L0I+Ci0gICAgICAgICAgICB3aXRoIGEgdmFsdWUgb2YgPEI+Q29tcG9uZW50VGVzdDwvQj4uCi0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPiAKLSAgICA8TEk+VmVyaWZ5IGVkaXQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgYW5kIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcgKGZvY3VzIGhlcmUgaXMgb24gYWRkaW5nIGF0dHJpYnV0ZXMgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMpLgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCB1c2UgY29udGVudCBhc3Npc3QgdG8gaW5zZXJ0IGFuIGF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlIHZhbHVlCi0gICAgICAgICAgICBmb3IgdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIDxCPmNhdGVnb3J5PC9CPiBhdHRyaWJ1dGUgaW4gdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VHlwZSA8Qj5zcGFjZTwvQj4gYW5kIHRoZW4gaGl0IHByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgb25seSA8Qj5zdGF0ZTwvQj4gYW5kIDxCPnN1YlN1YkNhdGVnb3J5PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QgKGNvbnRlbnQgYXNzaXN0IGlzIHNtYXJ0IGVub3VnaCBub3QgdG8gbGlzdCBhbnkgYXR0cmlidXRlcyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHN0YXJ0IHRhZyBzaW5jZSBhdHRyaWJ1dGVzIGNhbiBvbmx5IGFwcGVhciBvbmNlLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5zdGF0ZTwvQj4uPC9MST4gICAKLSAgICAgICAgICAgIDxMST5WZXJpZnkgPEI+c3RhdGU9IlVuZGVyQ29uc3RydWN0aW9uIjwvQj4gaXMgaW5zZXJ0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChjb250ZW50IGFzc2lzdCBhdXRvbWF0aWNhbGx5IGluc2VydHMgYW55IGRlZmF1bHQgdmFsdWVzLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS4gVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSBhbmQgUHJvcGVydGllcyB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuPC9MST4gICAgICAgICAKLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHVwZGF0ZSB0aGUgPEI+c3RhdGU8L0I+IGF0dHJpYnV0ZSB2YWx1ZSB0byAiVW5kZXJSZXZpZXciIAotICAgICAgICAgICAgKGEgcHVsbGRvd24gbGlzdCBvZiB2YWx1ZXMgc2hvdWxkIGJlIGF2YWlsYWJsZSkuIFZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZAotICAgICAgICAgICAgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzLgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZSB0byB0aGUgPEI+aGVhZGVyPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+QnJpbmcgdXAgdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSA8Qj5oZWFkZXI8L0I+IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5BZGQgQXR0cmlidXRlLT5zdWJTdWJDYXRlZ29yeTwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudSAoaXQncyBzbWFydAotICAgICAgICAgICAgICAgIGVub3VnaCB0byBrbm93IHdoaWNoIGF0dHJpYnV0ZXMgaGF2ZW4ndCBiZWVuIHNwZWNpZmllZCB5ZXQgLi4uIGxpa2UgY29udGVudCAKLSAgICAgICAgICAgICAgICBhc3Npc3QuIENvb2whKS48L0xJPgotICAgICAgICAgICAgPExJPlR5cGUgaW4gYSB2YWx1ZSBvZiA8Qj5LZXlib2FyZCBzdXBwb3J0PC9CPi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIFByb3BlcnRpZXMgdmlldzwvTEk+Ci0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLTwvVUw+Ci08UD48Qj5PcGVuIGFuIFhNTCBGaWxlIHRoYXQgcmVmZXJlbmNlcyBhIHJlbW90ZSBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5PcGVuIHRoZSA8Qj5XaXJlbGVzcy54bWw8L0I+IGZpbGUuPC9MST4KLSAgICA8TEk+VmVyaWZ5IGl0IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBpbiB0aGUgU291cmNlIHBhZ2U6PElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjM5IiBzcmM9IndpcmVsZXNzLmpwZyIgd2lkdGg9IjY1NiI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBPdXRsaW5lIHZpZXcgYW5kIHRoZSBmb3JtYXR0aW5nIGluZGVudGF0aW9uIHJlZmxlY3QgdGhlIHByb3BlciAKLSAgICAgICAgZWxlbWVudC90YWcgaGllcmFyY2h5LiBIZXJlJ3Mgd2hhdCB0aGUgT3V0bGluZSB2aWV3IHNob3VsZCBsb29rIGxpa2U6IDxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjE4OSIgc3JjPSJvdXRsaW5lMi5qcGciIHdpZHRoPSI2NTYiPjwvTEk+IAotICAgIDxMST5WZXJpZnkgY29udGVudCBhc3Npc3QgPEZPTlQgY29sb3I9IiNmZjAwMDAiPkRlZmVjdCAxNzYzNzkgKGluIHZlcmlmeSBzdGF0ZSwgYnV0IHN0aWxsIG5vdCB3b3JraW5nKTwvRk9OVD4uPC9MST4KLSAgICAgICAgPFVMPgotICAgICAgICAgICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIDxCPndtbDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0IG9uIHRoZSBuZXcgbGluZS48L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAoaW4gdGhlIG9yZGVyIHNob3duKTogCi0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPmhlYWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST50ZW1wbGF0ZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNhcmQ8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSA8Qj53bWw8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+VHlwZSBhIHNwYWNlIGJlZm9yZSB0aGUgZW5kaW5nIGRlbGltaXRlciBvbiB0aGUgY2FyZCBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Q8L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAobm90IG5lY2Vzc2FyaWx5IGluIHRoZQotICAgICAgICAgICAgICAgb3JkZXIgc2hvd24pLiAKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+dGl0bGU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5uZXdjb250ZXh0PC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b3JkZXJlZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnhtbDpsYW5nPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b25lbnRlcmJhY2t3YXJkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b250aW1lcjwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmlkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2xhc3M8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3Igd2l0aGluIHRoZSA8Qj5tZXRob2Q8L0I+IGF0dHJpYnV0ZSB2YWx1ZSBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdDwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgPEI+cG9zdDwvQj4gYW5kIDxCPmdldDwvQj4gYXBwZWFyIGFzIHByb3Bvc2Fscy48L0xJPgotICAgICAgICA8L1VMPgotICAgIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+Y2FyZDwvQj4gc3RhcnQgdGFnLiAKLSAgICAgICAgICAgIFZlcmlmeSA8Qj5jYXJkPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IGFuZCBpbiB0aGUgRGVzaWduIAotICAgICAgICAgICAgcGFnZSBhbmQgdGhhdCB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWxzIGxpc3RlZCBhYm92ZSBmb3IgdGhlCi0gICAgICAgICAgICA8Qj5jYXJkPC9CPiB0YWcgYXBwZWFyIGFzIHByb3BlcnRpZXMgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gTm8gdmFsdWVzIHNob3VsZCBhcHBlYXIgZm9yIHRoZXNlIHByb3BlcnRpZXMuPC9MST4KLQk8TEk+RnJvbSB0aGUgT3V0bGluZSB2aWV3LCBzZWxlY3QgdGhlIDxCPnBvc3RmaWVsZDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnBvc3RmaWVsZDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCB0aGUgY3VycmVudCBtYXJrZXIKLSAgICAgICAgICAgIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gb2YgdGhlIFNvdXJjZSBwYWdlIGluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIAotICAgICAgICAgICAgPEI+cG9zdGZpZWxkPC9CPiB0YWcuIFRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvdWxkIHNob3cgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLAotICAgICAgICAgICAgbm9uZSBvZiB3aGljaCBzaG91bGQgaGF2ZSBhIHZhbHVlOgotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST5uYW1lPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+dmFsdWU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5pZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNsYXNzPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPgotICAgIDxMST5WZXJpZnkgZWRpdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3IChmb2N1cyBoZXJlIGlzIG9uIGFkZGluZyBlbGVtZW50cy90YWdzKS4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY29weSBhbmQgcGFzdGUgdGhlIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIGluIHRoZSA8Qj5jYXJkPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5Ob3RpY2UgdGhlIHJhbmdlIG9mIHRoZSA8Qj5jYXJkPC9CPiB0YWcgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBhcmVhLjwvTEk+Ci0gICAgICAgICAgICA8TEk+Q29weSB0aGlzIHJhbmdlIG9mIGxpbmVzIHVzaW5nIHRoZSA8Qj5FZGl0LT5Db3B5PC9CPiBwdWxsZG93biBtZW51IHNlbGVjdGlvbi48L0xJPgotICAgICAgICAgICAgPExJPlBhc3RlIGFmdGVyIHRoZSA8Qj5jYXJkPC9CPiBlbmQgdGFnIHVzaW5nIEN0cmwrVi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgYXBwcm9wcmlhdGUgbGluZXMgd2VyZSBwYXN0ZWQgbiB0aGUgU291cmNlIHBhZ2UuCi0gICAgICAgICAgICAgICAgVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgdGhlIFByb3BlcnRpZXMgCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLjwvTEk+ICAgICAgICAgCi0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbm90aGVyIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5CcmluZyB1cCB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIDxCPndtbDwvQj4gdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPkFkZCBDaGlsZC0+Y2FyZDwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudS48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIHRoZSBQcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLiBOT1RFOiBpdCBzaG91bGQgaGF2ZSBnZW5lcmF0ZWQgb3V0Ci0gICAgICAgICAgICAgICAgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIG9yaWdpbmFsIGNhcmQgdGFnLCB3aXRoIHRoZSBleGNlcHRpb24KLSAgICAgICAgICAgICAgICB0aGF0IGEgPEI+bWV0aG9kPC9CPiBhdHRyaWJ1dGUgc2hvdWxkIG5vdCBleGlzdCBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy4gPC9MST4KLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPiAKLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW5kIFZhbGlkYXRlIGFuIFhNTCBGaWxlIGZyb20gYSBzY2hlbWE8L0I+PEJSPgotCi08UD4odGhlc2Ugc3RlcHMgYXJlIHRha2VuIGZyb20gdGhlICdEZXNpZ24nIHNtb2tlIHRlc3QsIGV4Y2VwdCB0aGUgU291cmNlIFBhZ2UgaXMgdGhlIGZvY3VzKTwvUD4KLTx1bD4KLTxsaT4KLVJpZ2h0IG1vdXNlIGJ1dHRvbiAyIG9uIHRoZSBQdXJjaGFzZU9yZGVyLnhzZCBhbmQgc2VsZWN0IDxiPkNyZWF0ZSBYTUwKLUZpbGU8L2I+LjwvbGk+Ci0KLTxsaT4KLUFjY2VwdCB0aGUgZGVmYXVsdCBmaWxlIG5hbWVzLjwvbGk+Ci0KLTxsaT4KLUluIHRoZSBTZWxlY3QgUm9vdCBFbGVtZW50IHBhZ2UsIGNob29zZSA8Yj5wdXJjaGFzZU9yZGVyPC9iPiBhcyByb290IGVsZW1lbnQuPC9saT4KLQotPGxpPgotQ2hvb3NlIDxiPkNyZWF0ZSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgY29udGVudDwvYj4gdG8gY3JlYXRlIGEgbWluaW1hbAotZG9jdW1lbnQuPC9saT4KLQotPGxpPgotRW50ZXIgPGI+cG88L2I+IGFzIHRoZSBuYW1lc3BhY2UgcHJlZml4LjwvbGk+Ci0KLTxsaT5PbiBGaW5pc2gsIGEgUHVyY2hhc2VPcmRlci54bWwgaXMgY3JlYXRlZCBhbmQgdGhlIFhNTCBFZGl0b3IgaXMgb3BlbmVkLiAoU2VsZWN0IFNvdXJjZSBQYWdlIGlmIG5vdCBhbHJlYWR5IHRoZXJlLik8L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBzaG91bGQgYmUgaW52YWxpZC48L2xpPgotCi08bGk+Ci1Eb3VibGUgY2xpY2sgb24gdGhlIGVycm9yIG1lc3NhZ2UuIEl0IHNob3VsZCBiZSBwb3NpdGlvbmVkIHRvIHRoZSBsaW5lCi1pbiBlcnJvciwgaS5lLiB0aGUgPGI+cGFydE51bTwvYj4gYXR0cmlidXRlLiBJdCBpcyBpbnZhbGlkIGJlY2F1c2UgdGhlCi12YWx1ZSBpcyBub3Qgc2V0IHRvIG1hdGNoIHRoZSBYTUwgc2NoZW1hIHBhdHRlcm4gZmFjZXQgImQzLVtBLVpdezJ9IiAoMwotZGlnaXRzIGZvbGxvd2VkIGJ5IDIgY2hhcmFjdGVycykuPC9saT4KLQotPGxpPkluIHRoZSBTb3VyY2UgVmlldywgbG9jYXRlIHRoZSA8Yj5wYXJ0TnVtPC9iPiBhdHRyaWJ1dGUgdW5kZXIgZWxlbWVudCBpdGVtLgotRW50ZXIgdGhlIHZhbHVlIDMzMy1BQi48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBkb2N1bWVudCBzaG91bGQgbm93IGJlIHZhbGlkLjwvbGk+Ci08L1VMPgotPFVMPgotICA8TEk+Ci0gIDxIUj48L0xJPgotICA8bGk+UGxhY2UgdGhlIGN1cnNvciBhZnRlciB0aGUgJmx0O2l0ZW1zJmd0OyB0YWcgYW5kIGJlc3VyZSAiaXRlbSIgaXMgCi0gIGxpc3RlZCBpbiB0aGUgY29udGVudCBhc3Npc3QgbGlzdC4gPC9saT4KLTxsaT5SZW5hbWUgdGhlIHB1cmNoYXNlT3JkZXIueHNkIHRvLCBzYXksIHB1cmNoYXNlT3JkZXJIT0xELnhzZDwvbGk+Ci08bGk+VmVyaWZ5IHRoYXQgY29udGVudCBhc3Npc3Qgc3RpbGwgZ2l2ZXMgeW91ICJpdGVtIiBhcyBhYm92ZS48L2xpPgotPGxpPk5vdyBzZWxlY3QgdGhlICJSZWxvYWQgRGVwZW5kYW5jaWVzIiBidXR0b24uPC9saT4KLTxsaT5WZXJpZnkgdGhhdCBub3cgY29udGVudCBhc3Npc3Qgbm8gbG9uZ2VyIGxpc3RzIGFueSBpdGVtcyBvdGhlciAKLXRoYXQgdGhlIG1hY3JvICJjb21tZW50Ii48L2xpPgotPGxpPlJlcGVhdCBtYWtpbmcgcHVyY2hhc2VPcmRlci54c2Qgd29ya2FibGUgYWdhaW4uPC9saT4KLTwvdWw+Ci08UD48L1A+PFA+PC9QPjxQPjwvUD48UD48L1A+PFA+PC9QPjwvUD4KLTxQPjxCPk9wZW4gYW4gWE1MIEZpbGUgZm9yIGEgc2hpcHBlZCBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+Ci08QlI+Ci1bcHV0IGluIG9wdGlvbmFsIHNlY3Rpb24gLi4gdGhpcyBpc24ndCBhIGN1c3RvbWVyIHNjZW5lcmlvXTxCUj4KLVRvIHZlcmlmeSB0aGF0IHNoaXBwZWQgRFREcyBhcmUgd29ya2luZzo8QlI+Ci08VUw+Ci08TEk+Ci1Vc2UgYSB3ZWIgcHJvamVjdCB3aXRoIGEgc3RhbmRhcmQgd2ViLnhtbCBmaWxlIGluIGl0LiBCZSBzdXJlIAotdGhlcmUgaXMgbm8gd2ViLWFwcF8yXzIuZHRkIGZpbGUgaW4gdGhlIGRpcmVjdG9yeS4gSW4gdGhlIHdlYi54bWwgZmlsZSAKLWl0c2VsZiwgbWFuZ2xlIHRoZSB3ZWItYXBwXzJfMi5kdGQgZmlsZW5hbWUgaW4gdGhlIHN5c3RlbSBpZCBhIGxpdHRsZSwgc3VjaCBhcyAKLWNoYW5nZSBpdCB0byB4ZWItYXBwXzJfMi5kdGQgdG8gYmUgc3VyZSBpdCBjYW4ndCBiZSBmb3VuZCB2aWEgdGhlCi1ub3JtYWwgaHR0cCBtZXRob2QgKFRoaXMgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSBmb3IgdGhlIGZ1bnRpb24gdG8gd29yaywKLWl0cyBqdXN0IHRvIGJlIHN1cmUgb25seSB0aGUgY2F0YWxvZyBmdW5jdGlvbiBpcyBpbiBlZmZlY3QpLgotPC9MST4KLTxMST4KLUdvIHRvIHRoZSBwcmVmZXJlbmNlcyBwYWdlLCBhbmQgb3BlbiB0aGUgWE1MIENhdGFsb2cuIFZlcmlmeSB0aGVyZSAKLWlzIGFuIGVudHJ5IGZvciAtLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgV2ViIEFwcGxpY2F0aW9uIDIuMi8vRU4uCi08L0xJPgotPExJPgotT25jZSBhbGwgdGhlIHByZXAgd29yayBpcyBkb25lIChmaWxlcyBkZWxldGVkLCB0ZXh0IG1vZGlmaWVkKSwgeW91IHNob3VsZCAKLWV4aXQgYW5kIHJlc3RhcnQgRWNsaXBzZSB0byBiZSBzdXJlIHlvdSBoYXZlIGEgZnJlc2ggc3RhcnQuCi08L0xJPgotPExJPgotT3BlbiB0aGUgd2ViLnhtbCBmaWxlIGFuZCBiZSBzdXJlIHRoYXQgY29udGVudCBhc3Npc3Qgd29ya3MgZm9yIHRoYXQgZmlsZS4KLUZvciBleGFtcGxlLCByaWdodCBhZnRlciB0aGUgZW5kIG9mIHRoZSAmbHQ7L2Rpc3BsYXktbmFtZSZndDsgdGFnLCBjdHJsLXNwYWNlIAotc2hvdWxkIHByb3ZpZGUgYSBsb25nIGxpc3Qgb2YgZWxlbWVudHMsIHN0YXJ0aW5nIHdpdGggc2VydmxldCwgc2VydmxldC1tYXBwaW5nLCBldGMuCi1UaGlzIGluZGljYXRlcyB0aGUgc2hpcHBlZCBEVEQgZnVuY3Rpb24gaXMgd29ya2luZyBhbmQgY29uZmlndXJlZCAKLWNvcnJlY3RseSAoYXQgbGVhc3QgZm9yIHRoZSB3ZWIueG1sIGZpbGUpLgotPC9MST4KLTwvVUw+Ci08L1A+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhIG5ldyBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+PElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotCi08Yj5UaGUgZm9sbG93aW5nIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlICdEZXNpZ24nIFNtb2tlIFRlc3Q6IFhNTCBDYXRhbG9nIGZvciBYTUwgU2NoZW1hPC9iPgotPHVsPgotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZDwvbGk+Ci0KLTxsaT4KLUNyZWF0ZSBhIG5ldyBwcm9qZWN0LCBYTUxUZXN0MjwvbGk+Ci0KLTxsaT4KLU1vdmUgdGhlIFB1cmNoYXNlT3JkZXIueHNkIGludG8gWE1MVGVzdDIuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sLiBZb3Ugd2lsbCBub3RpY2UgdGhhdCBpdCBpcyBubyBsb25nZXIKLXZhbGlkLiBUaGUgZXJyb3IgbWVzc2FnZSBzaG91bGQgZ2l2ZSB5b3UgYSBoaW50IHRoYXQgdGhlIGZpbGUgUHVyY2hhc2VPcmRlci54c2QKLWNhbiBubyBsb25nZXIgYmUgZm91bmQuPC9saT4KLQotPGxpPgotT3BlbiB0aGUgV2luZG93LT5QcmVmZXJlbmNlcyBhbmQgc2VsZWN0IHRoZSBYTUwgQ2F0YWxvZy48L2xpPgotCi08bGk+Ci1FbnRlciB0aGUgcGFpciA8Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IGY6XGVjbGlwc2VcWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+PC9saT4KLQotPGJyPk9yIGFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgaW5zdGFsbCBkaXJlY3RvcnkKLW9mIHRoZSB3b3JrYmVuY2ggYXMgZm9sbG93czoKLTxicj48Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IC5cWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+Ci08bGk+Ci1DbGljayBvbiB0aGUgUmVsb2FkIGJ1dHRvbiB0byByZWxvYWQgdGhlIGNhdGFsb2cgc2V0dGluZ3MuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgZG9jdW1lbnQgc2hvdWxkIG5vdyBiZSB2YWxpZC48L2xpPgotPC91bD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICBTYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXM8L0ZPTlQ+PC9IMj4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZTwvQj48QlI+Ci0oTk9URTogdGhlIDxCPklkZW50aWZ5IGEgbG9jYWwgRFREPC9CPiB0ZXN0IGNhc2UgdGVzdHMgdGhlIHNhdmUgcHJvbXB0IG9uIGEgZmlsZSBjbG9zZS4pPC9QPgotPFVMPgotICA8TEk+SWYgYW55IGZpbGVzIGFyZSBvcGVuLCBzZWxlY3QgPEI+RmlsZS0mZ3Q7Q2xvc2UgQWxsPC9CPiAob3IgPEI+Q3RybCtTaGlmdCtGNDwvQj4pIHRvIGNsb3NlIHRoZW0uPC9MST4KLSAgPExJPk9wZW4gYW55IHhtbCBmaWxlIGluIHRoZSA8Qj5YTUxUZXN0MjwvQj4gcHJvamVjdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQWxsPC9CPiBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFzPC9CPiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlPC9CPiB0b29sYmFyIGJ1dHRvbiAoYSBkaXNrZXR0ZSkgaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmUgQXM8L0I+IHRvb2xiYXIgYnV0dG9uIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZGlzYWJsZWQgb24gdGhlIFNvdXJjZSBwb3B1cCBtZW51LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V291bGQgYmUgbmljZSBpZiB0aGUgRGVzaWduIHBvcHVwIG1lbnUgYWxzbyBoYWQgYSBTYXZlIHNlbGVjdGlvbi4gT3BlbiBhIHN1Z2dlc3Rpb24gZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5ubyA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKGNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBbGw8L0I+IGlzIGVuYWJsZWQ8L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZTwvQj4gdG9vbGJhciBidXR0b24gKGEgZGlza2V0dGUpIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZW5hYmxlZCBvbiB0aGUgU291cmNlIHBvcHVwIG1lbnUuPC9MST4KLSAgICA8TEk+YSA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5IaXQgPEI+Q3RybCtTPC9CPi4gPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5GaWxlLSZndDtTYXZlIEFsbDxCPjwvQj4uPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIFByb3BlcnRpZXMgdmlldy48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+U2VsZWN0IDxCPlNhdmU8L0I+IGZyb20gdGhlIFNvdXJjZSBwb3B1cCBtZW51LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5DbG9zZSBhbmQgdGhlbiByZW9wZW4gdGhlIGZpbGUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSBpbiB0aGUgcHJldmlvdXMgc3RlcHMgYXBwZWFyIGluIHRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlcy48L0xJPgotPC9VTD4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZSBhY3Jvc3MgbXVsdGlwbGUgcGVyc3BlY3RpdmVzIChvcHRpb25hbCk8L0I+PC9QPgotPFVMPgotICA8TEk+T3BlbiBhbnkgeG1sIGZpbGUgaW4gdGhlIDxCPlhNTFRlc3QyPC9CPiBwcm9qZWN0LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIHRvIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5PcGVuIGFub3RoZXIgWE1MIFBlcnNwZWN0aXZlIGJ5OgotICA8VUw+Ci0gICAgPExJPjxCPnNlbGVjdGluZyBQZXJzcGVjdGl2ZS0mZ3Q7T3Blbi0mZ3Q7T3RoZXIuLi48L0I+PC9MST4KLSAgICA8TEk+d2hpbGUgaG9sZGluZyBkb3duIHRoZSA8Qj5TaGlmdDwvQj4ga2V5LCBzZWxlY3QgPEI+WE1MPC9CPi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5WZXJpZnkgYW5vdGhlciBYTUwgUGVyc3BlY3RpdmUgYnV0dG9uIGFwcGVhcnMgaW4gdGhlIGxlZnRoYW5kIHNpZGUgb2YgdGhlIFdvcmtiZW5jaCB0byByZXByZXNlbnQgdGhpcyBzZWNvbmQgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPk9wZW4gdGhlIHNhbWUgeG1sIGZpbGUgYXMgaW4gdGhlIGZpcnN0IHN0ZXAgYWJvdmUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkgaW4gYm90aCBYTUwgUGVyc3BlY3RpdmVzIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBmaWxlIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZSBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhlICogbmV2ZXIgYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIgb2YgdGhlIHNlY29uZCBwZXJzcGVjdGl2ZSBldmVuIHdoZW4gbWFrZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuIFRhbGsgdG8gRGF2aWQuPC9GT05UPjwvTEk+Ci0gIDxMST5NYWtlIHNvbWUgY2hhbmdlcyB0byB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlc2UgY2hhbmdlcyBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPkNsb3NlIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUgYW5kIHJlc3BvbmQgPEI+WWVzPC9CPiB0byB0aGUgc2F2ZSBjaGFuZ2VzIHByb21wdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9uIGFwcGxpZXMgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlLjwvTEk+Ci08L1VMPgotPFA+PEI+VmFsaWRhdGluZyBhIG5vbiB3ZWxsIGZvcm1lZCBYTUwgRmlsZSAobm8gRFREL1NjaGVtYSk8L0I+PEJSPgotKE5PVEU6IGl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBiZSB0eXBlZCBpbi4gVGhpcyB0ZXN0IGNhc2UgdHJpZXMgdG8gY292ZXIgc29tZSBvZiB0aGUgbW9yZSBjb21tb24gZXJyb3JzIHRoYXQgcmVuZGVyIGFuIFhNTCBmaWxlIGFzIG5vdCBiZWluZyB3ZWxsLWZvcm1lZC4gSXQgaXMgbm90IGludGVuZGVkIHRvIHZlcmlmeSB0aGF0IGFsbCBwb3NzaWJsZSBlcnJvcnMgYXJlIGJlaW5nIGRldGVjdGVkIGFuZCBncmFjZWZ1bGx5IGhhbmRsZWQuICk8L1A+Ci08VUw+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST48TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj48L0xJPgotICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPk5vbldlbGxGb3JtZWQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+PC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICA8TEk+U2VsZWN0IDxCPiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsuPC9CPjwvTEk+Ci0gIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgWE1MIGRlY2xhcmF0aW9uLjwvTEk+Ci0gIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gIDxMST5TZWxlY3QgY29tbWVudC48L0xJPgotICA8TEk+RW1iZWQgbW9yZSB0aGFuIDIgY29uc2VjdXRpdmUgZGFzaGVzIGluIHRoZSBjb21tZW50LiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBtb3JlIHRoYW4gMiBjb25zZWN1dGl2ZSBkYXNoZXMgY2FuIG5vdCBiZSBlbWJlZGRlZCB3aXRoaW4gYSBjb21tZW50KTwvRk9OVD48L0xJPgotICA8TEk+VHlwZSBpbiB0aGUgcmVtYWluaW5nIGxpbmVzIGFzIHNob3duIGJlbG93OiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiNmZjAwMDAiPihJIGNhbid0IHNob3cgdGhlIGxpbmVzIHVudGlsIGRlZmVjdCAxNzc3NTUgaXMgZml4ZWQgLi4uIHVudGlsIHRoZW4sIGhlcmUncyB0aGUgdHlwZSBvZiB0aGluZ3MgdGhhdCBjYXVzZSAKLSAgICAgICAgYSBkb2N1bWVudCB0byBub3QgYmUgd2VsbC1mb3JtZWQpOjwvRk9OVD4KLSAgPFVMPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCBhbmQgZW5kIHRhZyB0aGF0IGRvbid0IG1hdGNoIGluIHRoZWlyIGNhc2Ugc2Vuc2l0aXZpdHkgCi0gICAgICAgIChlLmcuLCAmbHQ7dGFnJmd0OyBhbmQgJmx0Oy9UYWcmZ3Q7KS4gPC9MST4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgYW5kIGVuZCB0YWcgd2hlcmUgdGhlIHN0YXJ0IHRhZyBjb250YWlucyBhbiBhdHRyaWJ1dGUgdmFsdWUgdGhhdCBpcyBub3QgCi0gICAgICAgIGVuY2xvc2VkIGluIHF1b3Rlcy4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiB0aGlzIGlzIHBlcm1pdHRlZCBpbiBIVE1MLCBidXQgbm90IFhNTCk8L0ZPTlQ+PC9MST4KLSAgICA8TEk+Y3JlYXRlIHRhZ3MgdGhhdCBhcmUgbm90IHByb3Blcmx5IG5lc3RlZC4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBhIGNoaWxkIHRhZyBtdXN0IGJlIGNvbXBsZXRlZCBiZWZvcmUgaXRzIHBhcmVudCB0YWcpPC9GT05UPjwvTEk+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IHRhZyB3aXRob3V0IGEgY29ycmVzb25kaW5nIGVuZCB0YWcuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogYWxsIHN0YXJ0IHRhZ3MgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbmQgdGFnIHVubGVzcyB0aGUgCi0gICAgICAgIHRhZyBpcyBhbiBlbXB0eSB0YWcsIGluIHdoaWNoIGNhc2UgdGhlIHNob3J0aGFuZCB2ZXJzaW9uIGNhbiBiZSB1c2VkICgmbHQ7c2hvcnRUYWcvJmd0OykpLjwvRk9OVD48L0xJPgotICAgIDxMST5kbyBub3QgcHJvdmlkZSBhbiBhdHRyaWJ1dGUgdmFsdWUgKD0mcXVvdDt2YWx1ZSZxdW90OykuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogdGhpcyBpcyBwZXJtaXR0ZWQgaW4gSFRNTCBmb3IgdGhvc2UgYXR0cmlidXRlcyB0aGF0IGhhdmUgCi0gICAgICAgIG9ubHkgb25lIHZhbHVlLCBidXQgaXQncyBub3QgdmFsaWQgaW4gWE1MKTwvRk9OVD48L0xJPgotICAgICA8TEk+ZGVmaW5lIGFuIGF0dHJpYnV0ZSBtb3JlIHRoYW4gb25jZSBpbiBhIHN0YXJ0IHRhZy48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5WZXJpZnkgZXJyb3JzIGFyZSBsaXN0ZWQgaW4gdGhlIFRhc2tzIHZpZXcgZm9yIHRoZSBhYm92ZSB2aW9sYXRpb25zIGFuZCB0aGF0IGVycm9yIG1hcmtlcnMgYXBwZWFyIG9uIHRoZSBhcHByb3ByaWF0ZSAKLSAgICAgICAgIGxpbmVzIGluIHRoZSBTb3VyY2UgcGFnZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPkknbSBub3Qgc3VyZSBob3cgdGhlIERlc2lnbiBwYWdlIGhhbmRsZXMgYW55IG9mIHRoZXNlIHZpb2xhdGlvbnMgCi0gICAgICAgICBhbmQgd2hhdCB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3LiBUYWxrIHRvIENyYWlnIGFuZCBEYXZpZC48L0ZPTlQ+PC9MST4KLSAgPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi0KLTxQPjxCPlZhbGlkYXRlIGFuIFhNTCBGaWxlIGJhc2VkIG9uIGEgRFREPC9CPjwvUD4KLTxVTD4KLTxMST5PcGVuIDxCPmZyb21TY3JhdGNoLnhtbDwvQj4uPC9MST4KLTxMST5EZWxldGUgYSBjaGFyYWN0ZXIgZnJvbSBvbmUgb2YgdGhlIHN0YXJ0IHRhZ3MgKG1pc3R5cGluZyBhIHRhZyBpcyBub3QgdW5jb21tb24pLjwvTEk+Ci08TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdCB3aXRoaW4gdGhlIGJhZCB0YWcuIFZlcmlmeSBhIG1lc3NhZ2UgYXBwZWFycyBpbiB0aGUgc3RhdHVzIGFyZWEKLW9mIHRoZSBXb3JrYmVuY2ggaW5kaWNhdGluZyB0aGF0IHRoZSBiYWQgdGFnIGlzIGFuIHVua25vd24gdGFnLjwvTEk+Ci08TEk+U2VsZWN0IHRoZSA8Qj5WYWxpZGF0ZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST4KLTxMST5WZXJpZnkgYW4gZXJyb3IgYXBwZWFycyBpbiB0aGUgVGFza3MgdmlldyBhbmQgYW4gZXJyb3IgbWFya2VyIGFwcGVhcnMgaW4gdGhlIFNvdXJjZSBwYWdlCi10byBmbGFnIHRoZSBpbnZhbGlkIHRhZy48L0xJPgotPExJPlNlbGVjdCA8Qj5FZGl0LT5VbmRvPC9CPiBmcm9tIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotPExJPlZlcmlmeSB0aGUgYmFkIHRhZyBlcnJvciBubyBsb25nZXIgYXBwZWFycyBpbiB0aGUgVGFza3Mgdmlldy48L0xJPgotPExJPlJlbW92ZSB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGZyb20gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBhbiBlcnJvciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3IGluZGljYXRpbmcgdGhhdCB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGlzIG1pc3Npbmc8L0xJPgotPExJPkNsb3NlIHRoZSBmaWxlLCByZXNwb25kaW5nIDxCPlllczwvQj4gdG8gdGhlIHNhdmUgY2hhbmdlcyBwcm9tcHQuPC9MST4KLTxMST5Eb3VibGUtY2xpY2sgb24gdGhlIGVycm9yIGluIHRoZSBUYXNrcyB2aWV3LCBhbmQgdmVyaWZ5IDxCPmZyb21TY3JhdGNoLnhtbDwvQj4gb3BlbnMgdG8gdGhlCi1hcHByb3ByaWF0ZSBsaW5lIGluIHRoZSBTb3VyY2UgcGFnZSBvZiB0aGUgWE1MIEVkaXRvci48L0xJPgotPExJPkhlcmUncyBzb21lIG90aGVyIHZpb2xhdGlvbnMgdGhhdCBjYW4gYmUgYXR0ZW1wdGVkOgotPFVMPgotPExJPlNwZWNpZnkgYSBiYWQgYXR0cmlidXRlLjwvTEk+Ci08TEk+U3BlY2lmeSBhIGJhZCBhdHRyaWJ1dGUgdmFsdWUuPC9MST4KLTxMST5TcGVjaWZ5IGNoaWxkIHRhZ3Mgb3V0IG9mIHNlcXVlbmNpbmcgb3JkZXI8L0xJPgotPExJPlZpb2xhdGUgdGhlIG9jY3VycmVuY2UgaW5kaWNhdG9yIGZvciBhIHRhZyAoZS5nLiwgaWYgdGhlIERURCBzaG93cyA/LCB0aGVuIG9ubHkKLTAgb3IgMSBvY2N1cnJlbmNlcyBvZiB0aGUgdGFnIGlzIHBlcm1pdHRlZCkuCi08L1VMPjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBlcnJvcnMgYXJlIGxpc3RlZCBpbiB0aGUgVGFza3MgdmlldyBmb3IgdGhlIGFib3ZlIHZpb2xhdGlvbnMgYW5kIHRoYXQgZXJyb3IgbWFya2VycyBhcHBlYXIgb24gdGhlIGFwcHJvcHJpYXRlIAotbGluZXMgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SSdtIG5vdCBzdXJlIGhvdyB0aGUgRGVzaWduIHBhZ2UgaGFuZGxlcyBhbnkgb2YgdGhlc2UgdmlvbGF0aW9ucyAKLWFuZCB3aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYW5kIERhdmlkLjwvRk9OVD48L0xJPgotPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi08IS0tICByZW1vdmVkIHNpbmNlIGRvbmUgZWxzZXdoZXJlIGFzIHBhcnQgb2Ygb3RoZXIgc2NlbmVyaW9zCi08UD48Qj5WYWxpZGF0ZSBhbiBYTUwgRmlsZSBiYXNlZCBvbiBhIFNjaGVtYTwvQj48QlI+Ci0tLT4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIFNwZWNpZmljIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxCPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5Tb3VyY2UgU3BlY2lmaWMgdGVzdCBjYXNlcyAob3B0aW9uYWwpPC9GT05UPjwvQj48L0gyPgotPFA+PEI+VXNpbmcgdGhlIEF1dG8gQ29tcGxldGlvbiBDb250ZW50IEFzc2lzdCBQcmVmZXJlbmNlPC9CPjxCUj4KLTxVTD4KLTxMST5PcGVuIGEgYW55IFhNTCBmaWxlIHRoYXQgaGFzIGVub3VnaCB0YWdzIHRvIHByb3ZpZGUgc3ludGF4IGhpZ2h0bGlnaHRpbmcuPC9MST4KLTxMST5XaGlsZSB0aGF0IGZpbGUgaXMgbGVmdCBvcGVuLCBnbyB0byB0aGUgUHJlZmVyZW5jZXMgcGFnZSwgc2VsZWN0Ci1YTUwgRWRpdG9yLCB0aGVuIFNvdXJjZSBTdHlsZXMuIDwvTEk+Ci08TEk+T24gdGhhdCBwYWdlLCB1c2UgdGhlIG1vdXNlIHRvICJzZWxlY3QiIGEgdGFnIG5hbWUuIFRoZSB0YWcgbmFtZSBpcyBub3QgbGl0ZXJhbGx5Ci1zZWxlY3RlZCwgYnV0IHdoZW4geW91IGNsaWNrIG9uIGFuIGVsZW1lbnQgaW4gdGhlIGV4YW1wbGUgdGV4dCwgdGhlIGxpc3QKLWFib3ZlIGl0IHdpbGwgZGlzcGxheSB0aGUgdHlwZSBvZiBlbGVtZW50IGl0IGlzLCBhbmQgd2hhdCBpdHMgY3VycmVudCBjb2xvcnMgYXJlLjwvTEk+Ci08TEk+Rm9yICJ0YWcgbmFtZSIsIHNlbGVjdCB0aGUgYm9sZCBjaGVjayBib3guIFRoZW4gcHJlc3MgQXBwbHksIGFuZCB5b3Ugc2hvdWxkCi1zZWUgdGhlIGNoYW5nZSB0YWtlIGVmZmVjdCBpbiB5b3VyIGFjdGl2ZSBlZGl0b3IuPC9MST4KLTxMST5TZWxlY3QgIkRlZmF1bHRzIiBhbmQgbWFrZSBzdXJlIHRoZSB0YWcgbmFtZXMgYXJlIHNldCBiYWNrIHRvIG5vdCBib2xkLjwvTEk+Ci08L1VMPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPFA+PEI+RG91YmxlLUNsaWNraW5nIFdpdGhpbiB0aGUgU291cmNlPC9CPiA8QlI+Ci0oTk9URTogaWYgeW91IGNvbnRpbnVlIHRvIGRvdWJsZS1jbGljayBhdCBhIGdpdmVuIGN1cnNvciBwb3NpdGlvbiwgdGhlIHNlbGVjdGlvbiBhcmVhIHdpbGwgY29udGludWUgdG8gZXhwYW5kLiBXaGVuIHRoZSBtYXhpbXVtIHJlZ2lvbiBhcmVhIGhhcyBiZWVuIHJlYWNoZWQsIHRoZSBuZXh0IGRvdWJsZS1jbGljayB3aWxsIGNhdXNlIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uIFNvLCB0aGUgc2VsZWN0aW9ucyB3aWxsIHdyYXAvY3ljbGUuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLjwvUD4KLTxVTD4KLSAgPExJPk9wZW4gPEI+Sm9iRGVzYy54bWw8L0I+LjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIHRhZyBjb250ZW50OgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+TWlkZGxld2FyZTwvQj4gb24gbGluZSA3LjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5NaWRkbGV3YXJlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMgYW5kIDxCPkJ1c1R5cGU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ob3Qgc3VyZSB3aGF0IHRoZSBQcm9wZXJ0aWVzIHZpZXcgaXMgc3VwcG9zZWQgdG8gc2hvdy4gSXQgZ29lcyBibGFuay4gU2VlIGRlZmVjdCAxNzc3NTMuIEFsc28sIDxCPk1pZGRsZXdhcmU8L0I+IHdhc24ndCBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYXMgaGFkIGV4cGVjdGVkLiBUaGUgRGVzaWduIHBhZ2Ugb25seSBzZWVtcyB0byBzdGF5IGluIHN5bmMgYXQgdGhlIGVsZW1lbnQvdGFnIGxldmVsIGxpa2UgdGhlIE91dGxpbmUgdmlldy4gVGFsayB0byBDcmFpZyBhYm91dCB0aGlzLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5BcHBsaWNhdGlvbiBhbmQgTWlkZGxld2FyZSBTb2Z0d2FyZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzIGFuZCA8Qj5CdXNUeXBlPC9CPiByZW1haW5zIHRvIGJlIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhIHRhZyBuYW1lOgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+SG93VG9BcHBseTwvQj4gb24gbGluZSA2MS48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlLCBEZXNpZ24gcGFnZSwgYW5kIE91dGxpbmUgdmlldy4gCi0gICAgICAgIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gdGhlIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpIGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UuIDxCPkhvd1RvQXBwbHk8L0I+IHNob3VsZCByZW1haW4gc2VsZWN0ZWQgaW4KLSAgICAgICAgdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIHZpZXcuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGFuIGF0dHJpYnV0ZSBuYW1lOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtFbmQ8L0I+IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmRpc3RyaWJ1dGU8L0I+IG9uIGxpbmUgNjEuIFZlcmlmeSA8Qj5kaXN0cmlidXRlPC9CPiBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgCi0gICAgICAgIHZpZXcuIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gCi0gICAgICAgIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZT0iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+ICAgICAgICAgICAgICAgICAKLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYW4gYXR0cmlidXRlIHZhbHVlOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtIb21lPC9CPiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+U2Nyb2xsIGRvd24gc3VjaCB0aGF0IGxpbmUgNjEgaXMgdmlzaWJsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmludGVybmFsPC9CPiBvbiBsaW5lIDYxLiBWZXJpZnkgPEI+aW50ZXJuYWw8L0I+IGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSAKLSAgICAgICAgdmlldy4gPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiAKLSAgICAgICAgdGhlIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj4iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj5kaXN0cmlidXRlPSJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4gICAgICAgICAgICAgICAgIAotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci08L1VMPgotCi08UD48Qj5Gb3JtYXR0aW5nIGEgRmlsZSBDcmVhdGVkIGJ5IERpZmZlcmVudCBFZGl0b3JzPC9CPjxCUj4KLTx1bD4KLTxsaT4KLUltcG9ydCB0aGUgPGI+Sm9iUG9zdGluZy5kdGQ8L2I+IGFuZCA8Yj5Kb2JEZXNjLnhtbDwvYj48L2xpPgotCi08bGk+Ci1PcGVuIHRoZSBKb2JEZXNjLnhtbC4gQ2hlY2sgdGhlIHNvdXJjZSBmb3IgaW5kZW50YXRpb24gdG8gc2VlIGlmIGl0IHByZXNlcnZlcwotdGhlIHdoaXRlIHNwYWNlIGZyb20gdGhlIG9yaWdpbmFsIGRvY3VtZW50LjwvbGk+Ci0KLTxsaT4KLVRoZSBvcmlnbmFsIGRvY3VtZW50IHVzZXMgc3BhY2VzIGFuZCB0YWJzLCBzbyB0aGUgZm9ybWF0dGluZyB3aWxsIGFwcGVhciBhIGxpdHRsZSB3cm9uZy4KLUJ5IHVzaW5nIHRoZSByaWdodC9sZWZ0IGFycm93cywgdmVyaWZ5IHRoYXQgc29tZSBzcGFjZSBpcyBzcGFjZXMgYW5kIHNvbWUgc3BhY2UKLWlzIHRhYiBjaGFyYWN0ZXJzLjwvbGk+Ci08TEk+VXNlICdmb3JtYXQgZG9jdW1lbnQnIHRvIGJlIHN1cmUgaXQgZm9ybWF0cy4gPC9MST4KLTxMST5UaGUgZGVmYXVsdCBpcyB0byBmb3JtYXQgd2l0aCBzcGFjZXMgLi4uIHZlcmlmeSBvbmx5IHNwYWNlcyByZW1haW4gaW4gZmlsZSwgbm90IHRhYiBjaGFyYWN0ZXMuIAotKEp1c3QgYSBsaXR0bGUgbW92ZW1lbnQgd2l0aCB0aGUgYXJyb3cga2V5cyBzaG91bGQgc3VmZmljZS48L0xJPgotPExJPkdvIHRvIHRoZSBwcmVmZXJlbmNlIHBhZ2UgdG8gY2hhbmdlIHRoZSBmb3JtYXQgc2V0dGluZ3MgZm9yIHRoZSBYTUwgRWRpdG9yCi10byB1c2UgdGhlIHRhYiBjaGFyYWN0ZXIgaW5zdGVhZCBvZiA0IHNwYWNlcy4gV2hpbGUgdGhlcmUsIHZlcmlmeSB0aGF0IHRoZSBkaWFsb2cKLXdpbGwgbm90IGFsbG93IG90aGVyIHZhbHVlcyB0byBiZSBpbnRlcmVkIGV4Y2VwdCAid2hpdGVzcGFjZSIgLi4uJ1x0J3MgYW5kIGJsYW5rcy4KLTwvTEk+Ci08TEk+Rm9ybWF0IHRoZSBkb2N1bWVudCBhZ2FpbiBhbmQgYmUgc3VyZSB0aGlzIHRpbWUgdGFiIGNoYXJhY3RlcnMgd2VyZSB1c2VkLjwvTEk+Ci08L3VsPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXIgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPk90aGVyIHRlc3QgY2FzZXM8L0ZPTlQ+PC9CPjwvSDI+Ci08UD48Qj5Bc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gYSBuZXcgZmlsZSB0eXBlPC9CPjwvUD4KLTxVTD4KLSAgPExJPldpbmRvdy0mZ3Q7UHJlZmVyZW5jZXM8Qj48L0I+LjwvTEk+Ci0gIDxMST5FeHBhbmQgPEI+V29ya2JlbmNoPC9CPi48L0xJPgotICA8TEk+U2VsZWN0IDxCPkZpbGUgRWRpdG9yczwvQj4uPC9MST4KLSAgPExJPlNlbGVjdCB0aGUgPEI+QWRkPC9CPiBidXR0b24gdG8gYWRkIGEgbmV3IGZpbGUgdHlwZS48L0xJPgotICA8TEk+U3BlY2lmeSBhIGZpbGUgdHlwZSBvZiA8Qj4qLnNldDwvQj4gYW5kIHRoZW4gY2xvc2UgdGhlIEFkZCBkaWFsb2cuPC9MST4KLSAgPExJPlZlcmlmeSA8Qj4qLnNldDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIGxpc3Qgb2YgZmlsZSB0eXBlcy48L0xJPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5BZGQ8L0I+IGJ1dHRvbiB0byBhc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gdGhlIG5ldyBmaWxlIHR5cGUuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5YTUwgRWRpdG9yPC9CPiBmcm9tIHRoZSBsaXN0IG9mIGVkaXRvcnMuIFZlcmlmeSBpdCBhcHBlYXJzIHdpdGggaXRzIG93biBzcGVjaWFsIGljb24uIENsb3NlIHRoZSBkaWFsb2cuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5OT1RFOiB3YWl0aW5nIHRvIGhlYXIgYmFjayBmcm9tIE9USSBvbiBob3cgY2FuIHByZXZlbnQgMiBYTUwgRWRpdG9yIGVudHJpZXMgZnJvbSBhcHBlYXJpbmcgaW4gdGhlIGxpc3QuPC9GT05UPjwvTEk+Ci0gIDxMST5WZXJpZnkgPEI+WE1MIEVkaXRvcjwvQj4gYXBwZWFycyBhcyB0aGUgZGVmYXVsdCBlZGl0b3Igbm93IGZvciB0aGUgPEI+Ki5zZXQ8L0I+IGZpbGUgdHlwZS48L0xJPgotICA8TEk+T3BlbiA8Qj5nb3RjaGFUQ0JlYW5zLnNldDwvQj4gZnJvbSB0aGUgTmF2aWdhdG9yIHZpZXcuIFZlcmlmeSBpdCBvcGVucyB0byB0aGUgWE1MIEVkaXRvci48L0xJPgotPC9VTD4KLTxQPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5USEUgRU5EITwvRk9OVD48L1A+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzcyMTEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL011bHRpTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTYiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzBlNGZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vRW5jb2RpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTMwYzlmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI1NGNkZTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9dGV4dC9odG1sOyBjaGFyc2V0PVVURi04PgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktNiI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1MWM4ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzFlYTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLWJpbgotYmluLnByb2plY3QKLWJ1aWxkLnhtbAotaHRtbHVpdGVzdHMuamFyCi10ZW1wLmZvbGRlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlmNDAxZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmRkOGI1Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0jU3VuIEFwciAxNiAxNDozNzoyMSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuY2xlYW5PdXRwdXRGb2xkZXI9Y2xlYW4KLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuZHVwbGljYXRlUmVzb3VyY2VUYXNrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIuaW52YWxpZENsYXNzcGF0aD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmJ1aWxkZXIucmVzb3VyY2VDb3B5RXhjbHVzaW9uRmlsdGVyPSoubGF1bmNoCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jaXJjdWxhckNsYXNzcGF0aD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLmV4Y2x1c2lvblBhdHRlcm5zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5tdWx0aXBsZU91dHB1dExvY2F0aW9ucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLmlubGluZUpzckJ5dGVjb2RlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnRhcmdldFBsYXRmb3JtPTEuMgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi51bnVzZWRMb2NhbD1wcmVzZXJ2ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29tcGxpYW5jZT0xLjQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxpbmVOdW1iZXI9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLmxvY2FsVmFyaWFibGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRlYnVnLnNvdXJjZUZpbGU9Z2VuZXJhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmRvYy5jb21tZW50LnN1cHBvcnQ9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIubWF4UHJvYmxlbVBlclVuaXQ9MTAwCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFubm90YXRpb25TdXBlckludGVyZmFjZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmFzc2VydElkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hdXRvYm94aW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbXB0eVN0YXRlbWVudD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVudW1JZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmllbGRIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsUGFyYW1ldGVyQm91bmQ9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpbmFsbHlCbG9ja05vdENvbXBsZXRpbmdOb3JtYWxseT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5mb3JiaWRkZW5SZWZlcmVuY2U9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaGlkZGVuQ2F0Y2hCbG9jaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGF0aWJsZU5vbkluaGVyaXRlZEludGVyZmFjZU1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluY29tcGxldGVFbnVtU3dpdGNoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmRpcmVjdFN0YXRpY0FjY2Vzcz1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvYz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzRGVwcmVjYXRlZFJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc05vdFZpc2libGVSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubG9jYWxWYXJpYWJsZUhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWV0aG9kV2l0aENvbnN0cnVjdG9yTmFtZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nRGVwcmVjYXRlZEFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHM9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c1Zpc2liaWxpdHk9cHVibGljCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFncz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nT3ZlcnJpZGVBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nU2VyaWFsVmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmMmFjNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5lbmFibGUucHJvamVjdC5yZWZhY3RvcmluZy5oaXN0b3J5PWZhbHNlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjcyNDk1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotI1N1biBBcHIgMTYgMTQ6MDU6MjkgRURUIDIwMDYKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ1MTZjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBodG1sdWl0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLkhUTUxVSVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2UudWkud29ya2JlbmNoLnRleHRlZGl0b3IsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLnVpLnZpZXdzLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBjb20uaWJtLmljdQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5NYXkgMiwgMjAwNjwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIzZjU4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgaHRtbHVpdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sLFwKLSAgICAgICAgICAgICAgIGljb25zLwotamFycy5jb21waWxlLm9yZGVyID0gaHRtbHVpdGVzdHMuamFyCi1zb3VyY2UuaHRtbHVpdGVzdHMuamFyID0gc3JjLwotb3V0cHV0Lmh0bWx1aXRlc3RzLmphciA9IGJpbi8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWViZGI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYzYxODIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gU3RydWN0dXJlZCBTb3VyY2UgRWRpdG9yIGZvciBIVE1MIFRlc3RzCi12aWV3Lm5hbWUuMCA9IEVtYmVkZGVkIEhUTUwgU3RydWN0dXJlZCBUZXh0IFZpZXdlcgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3BsdWdpbi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZjlkY2IzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotCTxleHRlbnNpb24gcG9pbnQ9Im9yZy5lY2xpcHNlLnVpLnZpZXdzIj4KLQkJPHZpZXcKLQkJCW5hbWU9IiV2aWV3Lm5hbWUuMCIKLQkJCWljb249IiRubCQvaWNvbnMvc291cmNlRWRpdG9yLmdpZiIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0SFRNTCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52aWV3ZXIuVmlld2VyVGVzdEhUTUwiPgotCQk8L3ZpZXc+Ci0JPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVByZWZlcmVuY2VzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0hUTUxVSVByZWZlcmVuY2VzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTY2MmFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5pbnRlcm5hbC5IVE1MVUlQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuSFRNTFVJUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUV4Y2VwdGlvbjsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgSFRNTCBTb3VyY2UKLSAqIGVkaXRvciBwcmVmZXJlbmNlcy4gVGVzdHMgaW5jbHVkZSBzZXR0aW5nL2dldHRpbmcgcHJlZmVyZW5jZXMuCi0gKiAKLSAqIE5PVEU6IFRoaXMgdGVzdCBzaG91bGQgYmUgcHJlZm9ybWVkIG9uIGEgY2xlYW4gd29ya3NwYWNlLiBJZiBwZXJmb3JtZWQgb24KLSAqIGFuIGV4aXN0aW5nIHdvcmtzcGFjZSwgdGhpcyB0ZXN0IHdpbGwgbWFuaXB1bGF0ZSBwcmVmZXJlbmNlcyBpbiB0aGUKLSAqIHdvcmtzcGFjZSwgdGhvdWdoIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZXN0b3JlIG9yaWdpbmFsIHZhbHVlcyBhZnRlcgotICogdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIEhUTUxVSVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkiOwotCi0JCS8vIG5lZWQgdG8gc3RhcnQgdXAgYnVuZGxlIGZvciBkZWZhdWx0IHZhbHVlcyB0byBiZSBsb2FkZWQKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShidW5kbGVOYW1lKTsKLQkJdHJ5IHsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkKLQkJCQlidW5kbGUuc3RhcnQoKTsKLQkJCWVsc2UKLQkJCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBjb3VsZCBub3QgZmluZCBidW5kbGU6ICIgKyBidW5kbGVOYW1lKTsKLQkJfSBjYXRjaCAoQnVuZGxlRXhjZXB0aW9uIGUpIHsKLQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIG9mIGV4Y2VwdGlvbiBzdGFydGluZyBidW5kbGU6ICIgKyBidW5kbGVOYW1lICsgIiBleGNlcHRpb246ICIgKyBlKTsKLQkJfQotCi0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBzdHJpbmcKLQotCQlTdHJpbmcgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRTdHJpbmcoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0Tm90U2FtZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiICsgcHJlZktleSwgZGVmYXVsdFZhbHVlLCB2YWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgZGVmYXVsdCB2YWx1ZXMgb2YgcHJlZmVyZW5jZXMuCi0JICogCi0JICogTk9URTogRXhwZWN0ZWQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhcmQtY29kZWQsIHNvIGlmIGRlZmF1bHQgdmFsdWVzIGRvCi0JICogZ2V0IGNoYW5nZWQsIGFzc2VydGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gSFRNTFVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRSwgQm9vbGVhbi50b1N0cmluZyh0cnVlKSk7Ci0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKHN0b3JlLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUsICI8Iik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5LCBTdHJpbmcgZXhwZWN0ZWQpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IHN0b3JlLmdldERlZmF1bHRTdHJpbmcocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiR2V0IGRlZmF1bHQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgcGx1Z2luLmdldFByZWZlcmVuY2VTdG9yZS4gS2V5OiAiICsgcHJlZktleSwgZXhwZWN0ZWQsIGRlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBIVE1MVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCi0JCXBsdWdpblNldFByZWZlcmVuY2VCb29sZWFuKHN0b3JlLCBIVE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFKTsKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhzdG9yZSwgSFRNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0Qm9vbGVhbihwcmVmS2V5KTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gIW9yaWdpbmFsVmFsdWU7Ci0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlib29sZWFuIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5KSB7Ci0JCVN0cmluZyBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlTdHJpbmcgZXhwZWN0ZWRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOyAvLyByYW5kb20KLQkJCQkJCQkJCQkJCQkJCQkJCQkvLyBzdHJpbmcKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCVN0cmluZyBmb3VuZFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0U3VpdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM1MzY5MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLQotCi1wdWJsaWMgY2xhc3MgSFRNTFVJVGVzdFN1aXRlIGV4dGVuZHMganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEhUTUxVSVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBIVE1MVUlUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJIVE1MIFVJIFRlc3RTdWl0ZSIpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVmVyaWZ5RWRpdG9yUGx1Z2luLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShIVE1MVUlQcmVmZXJlbmNlc1Rlc3QuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25IVE1MLmNsYXNzKSk7Ci0JCS8vCQlhZGRUZXN0KG5ldyBTU0VNb2RlbFRlc3RTdWl0ZSgpKTsKLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvSFRNTFVJVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZWNhZWMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9IVE1MVUlUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIEhUTUxVSVRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgSFRNTFVJVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIEhUTUxVSVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzLlNTRUZvckhUTUxUZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSFRNTFVJVGVzdHNQbHVnaW4gZ2V0RGVmYXVsdCgpIHsKLQkJcmV0dXJuIHBsdWdpbjsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgZnJvbSB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqIG9yICdrZXknIGlmIG5vdCBmb3VuZC4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRSZXNvdXJjZVN0cmluZyhTdHJpbmcga2V5KSB7Ci0JCVJlc291cmNlQnVuZGxlIGJ1bmRsZSA9IEhUTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRSZXNvdXJjZUJ1bmRsZSgpOwotCQl0cnkgewotCQkJcmV0dXJuIChidW5kbGUgIT0gbnVsbCkgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXk7Ci0JCX0KLQkJY2F0Y2ggKE1pc3NpbmdSZXNvdXJjZUV4Y2VwdGlvbiBlKSB7Ci0JCQlyZXR1cm4ga2V5OwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgcGx1Z2luJ3MgcmVzb3VyY2UgYnVuZGxlLAotCSAqLwotCXB1YmxpYyBSZXNvdXJjZUJ1bmRsZSBnZXRSZXNvdXJjZUJ1bmRsZSgpIHsKLQkJcmV0dXJuIHJlc291cmNlQnVuZGxlOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1YzUzYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL0xvZ2dlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiBAcGFyYW0gbGV2ZWwgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgT0tfREVCVUcsIElORk9fREVCVUcsIFdBUk5JTkdfREVCVUcsIEVSUk9SX0RFQlVHKQotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgUExVR0lOX0lELCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5IGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRCArIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjMzNzhkNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25IVE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBDb21tb24gUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvY3BsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgSUJNIC0gSW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgIEplbnMgTHVrb3dza2kvSW5ub29wcmFjdCAtIGluaXRpYWwgcmVuYW1pbmcvcmVzdHJ1Y3R1cmluZwotICogCi0gKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JIVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLlN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudmlld3MuY29udGVudG91dGxpbmUuSFRNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLkV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS52aWV3cy5wcm9wZXJ0aWVzLlhNTFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uOwotCi0vKioKLSAqIFRlc3RzIHJldHJpZXZpbmcgZWRpdG9yIGNvbnRyaWJ1dGlvbnMgZm9yIGh0bWwgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvbkhUTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHVibGljIHZvaWQgdGVzdEdldFNvdXJjZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5TT1VSQ0VWSUVXRVJDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwpOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgc291cmNlIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MLCBvLmdldENsYXNzKCksIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50T3V0bGluZVZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0JCU9iamVjdCBvID0gRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5nZXRJbnN0YW5jZSgpLmdldENvbmZpZ3VyYXRpb24oRXh0ZW5kZWRDb25maWd1cmF0aW9uQnVpbGRlci5DT05URU5UT1VUTElORUNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIGNvbnRlbnQgb3V0bGluZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIG8uZ2V0Q2xhc3MoKSwgSFRNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuUFJPUEVSVFlTSEVFVENPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCk7Ci0JCWFzc2VydE5vdE51bGwoIm5vIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9ySFRNTC5Db250ZW50VHlwZUlEX0hUTUwsIG8pOwotCQkvLyBjaGVjayBmb3Igb3Zlci1xdWFsaWZpZWQgc3ViY2xhc3NlcwotCQlhc3NlcnRFcXVhbHMoInVuZXhwZWN0ZWQgcHJvcGVydHkgc2hlZXQgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JIVE1MLkNvbnRlbnRUeXBlSURfSFRNTCwgby5nZXRDbGFzcygpLCBYTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9odG1sL3VpL3Rlc3RzL1ZlcmlmeUVkaXRvclBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2EwYmJmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy9WZXJpZnlFZGl0b3JQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLnVpLmludGVybmFsLkhUTUxVSVBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgVmVyaWZ5RWRpdG9yUGx1Z2luIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkV4aXN0cygpIHsKLQkJLy8gVE9ETzogc2VlIGh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD04MTUyNwotCQlhc3NlcnRUcnVlKHRydWUpOwotCQlQbHVnaW4gcGx1Z2luID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXBsdWdpbiA9IEhUTUxVSVBsdWdpbi5nZXRJbnN0YW5jZSgpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcGx1Z2luID0gbnVsbDsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJlZGl0b3IgcGx1Z2luIGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQiLCBwbHVnaW4pOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvdmlld2VyL1Rlc3RWaWV3ZXJDb25maWd1cmF0aW9uSFRNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTk3MjFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMzggKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dEhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuY29udGVudGFzc2lzdC5JQ29udGVudEFzc2lzdGFudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmZvcm1hdHRlci5JQ29udGVudEZvcm1hdHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rRGV0ZWN0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5pbmZvcm1hdGlvbi5JSW5mb3JtYXRpb25QcmVzZW50ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5yZWNvbmNpbGVyLklSZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uSG92ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuRGlzcGxheTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5odG1sLmNvcmUudGV4dC5JSFRNTFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0gICAgCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MIGZDb25maWcgPSBudWxsOwotCXByaXZhdGUgYm9vbGVhbiBmRGlzcGxheUV4aXN0cyA9IHRydWU7Ci0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotICAgIHB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwoKSB7Ci0gICAgICAgIHN1cGVyKCJUZXN0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwiKTsKLSAgICB9Ci0gICAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJCi0gICAgCXN1cGVyLnNldFVwKCk7Ci0JCWlmKCF0aGlzLmlzU2V0dXApewotCQkJc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0gICAgfQotCQotCXByaXZhdGUgdm9pZCBzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKSB7Ci0KLQkJaWYoRGlzcGxheS5nZXRDdXJyZW50KCkgIT0gbnVsbCkgewotCQkJCi0JCQlTaGVsbCBzaGVsbCA9IG51bGw7Ci0JCQlDb21wb3NpdGUgcGFyZW50ID0gbnVsbDsKLQkJCQotCQkJaWYoUGxhdGZvcm1VSS5pc1dvcmtiZW5jaFJ1bm5pbmcoKSkgewotCQkJCXNoZWxsID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKS5nZXRTaGVsbCgpOwotCQkJfQotCQkJZWxzZSB7CQotCQkJCXNoZWxsID0gbmV3IFNoZWxsKERpc3BsYXkuZ2V0Q3VycmVudCgpKTsKLQkJCX0KLQkJCXBhcmVudCA9IG5ldyBDb21wb3NpdGUoc2hlbGwsIFNXVC5OT05FKTsKLQkJCQotCQkJLy8gZHVtbXkgdmlld2VyCi0JCQlmVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJCWZDb25maWcgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uSFRNTCgpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotICAgIAotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QW5ub3RhdGlvbkhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQW5ub3RhdGlvbkhvdmVyIGhvdmVyID0gZkNvbmZpZy5nZXRBbm5vdGF0aW9uSG92ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkFubm90YXRpb25Ib3ZlciBpcyBudWxsIiwgaG92ZXIpOwotICAgIH0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QXV0b0VkaXRTdHJhdGVnaWVzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQXV0b0VkaXRTdHJhdGVneVtdIHN0cmF0ZWdpZXMgPSBmQ29uZmlnLmdldEF1dG9FZGl0U3RyYXRlZ2llcyhmVmlld2VyLCBJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxUKTsKLQkJYXNzZXJ0Tm90TnVsbChzdHJhdGVnaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGF1dG8gZWRpdCBzdHJhdGVnaWVzIiwgc3RyYXRlZ2llcy5sZW5ndGg+MCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb25maWd1cmVkQ29udGVudFR5cGVzKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb25maWd1cmVkQ29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKGNvbmZpZ3VyZWRDb250ZW50VHlwZXMpOwotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBjb250ZW50IHR5cGVzIiwgY29uZmlndXJlZENvbnRlbnRUeXBlcy5sZW5ndGggPiAxKTsKLQl9Ci0JCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50QXNzaXN0YW50KCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQ29udGVudEFzc2lzdGFudCBjYSA9IGZDb25maWcuZ2V0Q29udGVudEFzc2lzdGFudChmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBhc3Npc3RhbnQiLCBjYSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50Rm9ybWF0dGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJQ29udGVudEZvcm1hdHRlciBjZiA9IGZDb25maWcuZ2V0Q29udGVudEZvcm1hdHRlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgidGhlcmUgaXMgbm8gY29udGVudCBmb3JtYXR0ZXIiLCBjZik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXREb3VibGVDbGlja1N0cmF0ZWd5KCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlJVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3kgc3RyYXRlZ3kgPSBmQ29uZmlnLmdldERvdWJsZUNsaWNrU3RyYXRlZ3koZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHN0cmF0ZWd5ICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgZG91YmxlIGNsaWNrIHN0cmF0ZWdpZXMiLCBmYWxzZSk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRIeXBlcmxpbmtEZXRlY3RvcnMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlIeXBlcmxpbmtEZXRlY3RvcltdIGRldGVjdG9ycyA9IGZDb25maWcuZ2V0SHlwZXJsaW5rRGV0ZWN0b3JzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzLmxlbmd0aCA+IDEpOwotCX0KLQkKLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0SW5kZW50UHJlZml4ZXMoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJU3RyaW5nIHByZWZpeGVzW10gPSBmQ29uZmlnLmdldEluZGVudFByZWZpeGVzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihwcmVmaXhlcyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGluZGVudCBwcmVmaXhlcyIsIGZhbHNlKTsKLQl9Ci0gICAgCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yIGluZm9DcmVhdG9yID0gZkNvbmZpZy5nZXRJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yIGlzIG51bGwiLCBpbmZvQ3JlYXRvcik7Ci0gICAgfQotCQotCS8qKgotCSAqIE5vdCBuZWNlc3NhcnkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlJbmZvcm1hdGlvblByZXNlbnRlciBwcmVzZW50ZXIgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uUHJlc2VudGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJJbmZvcm1hdGlvblByZXNlbnRlciBpcyBudWxsIiwgcHJlc2VudGVyKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldExpbmVTdHlsZVByb3ZpZGVycygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlMaW5lU3R5bGVQcm92aWRlciBwcm92aWRlcnNbXSA9IGZDb25maWcuZ2V0TGluZVN0eWxlUHJvdmlkZXJzKGZWaWV3ZXIsIGNvbnRlbnRUeXBlc1tpXSk7Ci0JCQlpZihwcm92aWRlcnMgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBsaW5lIHN0eWxlIHByb3ZpZGVycyIsIGZhbHNlKTsKLQl9Ci0JCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRSZWNvbmNpbGVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlJUmVjb25jaWxlciByID0gZkNvbmZpZy5nZXRSZWNvbmNpbGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJSZWNvbmNpbGVyIGlzIG51bGwiLCByKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHRIb3ZlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGhvdmVyUGFydGl0aW9ucyA9IG5ldyBTdHJpbmdbXXtJSFRNTFBhcnRpdGlvbnMuSFRNTF9ERUZBVUxULCBJSFRNTFBhcnRpdGlvbnMuU0NSSVBUfTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBob3ZlclBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0SG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldFRleHRIb3ZlcihmVmlld2VyLCBob3ZlclBhcnRpdGlvbnNbaV0sIFNXVC5OT05FKTsKLQkJCWFzc2VydE5vdE51bGwoImhvdmVyIHdhcyBudWxsIGZvciBwYXJ0aXRpb246ICIgKyBob3ZlclBhcnRpdGlvbnNbaV0sIGhvdmVyKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdEhUTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QvaHRtbC91aS90ZXN0cy92aWV3ZXIvVmlld2VyVGVzdEhUTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRiOTg5Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L2h0bWwvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RIVE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQ29udHJpYnV0aW9uTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkpGYWNlUmVzb3VyY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuU2VsZWN0aW9uQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLndpbmRvdy5XaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LlNXVDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuY3VzdG9tLkJ1c3lJbmRpY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmxheW91dC5HcmlkRGF0YTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWRMYXlvdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbnRyb2w7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTGFiZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGFydEluaXRFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5WaWV3UGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnZpZXdzLmNvbnRlbnRvdXRsaW5lLklDb250ZW50T3V0bGluZVBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0Lmh0bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9ySFRNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuaHRtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JbmRleGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotCi1wdWJsaWMgY2xhc3MgVmlld2VyVGVzdEhUTUwgZXh0ZW5kcyBWaWV3UGFydCB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgU1NFX0VESVRPUl9GT05UID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGV4dGZvbnQiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfVklFV0VSX0NPTlRFTlRTID0gIjwhRE9DVFlQRSBIVE1MIFBVQkxJQyBcIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOXCI+XG48SFRNTD5cbgk8SEVBRD5cbgkJPE1FVEEgaHR0cC1lcXVpdj1cIkNvbnRlbnQtVHlwZVwiIGNvbnRlbnQ9XCJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMVwiPlxuCQk8VElUTEU+cGxhY2UgdGl0bGUgaGVyZTwvVElUTEU+XG4JPC9IRUFEPlxuCTxCT0RZPlxuCQlwbGFjZSBjb250ZW50IGhlcmUJXG48c2NyaXB0PlxuXCJ0ZXh0XCI7XG48L1NDUklQVD5cbjwvQk9EWT5cbjwvSFRNTD4iOwotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkVGV4dFZpZXdlciBmU291cmNlVmlld2VyID0gbnVsbDsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIElDb250ZW50T3V0bGluZVBhZ2UgZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbnVsbDsKLQotCS8qKgotCSAqIFNldHMgdGhlIHZpZXdlcidzIGhpZ2hsaWdodGluZyB0ZXh0IHJhbmdlIHRvIHRoZSB0ZXh0IHJhbmdlIGluZGljYXRlZAotCSAqIGJ5IHRoZSBzZWxlY3RlZCBOb2Rlcy4KLQkgKi8KLQlwcm90ZWN0ZWQgY2xhc3MgTm9kZVJhbmdlU2VsZWN0aW9uTGlzdGVuZXIgaW1wbGVtZW50cyBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIHsKLQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChTZWxlY3Rpb25DaGFuZ2VkRXZlbnQgZXZlbnQpIHsKLQkJCWlmICghZXZlbnQuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGV2ZW50LmdldFNlbGVjdGlvbigpIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCQlJU3RydWN0dXJlZFNlbGVjdGlvbiBzZWxlY3Rpb24gPSAoSVN0cnVjdHVyZWRTZWxlY3Rpb24pIGV2ZW50LmdldFNlbGVjdGlvbigpOwotCQkJCUluZGV4ZWRSZWdpb24gc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi5nZXRGaXJzdEVsZW1lbnQoKTsKLQkJCQlJbmRleGVkUmVnaW9uIGVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgc2VsZWN0aW9uLnRvQXJyYXkoKVtzZWxlY3Rpb24uc2l6ZSgpIC0gMV07Ci0KLQkJCQlpZiAoc3RhcnROb2RlIGluc3RhbmNlb2YgQXR0cikKLQkJCQkJc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgc3RhcnROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQlpZiAoZW5kTm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCWVuZE5vZGUgPSAoSW5kZXhlZFJlZ2lvbikgKChBdHRyKSBlbmROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQotCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCWludCBlbmQgPSBlbmROb2RlLmdldEVuZE9mZnNldCgpOwotCi0JCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQlmU291cmNlVmlld2VyLnNldFNlbGVjdGVkUmFuZ2Uoc3RhcnQsIDApOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBjbGFzcyBOdW1iZXJJbnB1dERpYWxvZyBleHRlbmRzIERpYWxvZyB7Ci0JCXB1YmxpYyBOdW1iZXJJbnB1dERpYWxvZyhTaGVsbCBzaGVsbCkgewotCQkJc3VwZXIoc2hlbGwpOwotCQl9Ci0KLQkJcHVibGljIFRleHQgc3RhcnQ7Ci0JCWludCBzdGFydFZhbHVlOwotCQlwdWJsaWMgVGV4dCBsZW5ndGg7Ci0JCWludCBsZW5ndGhWYWx1ZTsKLQotCQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCQlDb21wb3NpdGUgY29udGFpbmVyID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OVUxMKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgdHJ1ZSkpOwotCQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbCgpLmdldFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJTdGFydCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiTGVuZ3RoIik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJc3RhcnQgPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJc3RhcnRWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldE9mZnNldCgpOwotCQkJc3RhcnQuc2V0VGV4dCgiIiArIHN0YXJ0VmFsdWUpOwotCQkJc3RhcnQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxlbmd0aCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlsZW5ndGhWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldExlbmd0aCgpOwotCQkJbGVuZ3RoLnNldFRleHQoIiIgKyBsZW5ndGhWYWx1ZSk7Ci0JCQlsZW5ndGguc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCS8vCQkJc3RhcnQuYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8JCQkJcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLwkJCQkJaWYgKGUud2lkZ2V0ID09IHN0YXJ0KSB7Ci0JCQkvLwkJCQkJCXRyeSB7Ci0JCQkvLwkJCQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8JCQkJCQl9Ci0JCQkvLwkJCQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vCQkJCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJLy8JCQkJCQl9Ci0JCQkvLwkJCQkJfQotCQkJLy8JCQkJfQotCQkJLy8JCQl9KTsKLQkJCS8vCQkJbGVuZ3RoLmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vCQkJCXB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8JCQkJCWlmIChlLndpZGdldCA9PSBsZW5ndGgpIHsKLQkJCS8vCQkJCQkJdHJ5IHsKLQkJCS8vCQkJCQkJCWxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vCQkJCQkJfQotCQkJLy8JCQkJCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkvLwkJCQkJCQlsZW5ndGhWYWx1ZSA9IDA7Ci0JCQkvLwkJCQkJCX0KLQkJCS8vCQkJCQl9Ci0JCQkvLwkJCQl9Ci0JCQkvLwkJCX0pOwotCi0JCQlyZXR1cm4gY29tcG9zaXRlOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5qZmFjZS5kaWFsb2dzLkRpYWxvZyNva1ByZXNzZWQoKQotCQkgKi8KLQkJcHJvdGVjdGVkIHZvaWQgb2tQcmVzc2VkKCkgewotCQkJdHJ5IHsKLQkJCQlzdGFydFZhbHVlID0gSW50ZWdlci5kZWNvZGUoc3RhcnQuZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJfQotCQkJY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJCXN0YXJ0VmFsdWUgPSAwOwotCQkJfQotCQkJdHJ5IHsKLQkJCQlsZW5ndGhWYWx1ZSA9IEludGVnZXIuZGVjb2RlKGxlbmd0aC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJbGVuZ3RoVmFsdWUgPSAwOwotCQkJfQotCQkJc3VwZXIub2tQcmVzc2VkKCk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRBY3Rpb25zKElDb250cmlidXRpb25NYW5hZ2VyIG1ncikgewotCQlpZiAobWdyICE9IG51bGwpIHsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiTmV3IEhUTUwiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCUJ1c3lJbmRpY2F0b3Iuc2hvd1doaWxlKGdldFNpdGUoKS5nZXRTaGVsbCgpLmdldERpc3BsYXkoKSwgbmV3IFJ1bm5hYmxlKCkgewotCQkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQkJCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0JCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJCX0KLQkJCQkJfSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIkNoYW5nZSBWaXNpYmlsaXR5IjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlOdW1iZXJJbnB1dERpYWxvZyBkbGcgPSBuZXcgTnVtYmVySW5wdXREaWFsb2coZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuZ2V0U2hlbGwoKSk7Ci0JCQkJCWludCBwcm9jZWVkID0gZGxnLm9wZW4oKTsKLQkJCQkJaWYgKHByb2NlZWQgPT0gV2luZG93LkNBTkNFTCkKLQkJCQkJCXJldHVybjsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKGRsZy5zdGFydFZhbHVlLCBkbGcubGVuZ3RoVmFsdWUpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTaG93IEFsbCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiQ2hhbmdlIFZpc2liaWxpdHkgaW4gRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciBzb3VyY2VWaWV3ZXIgPSBudWxsOwotCQkJCQlJRWRpdG9yUGFydCBwYXJ0ID0gZ2V0Vmlld1NpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmIChwYXJ0ICE9IG51bGwgJiYgcGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIgPSAoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBwYXJ0KS5nZXRUZXh0Vmlld2VyKCk7Ci0JCQkJCX0KLQkJCQkJaWYgKHNvdXJjZVZpZXdlciAhPSBudWxsKSB7Ci0JCQkJCQlOdW1iZXJJbnB1dERpYWxvZyBkbGcgPSBuZXcgTnVtYmVySW5wdXREaWFsb2coc291cmNlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCQkJCWludCBwcm9jZWVkID0gZGxnLm9wZW4oKTsKLQkJCQkJCWlmIChwcm9jZWVkID09IFdpbmRvdy5DQU5DRUwpCi0JCQkJCQkJcmV0dXJuOwotCQkJCQkJc291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQkJc291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oZGxnLnN0YXJ0VmFsdWUsIGRsZy5sZW5ndGhWYWx1ZSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiU2hvdyBBbGwgaW4gRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciBzb3VyY2VWaWV3ZXIgPSBudWxsOwotCQkJCQlJRWRpdG9yUGFydCBwYXJ0ID0gZ2V0Vmlld1NpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmIChwYXJ0ICE9IG51bGwgJiYgcGFydCBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKSB7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIgPSAoKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBwYXJ0KS5nZXRUZXh0Vmlld2VyKCk7Ci0JCQkJCX0KLQkJCQkJaWYgKHNvdXJjZVZpZXdlciAhPSBudWxsKSB7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCS8vIG5vIGxvbmdlciBhYmxlIHRvIHNldCBpbnB1dCB0byBOVUxMCi0JCQkvLwkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCS8vCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCS8vCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCS8vCQkJCX0KLQkJCS8vCi0JCQkvLwkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJLy8JCQkJCXJldHVybiAiU2V0IElucHV0IHRvIE5VTEwiOwotCQkJLy8JCQkJfQotCQkJLy8JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJLy8JCQkJCXN1cGVyLnJ1bigpOwotCQkJLy8JCQkJCXZpZXdlci5zZXRJbnB1dChudWxsKTsKLQkJCS8vCQkJCX0KLQkJCS8vCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgZnJvbSBBY3RpdmUgRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKHRleHRFZGl0b3IpOwotCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiBBcyBSZWFkT25seSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUoZmFsc2UpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTdG9wIEZvbGxvd2luZyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKTsKLQkJYWRkQWN0aW9ucyhtZ3IpOwotCi0JCS8vIGNyZWF0ZSBzb3VyY2Ugdmlld2VyICYgaXRzIGNvbnRlbnQgdHlwZS1zcGVjaWZpYyB2aWV3ZXIKLQkJLy8gY29uZmlndXJhdGlvbgotCQlmU291cmNlVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25IVE1MKCk7Ci0KLQkJLy8gc2V0IHVwIHRoZSB2aWV3ZXIgd2l0aCBhIGRvY3VtZW50ICYgdmlld2VyIGNvbmZpZwotCQlzZXR1cFZpZXdlckZvck5ldygpOwotCi0JCXNldHVwVmlld2VyUHJlZmVyZW5jZXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2Rpc3Bvc2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIGRpc3Bvc2UoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJZlNvdXJjZVZpZXdlci51bmNvbmZpZ3VyZSgpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjc2V0Rm9jdXMoKQotCSAqLwotCXB1YmxpYyB2b2lkIHNldEZvY3VzKCkgewotCQlpZiAoZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkgIT0gbnVsbCAmJiAhZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuaXNEaXNwb3NlZCgpKQotCQkJZlNvdXJjZVZpZXdlci5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci0KLQkvKioKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCNpbml0KElWaWV3U2l0ZSwgSU1lbWVudG8pCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSwgSU1lbWVudG8gbWVtZW50bykgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc3VwZXIuaW5pdChzaXRlLCBtZW1lbnRvKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGFueSBhZGRpdGlvbmFsIHByZWZlcmVuY2VzIGl0IHNob3VsZCBoYXZlIEV4OgotCSAqIGZvbnQsIHRhYiB3aWR0aAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlclByZWZlcmVuY2VzKCkgewotCQlmU291cmNlVmlld2VyLmdldFRleHRXaWRnZXQoKS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnQoU1NFX0VESVRPUl9GT05UKSk7Ci0JfQotCi0JLyoqCi0JICogU2V0IHVwIHNvdXJjZSB2aWV3ZXIgd2l0aCBhIG5ldyBkb2N1bWVudCAmIGNvbmZpZ3VyZSBpdAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlckZvck5ldygpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOyAvLyBpZiB3YXMgZm9sbG93aW5nIHNlbGVjdGlvbiwgc3RvcAotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSURvY3VtZW50IGRvYyA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoQ29udGVudFR5cGVJZEZvckhUTUwuQ29udGVudFR5cGVJRF9IVE1MKTsKLQkJZG9jLnNldChERUZBVUxUX1ZJRVdFUl9DT05URU5UUyk7Ci0KLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCQkvLyBuZWVkIHRvIHJlY29uZmlndXJlIGFmdGVyIHNldCBkb2N1bWVudCBqdXN0IHNvIGhpZ2hsaWdodGVyIHdvcmtzCi0JCWZTb3VyY2VWaWV3ZXIuY29uZmlndXJlKGZDb25maWcpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIGN1cnJlbnQgYWN0aXZlIHRleHQgZWRpdG9yIGlmIHBvc3NpYmxlCi0JICogCi0JICogQHJldHVybiBJVGV4dEVkaXRvcgotCSAqLwotCXByaXZhdGUgSVRleHRFZGl0b3IgZ2V0QWN0aXZlRWRpdG9yKCkgewotCQlJVGV4dEVkaXRvciBlZGl0b3IgPSBudWxsOwotCQlJRWRpdG9yUGFydCBlZGl0b3JQYXJ0ID0gZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJaWYgKGVkaXRvclBhcnQgaW5zdGFuY2VvZiBJVGV4dEVkaXRvcikKLQkJCWVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yUGFydDsKLQkJaWYgKGVkaXRvciA9PSBudWxsICYmIGVkaXRvclBhcnQgIT0gbnVsbCkKLQkJCWVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yUGFydC5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJcmV0dXJuIGVkaXRvcjsKLQl9Ci0KLQkvKioKLQkgKiBTZXRzIHVwIHRoZSB2aWV3ZXIgd2l0aCB0aGUgc2FtZSBkb2N1bWVudC9pbnB1dCBhcyB0aGUgZ2l2ZW4gZWRpdG9yCi0JICogCi0JICogQHBhcmFtIElUZXh0RWRpdG9yCi0JICogICAgICAgICAgICBlZGl0b3IgLSB0aGUgZWRpdG9yIHRvIHVzZSAqY2Fubm90IHRvIGJlIG51bGwqCi0JICovCi0JcHJpdmF0ZSB2b2lkIHNldHVwVmlld2VyRm9yRWRpdG9yKElUZXh0RWRpdG9yIGVkaXRvcikgewotCQlzdG9wRm9sbG93U2VsZWN0aW9uKCk7IC8vIGlmIHdhcyBmb2xsb3dpbmcgc2VsZWN0aW9uLCBzdG9wCi0JCUlEb2N1bWVudCBkb2MgPSBlZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldERvY3VtZW50KGVkaXRvci5nZXRFZGl0b3JJbnB1dCgpKTsKLQkJZlNvdXJjZVZpZXdlci5zZXREb2N1bWVudChkb2MpOwotCi0JCS8vIG5lZWQgdG8gcmVjb25maWd1cmUgYWZ0ZXIgc2V0IGRvY3VtZW50IGp1c3Qgc28gaGlnaGxpZ2h0ZXIgd29ya3MKLQkJZlNvdXJjZVZpZXdlci5jb25maWd1cmUobmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbkhUTUwoKSk7Ci0JfQotCi0JLyoqCi0JICogSG9va3MgdXAgdGhlIHZpZXdlciB0byBmb2xsb3cgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBhY3RpdmUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIGZvbGxvd1NlbGVjdGlvbigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3IgIT0gbnVsbCkgewotCQkJc2V0dXBWaWV3ZXJGb3JFZGl0b3IoZWRpdG9yKTsKLQkJCWlmIChmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9PSBudWxsKQotCQkJCWZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbmV3IE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0KLQkJCWZDb250ZW50T3V0bGluZVBhZ2UgPSAoKElDb250ZW50T3V0bGluZVBhZ2UpIGVkaXRvci5nZXRBZGFwdGVyKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKTsKLQkJCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCQlmQ29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0KLQkJCQlpZiAoIWZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCi0JCQkJCU9iamVjdFtdIG5vZGVzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSkudG9BcnJheSgpOwotCQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1swXTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdOwotCi0JCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgc3RhcnROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBDZWFzZSBmb2xsb3dpbmcgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBlZGl0b3IKLQkgKi8KLQlwcml2YXRlIHZvaWQgc3RvcEZvbGxvd1NlbGVjdGlvbigpIHsKLQkJaWYgKGZDb250ZW50T3V0bGluZVBhZ2UgIT0gbnVsbCkgewotCQkJZkNvbnRlbnRPdXRsaW5lUGFnZS5yZW1vdmVTZWxlY3Rpb25DaGFuZ2VkTGlzdGVuZXIoZkhpZ2hsaWdodFJhbmdlTGlzdGVuZXIpOwotCQkJZlNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UgPSBudWxsOwotCQl9Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0Lmh0bWwudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJhNmFjMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5odG1sLnVpLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QuaHRtbC51aS50ZXN0cy5IVE1MVUlUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ4YmFmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZGQzNzBhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXNzZW1vZGVsdGVzdHMuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNzNmZjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2JhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNTIyYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVlYjMwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMiArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBzc2Vtb2RlbHRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLlNTRU1vZGVsVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuYWRhcHRkb20sCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmRvY3VtZW50LAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV4YW1wbGVzLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5saWZlLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy50aHJlYWRpbmcKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gY29tLmlibS5pY3UKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9hYm91dC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMC8vRU4iPgotPEhUTUw+Ci0KLTxoZWFkPgotPHRpdGxlPkFib3V0PC90aXRsZT4KLTxtZXRhIGh0dHAtZXF1aXY9Q29udGVudC1UeXBlIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KLTwvaGVhZD4KLQotPEJPRFkgbGFuZz0iRU4tVVMiPgotCi08SDM+QWJvdXQgVGhpcyBDb250ZW50PC9IMz4KLQotPFA+TWF5IDIsIDIwMDY8L1A+Ci0KLTxIMz5MaWNlbnNlPC9IMz4KLQotPFA+VGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYWtlcyBhdmFpbGFibGUgYWxsIGNvbnRlbnQgaW4gdGhpcyBwbHVnLWluIAotKCJDb250ZW50IikuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgQ29udGVudCBpcyBwcm92aWRlZCB0byB5b3UgCi11bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCi0oIkVQTCIpLiBBIGNvcHkgb2YgdGhlIEVQTCBpcyBhdmFpbGFibGUgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocCI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwPC9BPi4gCi1Gb3IgcHVycG9zZXMgb2YgdGhlIEVQTCwgIlByb2dyYW0iIHdpbGwgbWVhbiB0aGUgQ29udGVudC48L1A+Ci0KLTxQPklmIHlvdSBkaWQgbm90IHJlY2VpdmUgdGhpcyBDb250ZW50IGRpcmVjdGx5IGZyb20gdGhlIEVjbGlwc2UgRm91bmRhdGlvbiwgdGhlIAotQ29udGVudCBpcyBiZWluZyByZWRpc3RyaWJ1dGVkIGJ5IGFub3RoZXIgcGFydHkgKCJSZWRpc3RyaWJ1dG9yIikgYW5kIGRpZmZlcmVudCAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG1heSBhcHBseSB0byB5b3VyIHVzZSBvZiBhbnkgb2JqZWN0IGNvZGUgaW4gdGhlIENvbnRlbnQuIAotQ2hlY2sgdGhlIFJlZGlzdHJpYnV0b3KScyBsaWNlbnNlIHRoYXQgd2FzIHByb3ZpZGVkIHdpdGggdGhlIENvbnRlbnQuIElmIG5vIHN1Y2ggCi1saWNlbnNlIGV4aXN0cywgY29udGFjdCB0aGUgUmVkaXN0cmlidXRvci4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSAKLXRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFUEwgc3RpbGwgYXBwbHkgdG8gYW55IHNvdXJjZSBjb2RlIGluIHRoZSBDb250ZW50IAotYW5kIHN1Y2ggc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnLyI+aHR0cDovL3d3dy5lY2xpcHNlLm9yZy88L0E+LjwvUD4KLQotPC9CT0RZPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdjZDQ4Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvYnVpbGQucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotIyBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0jIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotIyB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotIyBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotIyAKLSMgQ29udHJpYnV0b3JzOgotIyAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1iaW4uaW5jbHVkZXMgPSBzc2Vtb2RlbHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc291cmNlLnNzZW1vZGVsdGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnNzZW1vZGVsdGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTgyN2RjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cwotQnVuZGxlLVZlbmRvci4wID0gRWNsaXBzZS5vcmcKLUJ1bmRsZS1OYW1lLjAgPSBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvRXhpc3RlbmNlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTljY2RjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL0V4aXN0ZW5jZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzOwotCi0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuU1NFQ29yZVBsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgRXhpc3RlbmNlVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5FeGlzdHMoKXsKLQkJYXNzZXJ0Tm90TnVsbChTU0VDb3JlUGx1Z2luLmdldERlZmF1bHQoKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGZmMzIxMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0czsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnV0aWwuU3RyaW5nVG9rZW5pemVyOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLQotLyoqCi0gKiBTbWFsbCBjb252ZW5pZW5jZSBjbGFzcyB0byBsb2cgbWVzc2FnZXMgdG8gcGx1Z2luJ3MgbG9nIGZpbGUgYW5kIGFsc28sIGlmIGRlc2lyZWQsCi0gKiB0aGUgY29uc29sZS4gVGhpcyBjbGFzcyBzaG91bGQgb25seSBiZSB1c2VkIGJ5IGNsYXNzZXMgaW4gdGhpcyBwbHVnaW4uIE90aGVyCi0gKiBwbHVnaW5zIHNob3VsZCBtYWtlIHRoZWlyIG93biBjb3B5LCB3aXRoIGFwcHJvcHJpYXRlIElELgotICovCi1wdWJsaWMgY2xhc3MgTG9nZ2VyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cyI7IC8vJE5PTi1OTFMtMSQKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0VGSUxURVJfTE9DQVRJT04gPSAiL2RlYnVnL3RyYWNlZmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0sgPSBJU3RhdHVzLk9LOyAvLyAwCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GTyA9IElTdGF0dXMuSU5GTzsgLy8gMQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSBJU3RhdHVzLldBUk5JTkc7IC8vIDIKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IElTdGF0dXMuRVJST1I7IC8vIDQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0RFQlVHID0gMjAwICsgT0s7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT19ERUJVRyA9IDIwMCArIElORk87Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklOR19ERUJVRyA9IDIwMCArIFdBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfREVCVUcgPSAyMDAgKyBFUlJPUjsKLQotCS8qKgotCSAqIEFkZHMgbWVzc2FnZSB0byBsb2cuCi0JICogQHBhcmFtIGxldmVsIHNldmVyaXR5IGxldmVsIG9mIHRoZSBtZXNzYWdlIChPSywgSU5GTywgV0FSTklORywgRVJST1IsIE9LX0RFQlVHLCBJTkZPX0RFQlVHLCBXQVJOSU5HX0RFQlVHLCBFUlJPUl9ERUJVRykKLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIGFkZCB0byB0aGUgbG9nCi0JICogQHBhcmFtIGV4Y2VwdGlvbiBleGNlcHRpb24gdGhyb3duCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF9sb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAobGV2ZWwgPT0gT0tfREVCVUcgfHwgbGV2ZWwgPT0gSU5GT19ERUJVRyB8fCBsZXZlbCA9PSBXQVJOSU5HX0RFQlVHIHx8IGxldmVsID09IEVSUk9SX0RFQlVHKSB7Ci0JCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW50IHNldmVyaXR5ID0gSVN0YXR1cy5PSzsKLQkJc3dpdGNoIChsZXZlbCkgewotCQkJY2FzZSBJTkZPX0RFQlVHIDoKLQkJCWNhc2UgSU5GTyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLklORk87Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFdBUk5JTkdfREVCVUcgOgotCQkJY2FzZSBXQVJOSU5HIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuV0FSTklORzsKLQkJCQlicmVhazsKLQkJCWNhc2UgRVJST1JfREVCVUcgOgotCQkJY2FzZSBFUlJPUiA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLkVSUk9SOwotCQl9Ci0JCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoc2V2ZXJpdHksIFBMVUdJTl9JRCwgc2V2ZXJpdHksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuIHRydWUgaWYgdGhlIHBsYXRmb3JtIGlzIGRlYnVnZ2luZwotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc0RlYnVnZ2luZygpIHsKLQkJcmV0dXJuIFBsYXRmb3JtLmluRGVidWdNb2RlKCk7Ci0JfQotCi0JLyoqCi0JICogRGV0ZXJtaW5lcyBpZiBjdXJyZW50bHkgdHJhY2luZyBhIGNhdGVnb3J5Ci0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogQHJldHVybiB0cnVlIGlmIHRyYWNpbmcgY2F0ZWdvcnksIGZhbHNlIG90aGVyd2lzZQotCSAqLwotCXB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc1RyYWNpbmcoU3RyaW5nIGNhdGVnb3J5KSB7Ci0JCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCXJldHVybiBmYWxzZTsKLQotCQlTdHJpbmcgdHJhY2VGaWx0ZXIgPSBQbGF0Zm9ybS5nZXREZWJ1Z09wdGlvbihQTFVHSU5fSUQgKyBUUkFDRUZJTFRFUl9MT0NBVElPTik7Ci0JCWlmICh0cmFjZUZpbHRlciAhPSBudWxsKSB7Ci0JCQlTdHJpbmdUb2tlbml6ZXIgdG9rZW5pemVyID0gbmV3IFN0cmluZ1Rva2VuaXplcih0cmFjZUZpbHRlciwgIiwiKTsgLy8kTk9OLU5MUy0xJAotCQkJd2hpbGUgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQlTdHJpbmcgY2F0ID0gdG9rZW5pemVyLm5leHRUb2tlbigpLnRyaW0oKTsKLQkJCQlpZiAoY2F0ZWdvcnkuZXF1YWxzKGNhdCkpIHsKLQkJCQkJcmV0dXJuIHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKEVSUk9SLCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSkgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvU1NFTW9kZWxUZXN0U3VpdGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQzY2I0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHMuVGVzdE5ld0RvY3VtZW50RXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0Tm9DaGFuZ2VFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzLlRlc3RSZWdpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmV2ZW50cy5UZXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQ7Ci0KLQotcHVibGljIGNsYXNzIFNTRU1vZGVsVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQotCS8qKgotCSAqIHRvIGdldCBwaWNrZWQgdXAgYnkgQlZUCi0JICogCi0JICogQHJldHVybgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBTU0VNb2RlbFRlc3RTdWl0ZSgpOwotCX0KLQotCS8vIG5vdCByZWFkeSBmb3IgdGhyZWFkZWQgdGVzdHMsIHlldC4KLQkvLyBwcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcKLQkvLyBDbGFzc1tde1Rlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQuY2xhc3MsCi0JLy8gVGVzdE9mVGhyZWFkTG9jYWxXaXRoQ2hhbmdlcy5jbGFzcywgVGVzdENyZWF0aW9uLmNsYXNzfTsKLQotCS8vIHByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RDcmVhdGlvbi5jbGFzcywKLQkvLyBUZXN0RG9jdW1lbnRSZWFkZXIuY2xhc3N9OwotCS8vIHByaXZhdGUgc3RhdGljIENsYXNzW10gY2xhc3NlcyA9IG5ldyBDbGFzc1tde1Rlc3RDcmVhdGlvbi5jbGFzcywKLQkvLyBUZXN0RG9jdW1lbnRSZWFkZXIuY2xhc3MsIFRlc3RDaGFyU2VxdWVuY2VSZWFkZXIuY2xhc3MsCi0JLy8gVGVzdFJlZ2lvbk1hdGNoZXMuY2xhc3N9OwotCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117RXhpc3RlbmNlVGVzdC5jbGFzcywgVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50LmNsYXNzLCBUZXN0QWJvdXRUb0JlQ2hhbmdlZEV2ZW50LmNsYXNzLCBUZXN0TmV3RG9jdW1lbnRFdmVudC5jbGFzcywgVGVzdE5vQ2hhbmdlRXZlbnQuY2xhc3MsIFRlc3RSZWdpb25DaGFuZ2VkRXZlbnQuY2xhc3MsVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmNsYXNzLFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5jbGFzc307Ci0KLQlwdWJsaWMgU1NFTW9kZWxUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJTU0UgTW9kZWwgQmFzaWMgVGVzdCBTdWl0ZSIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHsKLQkJCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShjbGFzc2VzW2ldLCBjbGFzc2VzW2ldLmdldE5hbWUoKSkpOwotCQl9Ci0JfQotCi0JcHVibGljIFNTRU1vZGVsVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzLCBTdHJpbmcgbmFtZSkgewotCQlzdXBlcih0aGVDbGFzcywgbmFtZSk7Ci0JfQotCi0JcHVibGljIFNTRU1vZGVsVGVzdFN1aXRlKENsYXNzIHRoZUNsYXNzKSB7Ci0JCXN1cGVyKHRoZUNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgU1NFTW9kZWxUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1NTRU1vZGVsVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmJkNjcwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9TU0VNb2RlbFRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFNTRU1vZGVsVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBTU0VNb2RlbFRlc3RzUGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCi0JLyoqCi0JICogVGhlIGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBTU0VNb2RlbFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5UZXN0c1BsdWdpblJlc291cmNlcyIpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24geCkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBudWxsOwotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU1NFTW9kZWxUZXN0c1BsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHdvcmtzcGFjZSBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIElXb3Jrc3BhY2UgZ2V0V29ya3NwYWNlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gU1NFTW9kZWxUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwgPyBidW5kbGUuZ2V0U3RyaW5nKGtleSkgOiBrZXkpOwotCQl9Ci0JCWNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL1Rlc3RBYnN0cmFjdEFkYXB0ZXJGYWN0b3J5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlOTQyZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLkFic3RyYWN0QWRhcHRlckZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLQotLyoqCi0gKiAKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0QWJzdHJhY3RBZGFwdGVyRmFjdG9yeSBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIEFic3RyYWN0QWRhcHRlckZhY3RvcnkgZkZhY3RvcnkgPSBudWxsOwotCQotCWNsYXNzIE15Q2xhc3MgaW1wbGVtZW50cyBJTm9kZUFkYXB0ZXIgewotCQlwdWJsaWMgYm9vbGVhbiBpc0FkYXB0ZXJGb3JUeXBlKE9iamVjdCB0eXBlKSB7Ci0JCQlyZXR1cm4gdHlwZSBpbnN0YW5jZW9mIE15Q2xhc3M7Ci0JCX0KLQkJcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLGludCBldmVudFR5cGUsT2JqZWN0IGNoYW5nZWRGZWF0dXJlLE9iamVjdCBvbGRWYWx1ZSxPYmplY3QgbmV3VmFsdWUsaW50IHBvcykgewotCQkJLy8gbm9vcAotCQl9Ci0JfQotCQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCXNldFVwQWRhcHRlckZhY3RvcnkoKTsKLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFVwQWRhcHRlckZhY3RvcnkoKSB7Ci0JCWZGYWN0b3J5ID0gbmV3IEFic3RyYWN0QWRhcHRlckZhY3RvcnkoVGVzdEFic3RyYWN0QWRhcHRlckZhY3RvcnkuTXlDbGFzcy5jbGFzcywgZmFsc2UpIHsKLQkJCXByb3RlY3RlZCBJTm9kZUFkYXB0ZXIgY3JlYXRlQWRhcHRlcihJTm9kZU5vdGlmaWVyIHRhcmdldCkgewotCQkJCXJldHVybiBuZXcgTXlDbGFzcygpOwotCQkJfQotCQl9OwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0QWRhcHQoKSB7Ci0JCWZGYWN0b3J5LmFkYXB0KG51bGwpOwotCX0KLQkKLS8vCXB1YmxpYyB2b2lkIHRlc3RBZGFwdE5ldygpIHsKLS8vCQlmRmFjdG9yeS5hZGFwdE5ldyhudWxsKTsKLS8vCX0KLQkKLS8vCXB1YmxpYyB2b2lkIHRlc3RDb3B5KCkgewotLy8JCUFkYXB0ZXJGYWN0b3J5IGYgPSBmRmFjdG9yeS5jb3B5KCk7Ci0vLwkJYXNzZXJ0Tm90TnVsbChmKTsKLS8vCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlKCkgewotCQkvLyBUT0RPOiBjcmVhdGUgdW5pdCB0ZXN0Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRmFjdG9yeVRlc3RPbmx5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRmFjdG9yeVRlc3RPbmx5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YzM5OTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZhY3RvcnlUZXN0T25seS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tOwotCi1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyRmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcudzNjLmRvbS5BdHRyOwotaW1wb3J0IG9yZy53M2MuZG9tLkRvY3VtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLkVsZW1lbnQ7Ci0KLQotLyoqCi0gKiBUaGlzIGNsYXNzIGV4aXN0cyBvbmx5IHRvIHNhdGlzZnkgc29tZSBvZiB0aGUgdW5pdCB0ZXN0cy4KLSAqIAotICogVG8gdGVzdCwgdXNlIGZvbGxvd2luZyBsaW5lIGluIGNsaWVudCwgc3VjaCBhcyB3aGVuIGl0IGludGl0aWFsaXplZC4KLSAqIEZhY3RvcnlSZWdpc3RyeS5nZXRGYWN0b3J5UmVnaXN0cnkoKS5hZGRGYWN0b3J5KG5ldwotICogQWRhcHRlckZhY3RvcnlUZXN0T25seSgpKTsKLSAqIAotICogQ3JlYXRpb24gZGF0ZTogKDExLzE0LzAwIDc6MDg6MTggUE0pCi0gKiAKLSAqIEBhdXRob3I6IERhdmlkIFdpbGxpYW1zCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyRmFjdG9yeVRlc3RPbmx5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyRmFjdG9yeSB7Ci0JLy8gVGhpcyBmYWN0b3J5IGRlYWxzIHdpdGggdGhyZWUgYWRhcHRlcnMKLQlqYXZhLnV0aWwuTGlzdCBhZGFwdGVycyA9IG5ldyBqYXZhLnV0aWwuQXJyYXlMaXN0KCk7Ci0KLQkvKioKLQkgKiBDQUFkYXB0ZXJGYWN0b3J5IGNvbnN0cnVjdG9yLgotCSAqLwotCXB1YmxpYyBBZGFwdGVyRmFjdG9yeVRlc3RPbmx5KCkgewotCQlzdXBlcigpOwotCQlhZGFwdGVycy5hZGQobmV3IEFkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5KCkpOwotCQlhZGFwdGVycy5hZGQobmV3IEFkYXB0ZXJGb3JFbGVtZW50VGVzdE9ubHkoKSk7Ci0JCWFkYXB0ZXJzLmFkZChuZXcgQWRhcHRlckZvckF0dHJUZXN0T25seSgpKTsKLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgdGhhdCByZXR1cm5zIHRoZSBhZGFwdGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGhpcyBmYWN0b3J5IGFuZAotCSAqIHRoZSBnaXZlbiBvYmplY3QsIGFuZCAic2V0cyB1cCIgdGhlIGFkYXB0YWJsZSBvYmplY3QgdG8gdXNlIHRoZQotCSAqIGFkYXB0ZXIuCi0JICogCi0JICogVGhlIGFkYXB0ZXIgbWF5IGJlIGEgc2luZ2xldG9uIG9yIG5vdCAuLi4gZGVwZW5kaW5nIG9uIHRoZSBuZWVkcyBvZiB0aGUKLQkgKiBJTm9kZUFkYXB0ZXIgLi4uIGJ1dCBpbiBnZW5lcmFsIGl0IGlzIHJlY29tbWVuZGVkIGZvciBhbiBhZGFwdGVyIHRvIGJlCi0JICogc3RhdGVsZXNzLCBzbyB0aGUgZWZmaWNpZW5jaWVzIG9mIGEgc2luZ2xldG9uIGNhbiBiZSBnYWluZWQuCi0JICogCi0JICogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHNob3VsZCBjYWxsIGFkZEFkYXB0ZXIgb24gdGhlIGFkYXB0ZWQKLQkgKiBvYmplY3Qgd2l0aCB0aGUgY29ycmVjdCBpbnN0YW5jZSBvZiB0aGUgYWRhcHRlci4KLQkgKi8KLQlwdWJsaWMgSU5vZGVBZGFwdGVyIGFkYXB0KElOb2RlTm90aWZpZXIgdGFyZ2V0KSB7Ci0JCS8vIG9iamVjdC5hZGRBZGFwdGVyKGFkYXB0ZXJJbnN0YW5jZSk7Ci0JCS8vIHJldHVybiBhZGFwdGVySW5zdGFuY2U7Ci0JCUlOb2RlQWRhcHRlciByZXN1bHQgPSBudWxsOwotCi0JCUl0ZXJhdG9yIGFkYXB0ZXJzTGlzdCA9IGFkYXB0ZXJzLml0ZXJhdG9yKCk7Ci0JCXdoaWxlIChhZGFwdGVyc0xpc3QuaGFzTmV4dCgpKSB7Ci0JCQlJTm9kZUFkYXB0ZXIgYWRhcHRlciA9IChJTm9kZUFkYXB0ZXIpIGFkYXB0ZXJzTGlzdC5uZXh0KCk7Ci0JCQlpZiAoYWRhcHRlci5pc0FkYXB0ZXJGb3JUeXBlKHRhcmdldCkpIHsKLQkJCQlJTm9kZUFkYXB0ZXIgZXhpc3RpbmdBZGFwdGVyID0gdGFyZ2V0LmdldEV4aXN0aW5nQWRhcHRlcihhZGFwdGVyKTsKLQkJCQlpZiAoZXhpc3RpbmdBZGFwdGVyID09IG51bGwpIHsKLQkJCQkJdGFyZ2V0LmFkZEFkYXB0ZXIoYWRhcHRlcik7Ci0JCQkJCXJlc3VsdCA9IGFkYXB0ZXI7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQotCX0KLQotCS8qKgotCSAqIGlzRmFjdG9yeUZvclR5cGUgbWV0aG9kIGNvbW1lbnQuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNGYWN0b3J5Rm9yVHlwZShqYXZhLmxhbmcuT2JqZWN0IHR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQotCQkvLyBmb3Igbm93LCBvbmUgYWRhcHRlciBmb3IgZG9jdW1lbnRzLCBlbGVtZW50cywgYW5kIGF0dHIuCi0JCS8vCi0JCWlmICh0eXBlIGluc3RhbmNlb2YgRG9jdW1lbnQpIHsKLQkJCXJlc3VsdCA9IHRydWU7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlpZiAodHlwZSBpbnN0YW5jZW9mIEVsZW1lbnQpIHsKLQkJCQlyZXN1bHQgPSB0cnVlOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBBdHRyKSB7Ci0JCQkJCXJlc3VsdCA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCByZWxlYXNlKCkgewotCQkvLyBUT0RPOiBjcmVhdGUgdW5pdCB0ZXN0Ci0KLQl9Ci0KLQlwdWJsaWMgSU5vZGVBZGFwdGVyRmFjdG9yeSBjb3B5KCkgewotCQlyZXR1cm4gbmV3IEFkYXB0ZXJGYWN0b3J5VGVzdE9ubHkoKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yQXR0clRlc3RPbmx5LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9hZGFwdGRvbS9BZGFwdGVyRm9yQXR0clRlc3RPbmx5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NmI4NGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckF0dHJUZXN0T25seS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuYWRhcHRkb207Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVBZGFwdGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTm9kZU5vdGlmaWVyOwotaW1wb3J0IG9yZy53M2MuZG9tLkF0dHI7Ci0KLQotLyoqCi0gKiBJbnNlcnQgdGhlIHR5cGUncyBkZXNjcmlwdGlvbiBoZXJlLiBDcmVhdGlvbiBkYXRlOiAoMS85LzAxIDM6Mzc6MDEgUE0pCi0gKiAKLSAqIEBhdXRob3I6IERhdmlkIFdpbGxpYW1zCi0gKi8KLXB1YmxpYyBjbGFzcyBBZGFwdGVyRm9yQXR0clRlc3RPbmx5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyIHsKLQkvKioKLQkgKiBDQUFkYXB0ZXJUZXN0T25seSBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBBZGFwdGVyRm9yQXR0clRlc3RPbmx5KCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qKgotCSAqIEFsbG93aW5nIHRoZSBJTm9kZUFkYXB0ZXIgdG8gY29tcGFyZSBpdHNlbGYgYWdhaW5zdCB0aGUgdHlwZSBhbGxvd3MgaXQKLQkgKiB0byByZXR1cm4gdHJ1ZSBpbiBtb3JlIHRoYW4gb25lIGNhc2UuCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNBZGFwdGVyRm9yVHlwZShPYmplY3QgdHlwZSkgewotCQlib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotCQlpZiAodHlwZSBpbnN0YW5jZW9mIEF0dHIpIHsKLQkJCXJlc3VsdCA9IHRydWU7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKi8KLQlwdWJsaWMgdm9pZCBub3RpZnlDaGFuZ2VkKElOb2RlTm90aWZpZXIgbm90aWZpZXIsIGludCBldmVudFR5cGUsIE9iamVjdCBjaGFuZ2VkRmVhdHVyZSwgT2JqZWN0IG9sZFZhbHVlLCBPYmplY3QgbmV3VmFsdWUsIGludCBwb3MpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJJTm9kZUFkYXB0ZXIgQWRhcHRlckZvckF0dHJUZXN0T25seSAiICsgdGhpcy5oYXNoQ29kZSgpICsgIiBoYXMgYmVlbiBub3RpZmllZCBvZiAiICsgSU5vZGVOb3RpZmllci5FVkVOVF9UWVBFX1NUUklOR1NbZXZlbnRUeXBlXSArICIgKHdoZW4gIiArIG5vdGlmaWVyICsgIiBub3RpZmllZCBpdCkiKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckRvY3VtZW50VGVzdE9ubHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ODc1YzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckRvY3VtZW50VGVzdE9ubHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotCi0vKioKLSAqIEluc2VydCB0aGUgdHlwZSdzIGRlc2NyaXB0aW9uIGhlcmUuIENyZWF0aW9uIGRhdGU6ICgxLzkvMDEgMzozNzowMSBQTSkKLSAqIAotICogQGF1dGhvcjogRGF2aWQgV2lsbGlhbXMKLSAqLwotcHVibGljIGNsYXNzIEFkYXB0ZXJGb3JEb2N1bWVudFRlc3RPbmx5IGltcGxlbWVudHMgSU5vZGVBZGFwdGVyIHsKLQkvKioKLQkgKiBDQUFkYXB0ZXJUZXN0T25seSBjb25zdHJ1Y3RvciBjb21tZW50LgotCSAqLwotCXB1YmxpYyBBZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBBbGxvd2luZyB0aGUgSU5vZGVBZGFwdGVyIHRvIGNvbXBhcmUgaXRzZWxmIGFnYWluc3QgdGhlIHR5cGUgYWxsb3dzIGl0Ci0JICogdG8gcmV0dXJuIHRydWUgaW4gbW9yZSB0aGFuIG9uZSBjYXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBEb2N1bWVudCkgewotCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqLwotCXB1YmxpYyB2b2lkIG5vdGlmeUNoYW5nZWQoSU5vZGVOb3RpZmllciBub3RpZmllciwgaW50IGV2ZW50VHlwZSwgT2JqZWN0IGNoYW5nZWRGZWF0dXJlLCBPYmplY3Qgb2xkVmFsdWUsIE9iamVjdCBuZXdWYWx1ZSwgaW50IHBvcykgewotCQlTeXN0ZW0ub3V0LnByaW50bG4oIklOb2RlQWRhcHRlciBBZGFwdGVyRm9yRG9jdW1lbnRUZXN0T25seSAiICsgdGhpcy5oYXNoQ29kZSgpICsgIiBoYXMgYmVlbiBub3RpZmllZCBvZiAiICsgSU5vZGVOb3RpZmllci5FVkVOVF9UWVBFX1NUUklOR1NbZXZlbnRUeXBlXSArICIgKHdoZW4gIiArIG5vdGlmaWVyICsgIiBub3RpZmllZCBpdCkiKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckVsZW1lbnRUZXN0T25seS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvYWRhcHRkb20vQWRhcHRlckZvckVsZW1lbnRUZXN0T25seS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNzgxNTY0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2FkYXB0ZG9tL0FkYXB0ZXJGb3JFbGVtZW50VGVzdE9ubHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmFkYXB0ZG9tOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklOb2RlQWRhcHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU5vZGVOb3RpZmllcjsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotCi0KLS8qKgotICogSW5zZXJ0IHRoZSB0eXBlJ3MgZGVzY3JpcHRpb24gaGVyZS4gQ3JlYXRpb24gZGF0ZTogKDEvOS8wMSAzOjM3OjAxIFBNKQotICogCi0gKiBAYXV0aG9yOiBEYXZpZCBXaWxsaWFtcwotICovCi1wdWJsaWMgY2xhc3MgQWRhcHRlckZvckVsZW1lbnRUZXN0T25seSBpbXBsZW1lbnRzIElOb2RlQWRhcHRlciB7Ci0JLyoqCi0JICogQ0FBZGFwdGVyVGVzdE9ubHkgY29uc3RydWN0b3IgY29tbWVudC4KLQkgKi8KLQlwdWJsaWMgQWRhcHRlckZvckVsZW1lbnRUZXN0T25seSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBBbGxvd2luZyB0aGUgSU5vZGVBZGFwdGVyIHRvIGNvbXBhcmUgaXRzZWxmIGFnYWluc3QgdGhlIHR5cGUgYWxsb3dzIGl0Ci0JICogdG8gcmV0dXJuIHRydWUgaW4gbW9yZSB0aGFuIG9uZSBjYXNlLgotCSAqLwotCXB1YmxpYyBib29sZWFuIGlzQWRhcHRlckZvclR5cGUoT2JqZWN0IHR5cGUpIHsKLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQkJaWYgKHR5cGUgaW5zdGFuY2VvZiBFbGVtZW50KSB7Ci0JCQlyZXN1bHQgPSB0cnVlOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICovCi0JcHVibGljIHZvaWQgbm90aWZ5Q2hhbmdlZChJTm9kZU5vdGlmaWVyIG5vdGlmaWVyLCBpbnQgZXZlbnRUeXBlLCBPYmplY3QgY2hhbmdlZEZlYXR1cmUsIE9iamVjdCBvbGRWYWx1ZSwgT2JqZWN0IG5ld1ZhbHVlLCBpbnQgcG9zKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiSU5vZGVBZGFwdGVyIEFkYXB0ZXJGb3JFbGVtZW50VGVzdE9ubHkgIiArIHRoaXMuaGFzaENvZGUoKSArICIgaGFzIGJlZW4gbm90aWZpZWQgb2YgIiArIElOb2RlTm90aWZpZXIuRVZFTlRfVFlQRV9TVFJJTkdTW2V2ZW50VHlwZV0gKyAiICh3aGVuICIgKyBub3RpZmllciArICIgbm90aWZpZWQgaXQpIik7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RDaGFyU2VxdWVuY2VSZWFkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RDaGFyU2VxdWVuY2VSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE1ODVjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0Q2hhclNlcXVlbmNlUmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxOTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQ2hhclNlcXVlbmNlUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RDaGFyU2VxdWVuY2VSZWFkZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQotCXB1YmxpYyBUZXN0Q2hhclNlcXVlbmNlUmVhZGVyKCkgewotCQlzdXBlcigpOwotCX0KLQotCi0JcHVibGljIFRlc3RDaGFyU2VxdWVuY2VSZWFkZXIoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JU3RyaW5nIGZTdGFuZGFyZFN0cmluZyA9ICJ0ZXN0MTIzIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZEJlZ2lubmluZygpIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCAwLCAzKTsKLQkJY2hhciBjaGFyMSA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIxID09ICd0Jyk7Ci0JCWNoYXIgY2hhcjIgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMiA9PSAnZScpOwotCQljaGFyIGNoYXIzID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjMgPT0gJ3MnKTsKLQkJaW50IGVvZiA9IHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoZW9mID09IC0xKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U3RhbmRhcmRNaWRkbGUoKSB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgMiwgMyk7Ci0JCWNoYXIgY2hhcjEgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMSA9PSAncycpOwotCQljaGFyIGNoYXIyID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjIgPT0gJ3QnKTsKLQkJY2hhciBjaGFyMyA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIzID09ICcxJyk7Ci0JCWludCBlb2YgPSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGVvZiA9PSAtMSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0YW5kYXJkRW5kKCkgewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDQsIDMpOwotCQljaGFyIGNoYXIxID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjEgPT0gJzEnKTsKLQkJY2hhciBjaGFyMiA9IChjaGFyKSByZWFkZXIucmVhZCgpOwotCQlhc3NlcnRUcnVlKGNoYXIyID09ICcyJyk7Ci0JCWNoYXIgY2hhcjMgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMyA9PSAnMycpOwotCQlpbnQgZW9mID0gcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShlb2YgPT0gLTEpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZE91dE9mUmFuZ2UoKSB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgNTAsIDMpOwotCQlpbnQgZW9mID0gcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShlb2YgPT0gLTEpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTdGFuZGFyZFBhcnRpYWxseU91dE9mUmFuZ2UoKSB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgNSwgMyk7Ci0JCWNoYXIgY2hhcjEgPSAoY2hhcikgcmVhZGVyLnJlYWQoKTsKLQkJYXNzZXJ0VHJ1ZShjaGFyMSA9PSAnMicpOwotCQljaGFyIGNoYXIyID0gKGNoYXIpIHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoY2hhcjIgPT0gJzMnKTsKLQkJaW50IGVvZiA9IHJlYWRlci5yZWFkKCk7Ci0JCWFzc2VydFRydWUoZW9mID09IC0xKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyQmVnaW5pbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDAsIDMpOwotCQlTdHJpbmcgdGFyZ2V0U3RyaW5nID0gInRlcyI7Ci0JCQotCQkvLyBpbnRlbnRpb25hbGx5IHNtYWxsIHNpemVkIGJ1ZmZlcgotCQljaGFyW10gY2hhcmJ1ZmZlciA9IG5ldyBjaGFyWzJdOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgblJlYWQgPSAwOwotCQl3aGlsZSAoblJlYWQgIT0gLTEpIHsKLQkJCW5SZWFkID0gcmVhZGVyLnJlYWQoY2hhcmJ1ZmZlcik7Ci0JCQlpZiAoblJlYWQgPiAwKSB7Ci0JCQkJc3RyaW5nQnVmZmVyLmFwcGVuZChjaGFyYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCX0KLQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBzdHJpbmdCdWZmZXIudG9TdHJpbmcoKTsKLQkJCi0JCWFzc2VydEVxdWFscyh0YXJnZXRTdHJpbmcsIHRlc3RTdHJpbmcpOwotCQkKLQl9Ci0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlckVuZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUNoYXJTZXF1ZW5jZVJlYWRlciByZWFkZXIgPSBuZXcgQ2hhclNlcXVlbmNlUmVhZGVyKGZTdGFuZGFyZFN0cmluZywgNCwgMyk7Ci0JCVN0cmluZyB0YXJnZXRTdHJpbmcgPSAiMTIzIjsKLQkJCi0JCS8vIGludGVudGlvbmFsbHkgc21hbGwgc2l6ZWQgYnVmZmVyCi0JCWNoYXJbXSBjaGFyYnVmZmVyID0gbmV3IGNoYXJbMl07Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBuUmVhZCA9IDA7Ci0JCXdoaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKHRhcmdldFN0cmluZywgdGVzdFN0cmluZyk7Ci0JCQotCX0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlckVuZEVubGFyZ2VkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCA0LCAzKTsKLQkJU3RyaW5nIHRhcmdldFN0cmluZyA9ICIxMjMiOwotCQkKLQkJLy8gaW50ZW50aW9uYWxseSBzbWFsbCBzaXplZCBidWZmZXIKLQkJY2hhcltdIGNoYXJidWZmZXIgPSBuZXcgY2hhclsyMDBdOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgblJlYWQgPSAwOwotCQl3aGlsZSAoblJlYWQgIT0gLTEpIHsKLQkJCW5SZWFkID0gcmVhZGVyLnJlYWQoY2hhcmJ1ZmZlcik7Ci0JCQlpZiAoblJlYWQgPiAwKSB7Ci0JCQkJc3RyaW5nQnVmZmVyLmFwcGVuZChjaGFyYnVmZmVyLCAwLCBuUmVhZCk7Ci0JCQl9Ci0JCX0KLQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBzdHJpbmdCdWZmZXIudG9TdHJpbmcoKTsKLQkJCi0JCWFzc2VydEVxdWFscyh0YXJnZXRTdHJpbmcsIHRlc3RTdHJpbmcpOwotCQkKLQl9Ci0JcHVibGljIHZvaWQgdGVzdEJ1ZmZlckJlZ2luaW5nRW5sYXJnZWQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlDaGFyU2VxdWVuY2VSZWFkZXIgcmVhZGVyID0gbmV3IENoYXJTZXF1ZW5jZVJlYWRlcihmU3RhbmRhcmRTdHJpbmcsIDAsIDMpOwotCQlTdHJpbmcgdGFyZ2V0U3RyaW5nID0gInRlcyI7Ci0JCQotCQkvLyBpbnRlbnRpb25hbGx5IHNtYWxsIHNpemVkIGJ1ZmZlcgotCQljaGFyW10gY2hhcmJ1ZmZlciA9IG5ldyBjaGFyWzIwMF07Ci0JCVN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBuUmVhZCA9IDA7Ci0JCXdoaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJfQotCQlTdHJpbmcgdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKHRhcmdldFN0cmluZywgdGVzdFN0cmluZyk7Ci0JCQotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0QnVmZmVyQmVnaW5pbmdSZWR1Y2VkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhclNlcXVlbmNlUmVhZGVyIHJlYWRlciA9IG5ldyBDaGFyU2VxdWVuY2VSZWFkZXIoZlN0YW5kYXJkU3RyaW5nLCAwLCAzKTsKLQkJU3RyaW5nIHRhcmdldFN0cmluZyA9ICJ0ZSI7Ci0JCQotCQkvLyBpbnRlbnRpb25hbGx5IHNtYWxsIHNpemVkIGJ1ZmZlcgotCQljaGFyW10gY2hhcmJ1ZmZlciA9IG5ldyBjaGFyWzJdOwotCQlTdHJpbmdCdWZmZXIgc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgblJlYWQgPSAwOwotCQkvL3doaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSByZWFkZXIucmVhZChjaGFyYnVmZmVyLCAwLCAyKTsKLQkJCWlmIChuUmVhZCA+IDApIHsKLQkJCQlzdHJpbmdCdWZmZXIuYXBwZW5kKGNoYXJidWZmZXIsIDAsIG5SZWFkKTsKLQkJCX0KLQkJLy99Ci0JCVN0cmluZyB0ZXN0U3RyaW5nID0gc3RyaW5nQnVmZmVyLnRvU3RyaW5nKCk7Ci0JCQotCQlhc3NlcnRFcXVhbHModGFyZ2V0U3RyaW5nLCB0ZXN0U3RyaW5nKTsKLQkJLy8vIG5vdyBjb250aW51ZSByZWFkaW5nIHNhbWUgcmVhZGVyCi0JCXRhcmdldFN0cmluZyA9ICJzIjsKLQkJc3RyaW5nQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQluUmVhZCA9IDA7Ci0JCS8vd2hpbGUgKG5SZWFkICE9IC0xKSB7Ci0JCQluUmVhZCA9IHJlYWRlci5yZWFkKGNoYXJidWZmZXIsIDAsIDIpOwotCQkJaWYgKG5SZWFkID4gMCkgewotCQkJCXN0cmluZ0J1ZmZlci5hcHBlbmQoY2hhcmJ1ZmZlciwgMCwgblJlYWQpOwotCQkJfQotCQkvL30KLQkJdGVzdFN0cmluZyA9IHN0cmluZ0J1ZmZlci50b1N0cmluZygpOwotCQlhc3NlcnRFcXVhbHModGFyZ2V0U3RyaW5nLCB0ZXN0U3RyaW5nKTsKLQkJCi0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFJlZ2lvbk1hdGNoZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RSZWdpb25NYXRjaGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5M2QxYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFJlZ2lvbk1hdGNoZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0KLQotcHVibGljIGNsYXNzIFRlc3RSZWdpb25NYXRjaGVzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUZXN0UmVnaW9uTWF0Y2hlcygpIHsKLQkJc3VwZXIoKTsKLQotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBuYW1lCi0JICovCi0JcHVibGljIFRlc3RSZWdpb25NYXRjaGVzKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXMxKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUuc2V0KCJ0ZXN0aW5nMTIzIik7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgMSwgInQiKTsKLQkJYXNzZXJ0RXF1YWxzKHRydWUsIHJlc3VsdCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXMyKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUuc2V0KCJ0ZXN0aW5nMTIzIik7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgMiwgInQiKTsKLQkJYXNzZXJ0RXF1YWxzKGZhbHNlLCByZXN1bHQpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVnaW9uTWF0Y2hlczMoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlKCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQoInRlc3RpbmcxMjMiKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUucmVnaW9uTWF0Y2hlcyg3LCAzLCAiMTIzIik7Ci0JCWFzc2VydEVxdWFscyh0cnVlLCByZXN1bHQpOwotCX0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVnaW9uTWF0Y2hlczQoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlKCk7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQoInRlc3RpbmcxMjMiKTsKLQkJYm9vbGVhbiByZXN1bHQgPSBzdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUucmVnaW9uTWF0Y2hlcyg4LCAzLCAiMjM0Iik7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUgc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlID0gbmV3IFN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSgpOwotCQlTdHJpbmcgdGVzdCA9ICJ0ZXN0aW5nMTIzIjsKLQkJU3RyaW5nIGNvbXBhcmUgPSAiVGVTdGluZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlMigpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlIHN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUoKTsKLQkJU3RyaW5nIHRlc3QgPSAidGVzdFx1MDEzMG5nMTIzIjsKLQkJU3RyaW5nIGNvbXBhcmUgPSAiVGVTdEluZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlMygpIHsKLQkJU3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlIHN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZSA9IG5ldyBTdHJ1Y3R1cmVkRG9jdW1lbnRUZXh0U3RvcmUoKTsKLQkJU3RyaW5nIHRlc3QgPSAidGVzdGluZzEyMyI7Ci0JCVN0cmluZyBjb21wYXJlID0gIlRlU3RcdTAxMzFuZzEyMyI7Ci0JCXN0cnVjdHVyZWREb2N1bWVudFRleHRTdG9yZS5zZXQodGVzdCk7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXMoMCwgdGVzdC5sZW5ndGgoKSwgY29tcGFyZSk7Ci0JCWFzc2VydEVxdWFscyhmYWxzZSwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gc3RydWN0dXJlZERvY3VtZW50VGV4dFN0b3JlLnJlZ2lvbk1hdGNoZXNJZ25vcmVDYXNlKDAsIHRlc3QubGVuZ3RoKCksIGNvbXBhcmUpOwotCQlhc3NlcnRFcXVhbHModHJ1ZSwgcmVzdWx0KTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL051bGxQYXJzZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9OdWxsUGFyc2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2YWIyMGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL051bGxQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwubHRrLnBhcnNlci5SZWdpb25QYXJzZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLQotcHVibGljIGNsYXNzIE51bGxQYXJzZXIgaW1wbGVtZW50cyBSZWdpb25QYXJzZXIgewotCi0JcHVibGljIElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gZ2V0RG9jdW1lbnRSZWdpb25zKCkgewotCi0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBMaXN0IGdldFJlZ2lvbnMoKSB7Ci0KLQkJcmV0dXJuIG51bGw7Ci0JfQotCi0JcHVibGljIFJlZ2lvblBhcnNlciBuZXdJbnN0YW5jZSgpIHsKLQotCQlyZXR1cm4gdGhpczsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZXNldChSZWFkZXIgcmVhZGVyKSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQotCX0KLQotCXB1YmxpYyB2b2lkIHJlc2V0KFJlYWRlciByZWFkZXIsIGludCBvZmZzZXQpIHsKLQkJLy8gZG8gbm90aGluZwotCi0JfQotCi0JcHVibGljIHZvaWQgcmVzZXQoU3RyaW5nIGlucHV0KSB7Ci0JCS8vIGRvIG5vdGhpbmcKLQotCX0KLQotCXB1YmxpYyB2b2lkIHJlc2V0KFN0cmluZyBpbnB1dCwgaW50IG9mZnNldCkgewotCQkvLyBkbyBub3RoaW5nCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RBYm91dFRvQmVDaGFuZ2VkRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzlmODRkYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLkFib3V0VG9CZUNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotCi1wdWJsaWMgY2xhc3MgVGVzdEFib3V0VG9CZUNoYW5nZWRFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RBYm91dFRvQmVDaGFuZ2VkRXZlbnQoKSB7Ci0JCUFib3V0VG9CZUNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChldmVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldERlbGV0ZWRUZXh0KCkgewotCQlBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCVN0cmluZyBkID0gZXZlbnQuZ2V0RGVsZXRlZFRleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKGQsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPcmlnaW5hbFJlcXVlc3RlcigpIHsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlPYmplY3QgciA9IGV2ZW50LmdldE9yaWdpbmFsUmVxdWVzdGVyKCk7Ci0JCWFzc2VydEVxdWFscyh0aGlzLCByKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U3RydWN0dXJlZERvY3VtZW50KCkgewotCQlBYm91dFRvQmVDaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZCA9IGV2ZW50LmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlhc3NlcnROb3ROdWxsKGQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTZXREZWxldGVkVGV4dCgpIHsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlldmVudC5zZXREZWxldGVkVGV4dCgianVua3lOb3RoaW5nIik7Ci0JCS8vIGFzc3VtZSBvayBpZiBubyBleGNlcHRpb24KLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci0KLQlwcml2YXRlIEFib3V0VG9CZUNoYW5nZWRFdmVudCBnZXRCYXNpY0V2ZW50KCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRJbnN0YW5jZShuZXcgTnVsbFBhcnNlcigpKTsKLQkJQWJvdXRUb0JlQ2hhbmdlZEV2ZW50IGV2ZW50ID0gbmV3IEFib3V0VG9CZUNoYW5nZWRFdmVudChkb2N1bWVudCwgdGhpcywgInRlc3QiLCAwLCAwKTsKLQkJcmV0dXJuIGV2ZW50OwotCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50Q29udGVudEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNlMjYzNzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudENvbnRlbnRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5ld0RvY3VtZW50Q29udGVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JZmluYWwgcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIHRlc3RTdHJpbmcgPSAidGVzdGluZyI7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmV3RG9jdW1lbnRDb250ZW50RXZlbnQoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0T2Zmc2V0KCkgewotCQlOZXdEb2N1bWVudENvbnRlbnRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJaW50IG8gPSBldmVudC5nZXRPZmZzZXQoKTsKLQkJYXNzZXJ0RXF1YWxzKDAsIG8pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRMZW5ndGgoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlpbnQgaSA9IGV2ZW50LmdldExlbmd0aCgpOwotCQlhc3NlcnRFcXVhbHModGVzdFN0cmluZy5sZW5ndGgoKSwgaSk7Ci0JfQotCi0JLyoKLQkgKiBDbGFzcyB1bmRlciB0ZXN0IGZvciBTdHJpbmcgZ2V0VGV4dCgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHQoKSB7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlTdHJpbmcgdGV4dCA9IGV2ZW50LmdldFRleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKHRlc3RTdHJpbmcsIHRleHQpOwotCX0KLQotCXByaXZhdGUgTmV3RG9jdW1lbnRDb250ZW50RXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCU5ld0RvY3VtZW50Q29udGVudEV2ZW50IGV2ZW50ID0gbmV3IE5ld0RvY3VtZW50Q29udGVudEV2ZW50KGRvY3VtZW50LCB0aGlzKTsKLQkJcmV0dXJuIGV2ZW50OwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3ROZXdEb2N1bWVudEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50RXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY4YWU3My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5ld0RvY3VtZW50RXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5OZXdEb2N1bWVudEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0TmV3RG9jdW1lbnRFdmVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQlmaW5hbCBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN0cmluZyA9ICJ0ZXN0aW5nIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPZmZzZXQoKSB7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWludCBvID0gZXZlbnQuZ2V0T2Zmc2V0KCk7Ci0JCWFzc2VydEVxdWFscygwLCBvKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGVuZ3RoKCkgewotCQlOZXdEb2N1bWVudEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlpbnQgaSA9IGV2ZW50LmdldExlbmd0aCgpOwotCQlhc3NlcnRFcXVhbHModGVzdFN0cmluZy5sZW5ndGgoKSwgaSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5ld0RvY3VtZW50RXZlbnQoKSB7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEdldFRleHQoKSB7Ci0JCU5ld0RvY3VtZW50RXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCVN0cmluZyB0ZXh0ID0gZXZlbnQuZ2V0VGV4dCgpOwotCQlhc3NlcnRFcXVhbHModGVzdFN0cmluZywgdGV4dCk7Ci0JfQotCi0JcHJpdmF0ZSBOZXdEb2N1bWVudEV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlOZXdEb2N1bWVudEV2ZW50IGV2ZW50ID0gbmV3IE5ld0RvY3VtZW50RXZlbnQoZG9jdW1lbnQsIHRoaXMpOwotCQlyZXR1cm4gZXZlbnQ7Ci0KLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdE5vQ2hhbmdlRXZlbnQuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0Tm9DaGFuZ2VFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzRmYzkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0Tm9DaGFuZ2VFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5vQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLQotcHVibGljIGNsYXNzIFRlc3ROb0NoYW5nZUV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdE5vQ2hhbmdlRXZlbnQoKSB7Ci0JCU5vQ2hhbmdlRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCQlhc3NlcnRFcXVhbHMoTm9DaGFuZ2VFdmVudC5OT19DT05URU5UX0NIQU5HRSwgZXZlbnQucmVhc29uKTsKLQl9Ci0KLQlwcml2YXRlIE5vQ2hhbmdlRXZlbnQgZ2V0QmFzaWNFdmVudCgpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCA9IFN0cnVjdHVyZWREb2N1bWVudEZhY3RvcnkuZ2V0TmV3U3RydWN0dXJlZERvY3VtZW50SW5zdGFuY2UobmV3IE51bGxQYXJzZXIoKSk7Ci0JCWRvY3VtZW50LnNldFRleHQodGhpcywgdGVzdFN0cmluZyk7Ci0JCU5vQ2hhbmdlRXZlbnQgZXZlbnQgPSBuZXcgTm9DaGFuZ2VFdmVudChkb2N1bWVudCwgdGhpcywgIiIsIDAsIDApOwotCQlldmVudC5yZWFzb24gPSBOb0NoYW5nZUV2ZW50Lk5PX0NPTlRFTlRfQ0hBTkdFOwotCQlyZXR1cm4gZXZlbnQ7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbkNoYW5nZWRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25DaGFuZ2VkRXZlbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTdjYjgyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbkNoYW5nZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVRleHRSZWdpb247Ci0KLXB1YmxpYyBjbGFzcyBUZXN0UmVnaW9uQ2hhbmdlZEV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdFJlZ2lvbkNoYW5nZWRFdmVudCgpIHsKLQkJUmVnaW9uQ2hhbmdlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROb3ROdWxsKGV2ZW50KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVnaW9uKCkgewotCQlSZWdpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gc3RydWN0dXJlZERvY3VtZW50UmVnaW9uID0gZXZlbnQuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uKCk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCBzdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24pOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSB7Ci0JCVJlZ2lvbkNoYW5nZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJSVRleHRSZWdpb24gcmVnaW9uID0gZXZlbnQuZ2V0UmVnaW9uKCk7Ci0JCWFzc2VydEVxdWFscyhudWxsLCByZWdpb24pOwotCX0KLQotCXByaXZhdGUgUmVnaW9uQ2hhbmdlZEV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlSZWdpb25DaGFuZ2VkRXZlbnQgZXZlbnQgPSBuZXcgUmVnaW9uQ2hhbmdlZEV2ZW50KGRvY3VtZW50LCB0aGlzLCBudWxsLCBudWxsLCAiIiwgMCwgMCk7Ci0JCXJldHVybiBldmVudDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9ldmVudHMvVGVzdFJlZ2lvbnNSZXBsYWNlZEV2ZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YjExNjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5ldmVudHM7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0UmVnaW9uc1JlcGxhY2VkRXZlbnQgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlmaW5hbCBwcml2YXRlIHN0YXRpYyBTdHJpbmcgdGVzdFN0cmluZyA9ICJ0ZXN0aW5nIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RSZWdpb25zUmVwbGFjZWRFdmVudCgpIHsKLQkJUmVnaW9uc1JlcGxhY2VkRXZlbnQgZXZlbnQgPSBnZXRCYXNpY0V2ZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoZXZlbnQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXROZXdSZWdpb25zKCkgewotCQlSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0TnVsbChldmVudC5nZXROZXdSZWdpb25zKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPbGRSZWdpb25zKCkgewotCQlSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0TnVsbChldmVudC5nZXRPbGRSZWdpb25zKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24oKSB7Ci0JCVJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbigpKTsKLQl9Ci0KLQlwcml2YXRlIFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGdldEJhc2ljRXZlbnQoKSB7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQgPSBTdHJ1Y3R1cmVkRG9jdW1lbnRGYWN0b3J5LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudEluc3RhbmNlKG5ldyBOdWxsUGFyc2VyKCkpOwotCQlkb2N1bWVudC5zZXRUZXh0KHRoaXMsIHRlc3RTdHJpbmcpOwotCQlSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IG5ldyBSZWdpb25zUmVwbGFjZWRFdmVudChkb2N1bWVudCwgdGhpcywgbnVsbCwgbnVsbCwgbnVsbCwgIiIsIDAsIDApOwotCQlyZXR1cm4gZXZlbnQ7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvZXZlbnRzL1Rlc3RTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MzViMzU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V2ZW50cy9UZXN0U3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuZXZlbnRzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmRvY3VtZW50LlN0cnVjdHVyZWREb2N1bWVudEZhY3Rvcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5TdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV4dGVuZHMgVGVzdENhc2UgewotCWZpbmFsIHByaXZhdGUgc3RhdGljIFN0cmluZyB0ZXN0U3RyaW5nID0gInRlc3RpbmciOwotCi0JcHVibGljIHZvaWQgdGVzdFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50KCkgewotCQlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBldmVudCA9IGdldEJhc2ljRXZlbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChldmVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldE5ld1N0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKSB7Ci0JCVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IGV2ZW50ID0gZ2V0QmFzaWNFdmVudCgpOwotCQlhc3NlcnROdWxsKGV2ZW50LmdldE9sZFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoKSk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zUmVwbGFjZWRFdmVudCBnZXRCYXNpY0V2ZW50KCkgewotCQlJU3RydWN0dXJlZERvY3VtZW50IGRvY3VtZW50ID0gU3RydWN0dXJlZERvY3VtZW50RmFjdG9yeS5nZXROZXdTdHJ1Y3R1cmVkRG9jdW1lbnRJbnN0YW5jZShuZXcgTnVsbFBhcnNlcigpKTsKLQkJZG9jdW1lbnQuc2V0VGV4dCh0aGlzLCB0ZXN0U3RyaW5nKTsKLQkJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQgZXZlbnQgPSBuZXcgU3RydWN0dXJlZERvY3VtZW50UmVnaW9uc1JlcGxhY2VkRXZlbnQoZG9jdW1lbnQsIHRoaXMsIG51bGwsIG51bGwsICIiLCAwLCAwKTsKLQkJcmV0dXJuIGV2ZW50OwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V4YW1wbGVzL1Rlc3RBdFNpZ24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2V4YW1wbGVzL1Rlc3RBdFNpZ24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQ5MTAwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9leGFtcGxlcy9UZXN0QXRTaWduLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5leGFtcGxlczsKLQotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS51dGlsLlByb3BlcnRpZXM7Ci0KLQotcHVibGljIGNsYXNzIFRlc3RBdFNpZ24gewotCi0JcHVibGljIFRlc3RBdFNpZ24oKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gbmV3IFByb3BlcnRpZXMoKTsgLy9TeXN0ZW0uZ2V0UHJvcGVydGllcygpOwotCQlwcm9wZXJ0aWVzLnB1dCgiYXQgc2lnbiIsICJ0aGlzIGlzIGFuIFx1MDA0MCBzaWduIik7Ci0JCXByb3BlcnRpZXMubGlzdChTeXN0ZW0ub3V0KTsKLQkJRmlsZU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbSgidGVzdEF0LnR4dCIpOwotCQlwcm9wZXJ0aWVzLnN0b3JlKG91dHB1dFN0cmVhbSwgInRlc3RzIik7Ci0JCW91dHB1dFN0cmVhbS5jbG9zZSgpOwotCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oInRlc3RBdC50eHQiKTsKLQkJUHJvcGVydGllcyByZWFkUHJvcGVydGllcyA9IG5ldyBQcm9wZXJ0aWVzKCk7Ci0JCXJlYWRQcm9wZXJ0aWVzLmxvYWQoaW5TdHJlYW0pOwotCQlTdHJpbmcgYXRTaWduID0gKFN0cmluZykgcmVhZFByb3BlcnRpZXMuZ2V0KCJhdCBzaWduIik7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiYXQgc2lnbiBmcm9tIHJlYWQ6ICIgKyBhdFNpZ24pOwotCi0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9saWZlL0VtcHR5TW9kZWxGb3JUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvbGlmZS9FbXB0eU1vZGVsRm9yVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTJiOTVkOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9saWZlL0VtcHR5TW9kZWxGb3JUZXN0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMubGlmZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5tb2RlbC5BYnN0cmFjdFN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLQotCi0KLXB1YmxpYyBjbGFzcyBFbXB0eU1vZGVsRm9yVGVzdHMgZXh0ZW5kcyBBYnN0cmFjdFN0cnVjdHVyZWRNb2RlbCB7Ci0KLQlwdWJsaWMgRW1wdHlNb2RlbEZvclRlc3RzKCkgewotCi0JCXN1cGVyKCk7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgY29uc3RydWN0b3Igc3R1YgotCX0KLQotCXB1YmxpYyBJbmRleGVkUmVnaW9uIGdldEluZGV4ZWRSZWdpb24oaW50IG9mZnNldCkgewotCi0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuIG51bGw7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2xpZmUvVGVzdENyZWF0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy9saWZlL1Rlc3RDcmVhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODExMmM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL2xpZmUvVGVzdENyZWF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy5saWZlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLm1vZGVsLk1vZGVsTGlmZWN5Y2xlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q3JlYXRpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRpb24oKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsID0gbmV3IEVtcHR5TW9kZWxGb3JUZXN0cygpOwotCQlNb2RlbExpZmVjeWNsZUV2ZW50IGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX1JFTEVBU0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQl9Ci0JCWV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX0RJUlRZX1NUQVRFKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQl9Ci0JCWV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX0RPQ1VNRU5UX0NIQU5HRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihldmVudCk7Ci0JCX0KLQkJLyogICAgICAgIGV2ZW50ID0gbmV3IE1vZGVsTGlmZWN5Y2xlRXZlbnQoc3RydWN0dXJlZE1vZGVsLCBNb2RlbExpZmVjeWNsZUV2ZW50Lk1PREVMX1JFSU5JVElBTElaRUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuQURBUFRFUlNfTk9USUZJRUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuTU9ERUxfUkVMT0FERUQpOwotCQkgaWYgKERFQlVHKSB7Ci0JCSBTeXN0ZW0ub3V0LnByaW50bG4oZXZlbnQpOwotCQkgfQotCQkgZXZlbnQgPSBuZXcgTW9kZWxMaWZlY3ljbGVFdmVudChzdHJ1Y3R1cmVkTW9kZWwsIE1vZGVsTGlmZWN5Y2xlRXZlbnQuTU9ERUxfUkVTT1VSQ0VfREVMRVRFRCk7Ci0JCSBpZiAoREVCVUcpIHsKLQkJIFN5c3RlbS5vdXQucHJpbnRsbihldmVudCk7Ci0JCSB9Ci0JCSBldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9SRVNPVVJDRV9NT1ZFRCk7Ci0JCSBpZiAoREVCVUcpIHsKLQkJIFN5c3RlbS5vdXQucHJpbnRsbihldmVudCk7Ci0JCSB9Ci0JCSAqLwotCQlldmVudCA9IG5ldyBNb2RlbExpZmVjeWNsZUV2ZW50KHN0cnVjdHVyZWRNb2RlbCwgTW9kZWxMaWZlY3ljbGVFdmVudC5NT0RFTF9TQVZFRCk7Ci0JCWlmIChERUJVRykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGV2ZW50KTsKLQkJfQotCi0KLQkJLy8gaWYgZ2V0cyB0byBoZXJlIHdpdGhvdXQgZXhjZXB0aW9uLCBhc3N1bWUgb2suCi0JCWFzc2VydFRydWUodHJ1ZSk7Ci0KLQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxJbXByb3ZlbWVudC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTE5M2FkNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxJbXByb3ZlbWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci0KLQotLyoqCi0gKiBUbyBwcmludCBvdXQgdGltaW5ncywgc2V0IERFQlVHX1RFU1QgdG8gdHJ1ZSwgb3RoZXIgd2lzZSwgdGhpcyB0ZXN0IHBhc3NlcwotICogaWYgbm8gZXhjZXB0aW9ucyB0aHJvd24uCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50IGV4dGVuZHMgVGVzdENhc2UgewotCS8vIG51bWJlciBvZiB0aW1lcyBhIHBhaXIgb2YgdGVzdHMgKHdpdGggYW5kIHdpdGhvdXQpIHRocmVhZCBsb2NhbCBhcmUgCi0JLy8gcmVwZWF0ZWQgKGZvciBtb3JlIGFjY3VyYXRlIGF2ZXJhZ2VzKS4KLQlpbnQgblRyaWFscyA9IDM7Ci0JSVN0cnVjdHVyZWREb2N1bWVudCBmRG9jdW1lbnQgPSBudWxsOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEVTVCA9IGZhbHNlOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEVTVF9ERVRBSUwgPSBmYWxzZTsKLQkvLyB0ZXN0cyBmcm9tIDEgdG8gTUFYX1RSRUFEUy0xIHRocmVhZHMKLQlwcml2YXRlIGludCBNQVhfVEhSRUFEUyA9IDU7Ci0JcHJpdmF0ZSBsb25nIFNMRUVQX1RJTUUgPSAwOwotCi0JcHVibGljIFRlc3RPZlRocmVhZExvY2FsSW1wcm92ZW1lbnQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzdXBlcigpOwotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGdldENvbnRlbnQoKSB7Ci0JCXJldHVybiAiPHRlc3Q+IiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8L3Rlc3Q+IjsKLQl9Ci0KLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIGNvbnRlbnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChmRG9jdW1lbnQgPT0gbnVsbCkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJZkRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigidGVzdFBlcmYueG1sIiwgY29udGVudCwgbnVsbCk7Ci0JCX0KLQkJcmV0dXJuIGZEb2N1bWVudDsKLQl9Ci0KLQl2b2lkIGxpbmtSdW5uZXIoZmluYWwgQm9vbGVhbiBkaXJlY3Rpb24sIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBkb2N1bWVudDsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBwcmV2aW91c0RvY3VtZW50UmVnaW9uID0gbnVsbDsKLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaW50IHN0YXJ0ID0gMDsKLQkJaW50IGxlbmd0aCA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKTsKLQkJaW50IG5SZWdpb25zID0gMDsKLQkJZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJCWludCBpbmRleCA9IGk7Ci0JCQlpZiAoIWRpcmVjdGlvbi5ib29sZWFuVmFsdWUoKSkgewotCQkJCWluZGV4ID0gKGxlbmd0aCAtIDEpIC0gaTsKLQkJCX0KLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gY3VycmVudERvY3VtZW50UmVnaW9uID0gc3RydWN0dXJlZERvY3VtZW50LmdldFJlZ2lvbkF0Q2hhcmFjdGVyT2Zmc2V0KGluZGV4KTsKLQkJCWlmIChjdXJyZW50RG9jdW1lbnRSZWdpb24gIT0gcHJldmlvdXNEb2N1bWVudFJlZ2lvbikgewotCQkJCW5SZWdpb25zKys7Ci0JCQkJcHJldmlvdXNEb2N1bWVudFJlZ2lvbiA9IGN1cnJlbnREb2N1bWVudFJlZ2lvbjsKLQkJCX0KLQkJCVRocmVhZC55aWVsZCgpOwotCQkJdHJ5IHsKLQkJCQlUaHJlYWQuc2xlZXAoU0xFRVBfVElNRSk7Ci0JCQl9Ci0JCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJbG9uZyBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJUaHJlYWQ6ICIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpICsgIiAgIGZyb20gIiArIGxlbmd0aCArICIgY2hhcmFjdGVycywgZm91bmQgIiArIG5SZWdpb25zICsgIiByZWdpb25zIGluICIgKyAoZW5kVGltZSAtIHN0YXJ0VGltZSkgKyAiIG1zZWNzLiIpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBsb25nIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhUaHJlYWRMb2NhbChpbnQgblRocmVhZHMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUJhc2ljU3RydWN0dXJlZERvY3VtZW50LnNldFVTRV9MT0NBTF9USFJFQUQodHJ1ZSk7Ci0JCWZEb2N1bWVudCA9IGdldERvY3VtZW50KGdldENvbnRlbnQoKSk7Ci0JCWxvbmcgc3RhcnRUaW1lT3ZlcmFsbCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlkb0RvY3VtZW50V2Fsa2luZyhuVGhyZWFkcyk7Ci0JCWxvbmcgZW5kVGltZU92ZXJhbGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJbG9uZyBmaW5hbE92ZXJhbGwgPSBlbmRUaW1lT3ZlcmFsbCAtIHN0YXJ0VGltZU92ZXJhbGw7Ci0JCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJPdmVyYWxsIHRpbWUgdXNpbmcgTG9jYWxfVGhyZWFkOiAiICsgZmluYWxPdmVyYWxsKTsKLQkJfQotCQlyZXR1cm4gZmluYWxPdmVyYWxsOwotCX0KLQotCXByaXZhdGUgbG9uZyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRob3V0VGhyZWFkTG9jYWwoaW50IG5UaHJlYWRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5zZXRVU0VfTE9DQUxfVEhSRUFEKGZhbHNlKTsKLQkJZkRvY3VtZW50ID0gZ2V0RG9jdW1lbnQoZ2V0Q29udGVudCgpKTsKLQkJbG9uZyBzdGFydFRpbWVPdmVyYWxsID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWRvRG9jdW1lbnRXYWxraW5nKG5UaHJlYWRzKTsKLQkJbG9uZyBlbmRUaW1lT3ZlcmFsbCA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlsb25nIGZpbmFsT3ZlcmFsbCA9IGVuZFRpbWVPdmVyYWxsIC0gc3RhcnRUaW1lT3ZlcmFsbDsKLQkJaWYgKERFQlVHX1RFU1RfREVUQUlMKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIk92ZXJhbGwgdGltZSBOT1QgdXNpbmcgTG9jYWxfVGhyZWFkOiAiICsgZmluYWxPdmVyYWxsKTsKLQkJfQotCQlyZXR1cm4gZmluYWxPdmVyYWxsOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0RvY3VtZW50V2Fsa2luZyhpbnQgblRocmVhZHMpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVRocmVhZFtdIHRocmVhZHMgPSBuZXcgVGhyZWFkW25UaHJlYWRzXTsKLQkJYm9vbGVhbiB0b2dnbGUgPSB0cnVlOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCWZpbmFsIEJvb2xlYW4gZGlyZWN0aW9uID0gbmV3IEJvb2xlYW4odG9nZ2xlKTsKLQkJCXRvZ2dsZSA9ICF0b2dnbGU7Ci0JCQlUaHJlYWRHcm91cCB0aHJlYWRHcm91cCA9IG5ldyBUaHJlYWRHcm91cCgic3NlIHVuaXQgdGVzdHMiKTsKLQkJCVRocmVhZCB0aHJlYWQgPSBuZXcgVGhyZWFkKHRocmVhZEdyb3VwLCBuZXcgUnVubmFibGUoKSB7Ci0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlsaW5rUnVubmVyKGRpcmVjdGlvbiwgZkRvY3VtZW50KTsKLQkJCQl9Ci0JCQl9LCAoInNzZSB1bml0IHRlc3QgdGhyZWFkICIgKyBpKSk7Ci0JCQkvLyBJIHVzZWQgTUlOX1BSSU9SSVRZIHNpbmNlIHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvICJzZWUiIGluIGRlYnVnZ2VyIGxpc3Qgb2YgdGhyZWFkcwotCQkJdGhyZWFkLnNldFByaW9yaXR5KFRocmVhZC5NSU5fUFJJT1JJVFkpOwotCQkJdGhyZWFkc1tpXSA9IHRocmVhZDsKLQkJfQotCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCXRocmVhZHNbaV0uc3RhcnQoKTsKLQkJfQotCQl0cnkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJdGhyZWFkc1tpXS5qb2luKCk7Ci0KLQkJCX0KLQkJfQotCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROVGhyZWFkcygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWZvciAoaW50IGkgPSAxOyBpIDwgTUFYX1RIUkVBRFM7IGkrKykgewotCQkJaW50IG5UaHJlYWRzID0gaTsKLQkJCWlmIChERUJVR19URVNUX0RFVEFJTCkgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiID4+Pj4tLS0tIE4gVGhyZWFkczogIiArIGkpOwotCQkJfQotCQkJZmxvYXQgd29DdW1tID0gMDsKLQkJCWZsb2F0IHdDdW1tID0gMDsKLQotCQkJZm9yIChpbnQgaiA9IDA7IGogPCBuVHJpYWxzOyBqKyspIHsKLQkJCQl3b0N1bW0gPSB3b0N1bW0gKyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRob3V0VGhyZWFkTG9jYWwoblRocmVhZHMpOwotCQkJCXdDdW1tID0gd0N1bW0gKyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRoVGhyZWFkTG9jYWwoblRocmVhZHMpOwotCQkJfQotCQkJZmxvYXQgYXZlcmFnZVdPID0gd29DdW1tIC8gblRyaWFsczsKLQkJCWZsb2F0IGF2ZXJhZ2VXID0gd0N1bW0gLyBuVHJpYWxzOwotCQkJZmxvYXQgcGVyVGhyZWFkV08gPSBhdmVyYWdlV08gLyBuVGhyZWFkczsKLQkJCWZsb2F0IHBlclRocmVhZFcgPSBhdmVyYWdlVyAvIG5UaHJlYWRzOwotCQkJaW50IHJvdW5kZWRXTyA9IG5ldyBGbG9hdChwZXJUaHJlYWRXTykuaW50VmFsdWUoKTsKLQkJCWludCByb3VuZGVkVyA9IG5ldyBGbG9hdChwZXJUaHJlYWRXKS5pbnRWYWx1ZSgpOwotCQkJaWYgKERFQlVHX1RFU1QpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkF2ZXJhZ2UgcGVyIHRocmVhZDogd2l0aG91dDogIiArIHJvdW5kZWRXTyArICIgd2l0aDogIiArIHJvdW5kZWRXKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiA8PDw8PC0tLS0gTiBUaHJlYWRzOiAiICsgaSk7Ci0JCQl9Ci0JCX0KLQkJLy8gaWYgZ2V0cyB0byBoZXJlICh3aXRoIG5vIGV4Y2VwdGlvbnMpIGFsbCBpcyBvay4KLQkJYXNzZXJ0VHJ1ZSgwID09IDApOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxXaXRoQ2hhbmdlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1Rlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNjNjQzZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGVzdE9mVGhyZWFkTG9jYWxXaXRoQ2hhbmdlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzLnRocmVhZGluZzsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3Mgc3RhcnRlZCBvZmYgYXMgY29weSBvZiBUZXN0T2ZUaHJlYWRMb2NhbEltcHJvdmVtZW50cywgYW5kIEkganVzdAotICogYWRkZWQgYW5vdGhlciB0aHJlYWQgd2l0aCBtb2RpZmllcyB0aGUgZG9jdW1lbnQuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0T2ZUaHJlYWRMb2NhbFdpdGhDaGFuZ2VzIGV4dGVuZHMgVGVzdENhc2UgewotCS8vIG51bWJlciBvZiB0aW1lcyBhIHBhaXIgb2YgdGVzdHMgKHdpdGggYW5kIHdpdGhvdXQpIHRocmVhZCBsb2NhbCBhcmUKLQkvLyByZXBlYXRlZCAoZm9yIG1vcmUgYWNjdXJhdGUgYXZlcmFnZXMpLgotCWludCBuVHJpYWxzID0gMzsKLQlJU3RydWN0dXJlZERvY3VtZW50IGZEb2N1bWVudCA9IG51bGw7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVR19URVNUX0RFVEFJTCA9IGZhbHNlOwotCS8vIHRlc3RzIGZyb20gMSB0byBNQVhfVFJFQURTLTEgdGhyZWFkcwotCXByaXZhdGUgaW50IE1BWF9USFJFQURTID0gMTQ7Ci0JcHJpdmF0ZSBsb25nIFNMRUVQX1RJTUUgPSAyOwotCXByaXZhdGUgaW50IE5fQ0hBTkdFUyA9IDEwMDAwOwotCi0JcHVibGljIFRlc3RPZlRocmVhZExvY2FsV2l0aENoYW5nZXMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlzdXBlcigpOwotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIGdldENvbnRlbnQoKSB7Ci0JCXJldHVybiAiPHRlc3Q+IiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIgotCQkJCQkrICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8ZXh0cmE+IDxqdW5rPiB0byBtYWtlIGEgPGxhcmdlLz4gZmlsZSAob3ZlciA8MTAwMD4gY2hhcnMpIiArICI8L3Rlc3Q+IjsKLQl9Ci0KLQlwcml2YXRlIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZ2V0RG9jdW1lbnQoU3RyaW5nIGNvbnRlbnQpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChmRG9jdW1lbnQgPT0gbnVsbCkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJZkRvY3VtZW50ID0gbW9kZWxNYW5hZ2VyLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcigidGVzdFBlcmYueG1sIiwgY29udGVudCwgbnVsbCk7Ci0JCX0KLQkJcmV0dXJuIGZEb2N1bWVudDsKLQl9Ci0KLQl2b2lkIGxpbmtSdW5uZXIoZmluYWwgQm9vbGVhbiBkaXJlY3Rpb24sIElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBkb2N1bWVudDsKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbiBwcmV2aW91c0RvY3VtZW50UmVnaW9uID0gbnVsbDsKLQkJbG9uZyBzdGFydFRpbWUgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJaW50IHN0YXJ0ID0gMDsKLQkJaW50IGxlbmd0aCA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKTsKLQkJaW50IG5SZWdpb25zID0gMDsKLQkJLy8gSSBtYWRlIGxlbmd0aCAiZHluYW1pYyIgYWZ0ZXIgYWRkaW5nIG1vZGlmaWNhdGlvbiB0aHJlYWQKLQkJZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpOyBpKyspIHsKLQkJCWludCBpbmRleCA9IGk7Ci0JCQlpZiAoIWRpcmVjdGlvbi5ib29sZWFuVmFsdWUoKSkgewotCQkJCWludCBjdXJyZW50TGVuZ3RoID0gc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpOwotCQkJCWluZGV4ID0gKGN1cnJlbnRMZW5ndGggLSAxKSAtIGk7Ci0JCQl9Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uIGN1cnJlbnREb2N1bWVudFJlZ2lvbiA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldChpbmRleCk7Ci0JCQlpZiAoY3VycmVudERvY3VtZW50UmVnaW9uICE9IHByZXZpb3VzRG9jdW1lbnRSZWdpb24pIHsKLQkJCQluUmVnaW9ucysrOwotCQkJCXByZXZpb3VzRG9jdW1lbnRSZWdpb24gPSBjdXJyZW50RG9jdW1lbnRSZWdpb247Ci0JCQl9Ci0JCQlUaHJlYWQueWllbGQoKTsKLQkJCXRyeSB7Ci0JCQkJVGhyZWFkLnNsZWVwKFNMRUVQX1RJTUUpOwotCQkJfQotCQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCWxvbmcgZW5kVGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGhyZWFkOiAiICsgVGhyZWFkLmN1cnJlbnRUaHJlYWQoKSArICIgICBmcm9tICIgKyBsZW5ndGggKyAiIGNoYXJhY3RlcnMsIGZvdW5kICIgKyBuUmVnaW9ucyArICIgcmVnaW9ucyBpbiAiICsgKGVuZFRpbWUgLSBzdGFydFRpbWUpICsgIiBtc2Vjcy4iKTsKLQkJfQotCX0KLQotCXByaXZhdGUgbG9uZyBkb3Rlc3REb2N1bWVudFdhbGtpbmdXaXRoVGhyZWFkTG9jYWwoaW50IG5UaHJlYWRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5zZXRVU0VfTE9DQUxfVEhSRUFEKHRydWUpOwotCQlmRG9jdW1lbnQgPSBnZXREb2N1bWVudChnZXRDb250ZW50KCkpOwotCQlsb25nIHN0YXJ0VGltZU92ZXJhbGwgPSBTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKTsKLQkJZG9Eb2N1bWVudFdhbGtpbmcoblRocmVhZHMpOwotCQlsb25nIGVuZFRpbWVPdmVyYWxsID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWxvbmcgZmluYWxPdmVyYWxsID0gZW5kVGltZU92ZXJhbGwgLSBzdGFydFRpbWVPdmVyYWxsOwotCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiT3ZlcmFsbCB0aW1lIHVzaW5nIExvY2FsX1RocmVhZDogIiArIGZpbmFsT3ZlcmFsbCk7Ci0JCX0KLQkJcmV0dXJuIGZpbmFsT3ZlcmFsbDsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9Eb2N1bWVudFdhbGtpbmcoaW50IG5UaHJlYWRzKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlUaHJlYWRbXSB0aHJlYWRzID0gbmV3IFRocmVhZFtuVGhyZWFkc107Ci0JCWJvb2xlYW4gdG9nZ2xlID0gdHJ1ZTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCB0aHJlYWRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlmaW5hbCBCb29sZWFuIGRpcmVjdGlvbiA9IG5ldyBCb29sZWFuKHRvZ2dsZSk7Ci0JCQkvLyB0b2dnbGUgY29udHJvbHMgd2hldGhlciBtb3ZlcyBmcm9tIHN0YXJ0IHRvIGVuZCwgb3IgZW5kIHRvIHN0YXJ0Ci0JCQkvLyBvZiBkb2N1bWVudC4KLQkJCXRvZ2dsZSA9ICF0b2dnbGU7Ci0JCQlUaHJlYWRHcm91cCB0aHJlYWRHcm91cCA9IG5ldyBUaHJlYWRHcm91cCgidW5pdCB0ZXN0cyIpOwotCQkJVGhyZWFkIHRocmVhZCA9IG5ldyBUaHJlYWQodGhyZWFkR3JvdXAsIG5ldyBSdW5uYWJsZSgpIHsKLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCWxpbmtSdW5uZXIoZGlyZWN0aW9uLCBmRG9jdW1lbnQpOwotCQkJCX0KLQkJCX0sICgic3NlIHVuaXQgdGVzdCB0aHJlYWQgIiArIGkpKTsKLQkJCS8vIEkgdXNlZCBNSU5fUFJJT1JJVFkgc2luY2UgdGhhdCBtYWtlcyBpdCBlYXNpZXIgdG8gInNlZSIgaW4KLQkJCS8vIGRlYnVnZ2VyIGxpc3Qgb2YgdGhyZWFkcwotCQkJdGhyZWFkLnNldFByaW9yaXR5KFRocmVhZC5NSU5fUFJJT1JJVFkpOwotCQkJdGhyZWFkc1tpXSA9IHRocmVhZDsKLQkJfQotCQlmb3IgKGludCBpID0gMDsgaSA8IHRocmVhZHMubGVuZ3RoOyBpKyspIHsKLQkJCXRocmVhZHNbaV0uc3RhcnQoKTsKLQkJfQotCQkvLyBub3cgdGhhdCAicmVhZGVycyIgaGF2ZSBzdGFydGVkLCB3ZSdsbCBzdGFydCBhIG1vZGlmaWNhdGlvbiB0aHJlYWQKLQkJLy8gdG9vCi0JCVRocmVhZCBtb2RpZnlpbmdUaHJlYWQgPSBuZXcgVGhyZWFkKG5ldyBSdW5uYWJsZSgpIHsKLQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQltb2RpZml5RG9jdW1lbnQoZkRvY3VtZW50KTsKLQkJCX0KLQkJfSwgKCJzc2UgdW5pdCB0ZXN0IG1vZGlmaWNhdGlvbiB0aHJlYWQgIikpOwotCQkvLyBJIHVzZWQgTUFYX1BSSU9SSVRZIHRvIGJlIHN1cmUgbG90cyBvZiBtb2RpZmljYXRpb25zIHRha2UgcGxhY2UKLQkJbW9kaWZ5aW5nVGhyZWFkLnNldFByaW9yaXR5KFRocmVhZC5NSU5fUFJJT1JJVFkpOwotCQltb2RpZnlpbmdUaHJlYWQuc3RhcnQoKTsKLQkJdHJ5IHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdGhyZWFkcy5sZW5ndGg7IGkrKykgewotCQkJCXRocmVhZHNbaV0uam9pbigpOwotCQkJfQotCQkJbW9kaWZ5aW5nVGhyZWFkLmpvaW4oKTsKLQkJfQotCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQotCXZvaWQgbW9kaWZpeURvY3VtZW50KElTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jdW1lbnQpIHsKLQkJUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBOX0NIQU5HRVMgKyAxOyBpKyspIHsKLQkJCWludCByYW5kb21PZmZzZXQgPSByYW5kb20ubmV4dEludChkb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCQkvLyAxMDAganVzdCBzZWVtcyBsaWtlIGEgZ29vZCBtYXhpbXVtIGxlbmd0aCB0byByZXBsYWNlCi0JCQkvLyAoY291bGQgcGxheSB3aXRoIGluIGZ1dHVyZSkuCi0JCQlpbnQgcmFuZG9tTGVuZ3RoID0gcmFuZG9tLm5leHRJbnQoMTAwKTsKLQkJCS8vIGlmIHdlICJhY2NpZGVudGx5IiBnZXQgbW9yZSB0aGFuIHRoZSBsZW5ndGgsIGp1c3Qgc2tpcGl0Ci0JCQlpZiAocmFuZG9tT2Zmc2V0ICsgcmFuZG9tTGVuZ3RoIDwgZG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIHsKLQkJCQlkb2N1bWVudC5yZXBsYWNlVGV4dCh0aGlzLCByYW5kb21PZmZzZXQsIHJhbmRvbUxlbmd0aCwgInRlc3Rpbmd0ZXh0Iik7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TlRocmVhZHMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlmb3IgKGludCBpID0gMTsgaSA8IE1BWF9USFJFQURTOyBpKyspIHsKLQkJCWludCBuVGhyZWFkcyA9IGk7Ci0JCQlpZiAoREVCVUdfVEVTVF9ERVRBSUwpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiA+Pj4+LS0tLSBOIFRocmVhZHM6ICIgKyBpKTsKLQkJCX0KLQkJCWZsb2F0IHdDdW1tID0gMDsKLQkJCWZvciAoaW50IGogPSAwOyBqIDwgblRyaWFsczsgaisrKSB7Ci0JCQkJd0N1bW0gPSB3Q3VtbSArIGRvdGVzdERvY3VtZW50V2Fsa2luZ1dpdGhUaHJlYWRMb2NhbChuVGhyZWFkcyk7Ci0JCQl9Ci0JCX0KLQkJLy8gaWYgZ2V0cyB0byBoZXJlICh3aXRoIG5vIGV4Y2VwdGlvbnMpIGFsbCBpcyBvay4KLQkJYXNzZXJ0VHJ1ZSgwID09IDApOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxFeGFtcGxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxFeGFtcGxlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0N2QwMWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL2NvcmUvdGVzdHMvdGhyZWFkaW5nL1RocmVhZExvY2FsRXhhbXBsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMudGhyZWFkaW5nOwotCi1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLQotLyoqCi0gKiBTZWUgaHR0cDovL2phdmEuc3VuLmNvbS9kZXZlbG9wZXIvSkRDVGVjaFRpcHMvMjAwMy90dDEyMDguaHRtbCMyIGZvcgotICogaW5mb3JtYXRpdmUgYXJ0aWNsZS4KLSAqLwotcHVibGljIGNsYXNzIFRocmVhZExvY2FsRXhhbXBsZSB7Ci0KLQkvLyBDcmVhdGUgdGhyZWFkIGxvY2FsIGNsYXNzCi0JLy8gSW5pdGlhbCB2YWx1ZSBpcyBhIHJhbmRvbSBudW1iZXIgZnJvbSAwLTk5OQotCXByaXZhdGUgc3RhdGljIGNsYXNzIE15VGhyZWFkTG9jYWwgZXh0ZW5kcyBUaHJlYWRMb2NhbCB7Ci0JCXByaXZhdGUgUmFuZG9tIGlubmVyUmFuZG9tID0gbmV3IFJhbmRvbSgpOwotCi0JCXByb3RlY3RlZCBPYmplY3QgaW5pdGlhbFZhbHVlKCkgewotCQkJcmV0dXJuIG5ldyBJbnRlZ2VyKGlubmVyUmFuZG9tLm5leHRJbnQoMTAwMCkpOwotCQl9Ci0JfQotCi0JLy8gQ3JlYXRlIGNsYXNzIHZhcmlhYmxlCi0Jc3RhdGljIHZvbGF0aWxlIGludCBjb3VudGVyID0gMDsKLQotCS8vIERlZmluZS9jcmVhdGUgdGhyZWFkIGxvY2FsIHZhcmlhYmxlCi0Jc3RhdGljIFRocmVhZExvY2FsIHRocmVhZExvY2FsID0gbmV3IE15VGhyZWFkTG9jYWwoKTsKLQotCS8vIEZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24KLQkvLyBzdGF0aWMgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQotCS8vIERpc3BsYXlzIHRocmVhZCBsb2NhbCB2YXJpYWJsZSwgY291bnRlciwKLQkvLyBhbmQgdGhyZWFkIG5hbWUKLQlzdGF0aWMgdm9pZCBkaXNwbGF5VmFsdWVzKCkgewotCQlTeXN0ZW0ub3V0LnByaW50bG4odGhyZWFkTG9jYWwuZ2V0KCkgKyAiXHQiICsgY291bnRlciArICJcdCIgKyBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldE5hbWUoKSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ3NbXSkgewotCi0JCS8vIEVhY2ggdGhyZWFkIGluY3JlbWVudHMgY291bnRlcgotCQkvLyBEaXNwbGF5cyB2YXJpYWJsZSBpbmZvCi0JCS8vIEFuZCBzbGVlcHMgZm9yIHRoZSByYW5kb20gYW1vdW50IG9mIHRpbWUKLQkJLy8gQmVmb3JlIGRpc3BsYXlpbmcgaW5mbyBhZ2FpbgotCQlSdW5uYWJsZSBydW5uZXIgPSBuZXcgUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJc3luY2hyb25pemVkIChUaHJlYWRMb2NhbEV4YW1wbGUuY2xhc3MpIHsKLQkJCQkJY291bnRlcisrOwotCQkJCX0KLQkJCQlkaXNwbGF5VmFsdWVzKCk7Ci0JCQkJdHJ5IHsKLQkJCQkJVGhyZWFkLnNsZWVwKCgoSW50ZWdlcikgdGhyZWFkTG9jYWwuZ2V0KCkpLmludFZhbHVlKCkpOwotCQkJCQlkaXNwbGF5VmFsdWVzKCk7Ci0JCQkJfQotCQkJCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJfQotCQkJfQotCQl9OwotCi0JCS8vIEFub3RoZXIgaW5zdGFuY2Ugb2YgY2xhc3MgY3JlYXRlZAotCQkvLyBhbmQgdmFsdWVzIGRpc3BsYXllZAotCQlkaXNwbGF5VmFsdWVzKCk7Ci0KLQkJLy8gSGVyZSdzIHdoZXJlIHRoZSBvdGhlciB0aHJlYWRzCi0JCS8vIGFyZSBhY3R1YWxseSBjcmVhdGVkCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSB7Ci0JCQlUaHJlYWQgdCA9IG5ldyBUaHJlYWQocnVubmVyKTsKLQkJCXQuc3RhcnQoKTsKLQkJfQotCX0KLQotCS8qKgotCSAqICAKLQkgKi8KLQlwdWJsaWMgVGhyZWFkTG9jYWxFeGFtcGxlKCkgewotCQlzdXBlcigpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvY29yZS90ZXN0cy90aHJlYWRpbmcvVGhyZWFkTG9jYWxJbnN0YW5jZUV4YW1wbGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDA4ZjU5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS9jb3JlL3Rlc3RzL3RocmVhZGluZy9UaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMudGhyZWFkaW5nOwotCi1pbXBvcnQgamF2YS51dGlsLlJhbmRvbTsKLQotLyoqCi0gKiBTZWUgaHR0cDovL2phdmEuc3VuLmNvbS9kZXZlbG9wZXIvSkRDVGVjaFRpcHMvMjAwMy90dDEyMDguaHRtbCMyIGZvcgotICogaW5mb3JtYXRpdmUgYXJ0aWNsZS4KLSAqLwotcHVibGljIGNsYXNzIFRocmVhZExvY2FsSW5zdGFuY2VFeGFtcGxlIHsKLQotCS8vIENyZWF0ZSB0aHJlYWQgbG9jYWwgY2xhc3MKLQkvLyBJbml0aWFsIHZhbHVlIGlzIGEgcmFuZG9tIG51bWJlciBmcm9tIDAtOTk5Ci0JcHJpdmF0ZSBjbGFzcyBNeVRocmVhZExvY2FsIGV4dGVuZHMgVGhyZWFkTG9jYWwgewotCQlwcml2YXRlIFJhbmRvbSBpbm5lclJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQotCQlwcm90ZWN0ZWQgT2JqZWN0IGluaXRpYWxWYWx1ZSgpIHsKLQkJCXJldHVybiBuZXcgSW50ZWdlcihpbm5lclJhbmRvbS5uZXh0SW50KDEwMDApKTsKLQkJfQotCX0KLQotCS8vIENyZWF0ZSBjbGFzcyB2YXJpYWJsZQotCXN0YXRpYyB2b2xhdGlsZSBpbnQgY291bnRlciA9IDA7Ci0KLQkvLyBEZWZpbmUvY3JlYXRlIHRocmVhZCBsb2NhbCB2YXJpYWJsZQotCVRocmVhZExvY2FsIHRocmVhZExvY2FsID0gbmV3IE15VGhyZWFkTG9jYWwoKTsKLQotCS8vIEZvciByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24KLQkvLyBzdGF0aWMgUmFuZG9tIHJhbmRvbSA9IG5ldyBSYW5kb20oKTsKLQotCS8vIERpc3BsYXlzIHRocmVhZCBsb2NhbCB2YXJpYWJsZSwgY291bnRlciwKLQkvLyBhbmQgdGhyZWFkIG5hbWUKLQl2b2lkIGRpc3BsYXlWYWx1ZXMoKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbih0aHJlYWRMb2NhbC5nZXQoKSArICJcdCIgKyBjb3VudGVyICsgIlx0IiArIFRocmVhZC5jdXJyZW50VGhyZWFkKCkuZ2V0TmFtZSgpKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmcgYXJnc1tdKSB7Ci0JCW5ldyBUaHJlYWRMb2NhbEluc3RhbmNlRXhhbXBsZSgpLnN0YXJ0UnVuKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHN0YXJ0UnVuKCkgewotCi0JCS8vIEVhY2ggdGhyZWFkIGluY3JlbWVudHMgY291bnRlcgotCQkvLyBEaXNwbGF5cyB2YXJpYWJsZSBpbmZvCi0JCS8vIEFuZCBzbGVlcHMgZm9yIHRoZSByYW5kb20gYW1vdW50IG9mIHRpbWUKLQkJLy8gQmVmb3JlIGRpc3BsYXlpbmcgaW5mbyBhZ2FpbgotCQlSdW5uYWJsZSBydW5uZXIgPSBuZXcgUnVubmFibGUoKSB7Ci0JCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJc3luY2hyb25pemVkICh0aGlzKSB7Ci0JCQkJCWNvdW50ZXIrKzsKLQkJCQl9Ci0JCQkJZGlzcGxheVZhbHVlcygpOwotCQkJCXRyeSB7Ci0JCQkJCVRocmVhZC5zbGVlcCgoKEludGVnZXIpIHRocmVhZExvY2FsLmdldCgpKS5pbnRWYWx1ZSgpKTsKLQkJCQkJZGlzcGxheVZhbHVlcygpOwotCQkJCX0KLQkJCQljYXRjaCAoSW50ZXJydXB0ZWRFeGNlcHRpb24gZSkgewotCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfTsKLQotCQkvLyBBbm90aGVyIGluc3RhbmNlIG9mIGNsYXNzIGNyZWF0ZWQKLQkJLy8gYW5kIHZhbHVlcyBkaXNwbGF5ZWQKLQkJZGlzcGxheVZhbHVlcygpOwotCi0JCS8vIEhlcmUncyB3aGVyZSB0aGUgb3RoZXIgdGhyZWFkcwotCQkvLyBhcmUgYWN0dWFsbHkgY3JlYXRlZAotCQlmb3IgKGludCBpID0gMDsgaSA8IDU7IGkrKykgewotCQkJVGhyZWFkIHQgPSBuZXcgVGhyZWFkKHJ1bm5lcik7Ci0JCQl0LnN0YXJ0KCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIFRocmVhZExvY2FsSW5zdGFuY2VFeGFtcGxlKCkgewotCQlzdXBlcigpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZTNjYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGVzdHMuU1NFTW9kZWxUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5OTU4NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IHBhdGg9Im9yZy5lY2xpcHNlLnBkZS5jb3JlLnJlcXVpcmVkUGx1Z2lucyIga2luZD0iY29uIj4KLQkJPGFjY2Vzc3J1bGVzPgotCQkJPGFjY2Vzc3J1bGUga2luZD0iYWNjZXNzaWJsZSIgcGF0dGVybj0ib3JnL2VjbGlwc2Uvd3N0LyoqIi8+Ci0JCTwvYWNjZXNzcnVsZXM+Ci0JPC9jbGFzc3BhdGhlbnRyeT4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ib3V0cHV0IiBwYXRoPSJiaW4iLz4KLTwvY2xhc3NwYXRoPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNzJhMWQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotYmluCi1idWlsZC54bWwKLXRlbXAuZm9sZGVyCi1zc2VlZGl0b3J0ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjA3MmI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3YmFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYWFkYzc3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiBzc2VlZGl0b3J0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuU1NFVGVzdHNQbHVnaW4KLUJ1bmRsZS1WZW5kb3I6ICVCdW5kbGUtVmVuZG9yLjAKLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS51aS5pZGUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmp1bml0LAotIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLAotIG9yZy5lY2xpcHNlLnVpLndvcmtiZW5jaC50ZXh0ZWRpdG9yLAotIG9yZy5lY2xpcHNlLnVpLmVkaXRvcnMsCi0gb3JnLmVjbGlwc2UuamZhY2UudGV4dCwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi5tb2R1bGVjb3JlLAotIGNvbS5pYm0uaWN1Ci1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE3ZjQxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLnNzZWVkaXRvcnRlc3RzLmphciA9IHNyYy8KLW91dHB1dC5zc2VlZGl0b3J0ZXN0cy5qYXIgPSBiaW4vCi1iaW4uaW5jbHVkZXMgPSBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHNzZWVkaXRvcnRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9pY29ucy9zb3VyY2VFZGl0b3IuZ2lmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWViZGI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjRlMWZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwotQnVuZGxlLU5hbWUuMCA9IFN0cnVjdHVyZWQgU291cmNlIEVkaXRvciBUZXN0cwotZWRpdG9yLm5hbWUuMCA9IEdlbmVyaWMgU3RydWN0dXJlZCBUZXh0IEVkaXRvcgotY2F0ZWdvcnkubmFtZS4wID0gU1NFIFRlc3RpbmcKLXZpZXcubmFtZS4wID0gRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXQgTWFuYWdlbWVudCBUZXN0ZXIKLXZpZXcubmFtZS4xID0gQWN0aW9uIFRlc3RlcgotYWN0aW9uLmxhYmVsLjAgPSBvcmcuZWNsaXBzZS51aS5wb3B1cE1lbnVzIFRlc3QgQWN0aW9uClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTAwZjgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+Ci0JCTxlZGl0b3IKLQkJCW5hbWU9IiVlZGl0b3IubmFtZS4wIgotCQkJZXh0ZW5zaW9ucz0icHJvamVjdCwgY2xhc3NwYXRoLCB3ZWJzZXR0aW5ncywgc2VydmVyUHJlZmVyZW5jZSIKLQkJCWljb249IiRubCQvaWNvbnMvc291cmNlRWRpdG9yLmdpZiIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yIgotCQkJY29udHJpYnV0b3JDbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5hY3Rpb25zLkFjdGlvbkNvbnRyaWJ1dG9yIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IudGVzdCI+Ci0JCTwvZWRpdG9yPgotCTwvZXh0ZW5zaW9uPgotCQotCTwhLS0gRWRpdG9yIGFjdGlvbnNldHMgLS0+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkuYWN0aW9uU2V0UGFydEFzc29jaWF0aW9ucyI+Ci0JCTxhY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS51aS5lZGl0LnRleHQuYWN0aW9uU2V0LmFubm90YXRpb25OYXZpZ2F0aW9uIj4KLQkJCTxwYXJ0Ci0JCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3IudGVzdCI+Ci0JCQk8L3BhcnQ+Ci0JCTwvYWN0aW9uU2V0UGFydEFzc29jaWF0aW9uPgotCQk8YWN0aW9uU2V0UGFydEFzc29jaWF0aW9uCi0JCQl0YXJnZXRJRD0ib3JnLmVjbGlwc2UudWkuTmF2aWdhdGVBY3Rpb25TZXQiPgotCQkJPHBhcnQKLQkJCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvci50ZXN0Ij4KLQkJCTwvcGFydD4KLQkJPC9hY3Rpb25TZXRQYXJ0QXNzb2NpYXRpb24+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS51aS52aWV3cyI+Ci0JCTxjYXRlZ29yeQotCQkJbmFtZT0iJWNhdGVnb3J5Lm5hbWUuMCIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIj4KLQkJPC9jYXRlZ29yeT4KLQkJPHZpZXcKLQkJCW5hbWU9IiV2aWV3Lm5hbWUuMCIKLQkJCWNhdGVnb3J5PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXRWaWV3IgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXRWaWV3Ij4KLQkJPC92aWV3PgotCQk8dmlldwotCQkJbmFtZT0iJXZpZXcubmFtZS4xIgotCQkJY2F0ZWdvcnk9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiCi0JCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy5BY3Rpb25UZXN0VmlldyIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLkFjdGlvblRlc3RWaWV3Ij4KLQkJPC92aWV3PgotCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkucG9wdXBNZW51cyI+Ci0JCTx2aWV3ZXJDb250cmlidXRpb24KLQkJCXRhcmdldElEPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yLkVkaXRvckNvbnRleHQiCi0JCQlpZD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy50ZXN0Ij4KLQkJCTxhY3Rpb24KLQkJCQlsYWJlbD0iJWFjdGlvbi5sYWJlbC4wIgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlRlc3RBY3Rpb25EZWxlZ2F0ZSIKLQkJCQltZW51YmFyUGF0aD0iYWRkaXRpb25zIgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLnRlc3QuMSIgLz4KLQkJPC92aWV3ZXJDb250cmlidXRpb24+Ci0JPC9leHRlbnNpb24+Ci0KLQk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmVkaXRvckNvbmZpZ3VyYXRpb24iPgotCQk8cHJvdmlzaW9uYWxDb25maWd1cmF0aW9uCi0JCQl0eXBlPSJsaW5lc3R5bGVwcm92aWRlciIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzLlRlc3RMaW5lU3R5bGVQcm92aWRlciIKLQkJCXRhcmdldD0ib3JnLmVjbGlwc2Uud3N0Lmh0bWwuU0NSSVBULmxhbmd1YWdlLkJMVUUiIC8+Ci0JCTxwcm92aXNpb25hbENvbmZpZ3VyYXRpb24KLQkJCXR5cGU9ImxpbmVzdHlsZXByb3ZpZGVyIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuVGVzdExpbmVTdHlsZVByb3ZpZGVyIgotCQkJdGFyZ2V0PSJvcmcuZWNsaXBzZS53c3QuaHRtbC5TQ1JJUFQudHlwZS5URVhUL0JMVUUiIC8+Ci0JCTxwcm92aXNpb25hbENvbmZpZ3VyYXRpb24KLQkJCXR5cGU9ImxpbmVzdHlsZXByb3ZpZGVyIgotCQkJY2xhc3M9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuVGVzdExpbmVTdHlsZVByb3ZpZGVyIgotCQkJdGFyZ2V0PSJvcmcuZWNsaXBzZS5qc3QuanNwLlNDUklQVC5CTFVFIiAvPgotCTwvZXh0ZW5zaW9uPgotCQotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0FjdGlvblRlc3RWaWV3LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0FjdGlvblRlc3RWaWV3LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOGM3ZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9BY3Rpb25UZXN0Vmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTcyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLkFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUFjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSUNvbnRyaWJ1dGlvbkl0ZW07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5Eb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklUZXh0Vmlld2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU3RydWN0dXJlZFNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uU3R5bGVkVGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JU2VsZWN0aW9uTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVZpZXdTaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBhcnRJbml0RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVGV4dEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUuQ29tcG9uZW50Q29yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLmNvbXBvbmVudGNvcmUucmVzb3VyY2VzLklWaXJ0dWFsUmVzb3VyY2U7Ci0KLQotLyoqCi0gKiBAYXV0aG9yIG5pdGluCi0gKiAKLSAqIEEgdmlldyB0byBoYW5nIGFjdGlvbnMgb2ZmIG9mIHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYXQgYXJiaXRyYXJ5IHRpbWVzLgotICovCi1wdWJsaWMgY2xhc3MgQWN0aW9uVGVzdFZpZXcgZXh0ZW5kcyBWaWV3UGFydCB7Ci0KLQlwcml2YXRlIGNsYXNzIENvbXBvbmVudFZpZXdlciBleHRlbmRzIEFjdGlvbiB7Ci0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJaWYgKGZTZWxlY3Rpb24gIT0gbnVsbCAmJiAhZlNlbGVjdGlvbi5pc0VtcHR5KCkgJiYgZlNlbGVjdGlvbiBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBmU2VsZWN0aW9uOwotCQkJCWlmIChzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCkgaW5zdGFuY2VvZiBJUmVzb3VyY2UpIHsKLQkJCQkJSVJlc291cmNlIHJlc291cmNlID0gKElSZXNvdXJjZSkgc2VsZWN0aW9uLmdldEZpcnN0RWxlbWVudCgpOwotCQkJCQlJVmlydHVhbFJlc291cmNlW10gdmlydHVhbFJlc291cmNlcyA9IENvbXBvbmVudENvcmUuY3JlYXRlUmVzb3VyY2VzKHJlc291cmNlLmdldFByb2plY3QoKSk7Ci0JCQkJCS8vIE9ubHkgcmV0dXJuIHJlc3VsdHMgZm9yIEZsZXhpYmxlIHByb2plY3RzCi0JCQkJCWlmICh2aXJ0dWFsUmVzb3VyY2VzICE9IG51bGwpIHsKLQkJCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgdmlydHVhbFJlc291cmNlcy5sZW5ndGg7IGkrKykgewotCQkJCQkJCVN5c3RlbS5vdXQucHJpbnRsbih2aXJ0dWFsUmVzb3VyY2VzW2ldLmdldENvbXBvbmVudCgpLmdldFJvb3RGb2xkZXIoKS5nZXRXb3Jrc3BhY2VSZWxhdGl2ZVBhdGgoKSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljbGFzcyBFbXB0eVRleHRTZXR0ZXIgZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgRW1wdHlUZXh0U2V0dGVyKCkgewotCQkJc3VwZXIoIlNldCBUZXh0IEVkaXRvciB0ZXh0IHRvIGVtcHR5Iik7Ci0JCQlzZXRUb29sVGlwVGV4dCgiU2V0IFRleHQgRWRpdG9yIHRleHQgdG8gZW1wdHkgdXNpbmcgc2V0KCkgQVBJIik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JQYXJ0IGVkaXRvciA9IGdldFZpZXdTaXRlKCkuZ2V0UGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJSVRleHRFZGl0b3IgdGV4dEVkaXRvciA9IG51bGw7Ci0JCQlpZiAoZWRpdG9yIGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0JCQkJdGV4dEVkaXRvciA9IChJVGV4dEVkaXRvcikgZWRpdG9yOwotCQkJZWxzZQotCQkJCXRleHRFZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvci5nZXRBZGFwdGVyKElUZXh0RWRpdG9yLmNsYXNzKTsKLQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSB0ZXh0RWRpdG9yLmdldERvY3VtZW50UHJvdmlkZXIoKS5nZXREb2N1bWVudChlZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCQkJZG9jdW1lbnQuc2V0KCIiKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXByaW50KCJFcnJvciBnZXR0aW5nIElEb2N1bWVudC5cbiIpOwotCQkJfQotCQl9Ci0JfQotCi0JQ29udHJvbCBmQ29udHJvbCA9IG51bGw7Ci0KLQlJU2VsZWN0aW9uIGZTZWxlY3Rpb247Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uTGlzdGVuZXIgZlNlbGVjdGlvbkxpc3RlbmVyOwotCi0JcHJpdmF0ZSBMaXN0IGNyZWF0ZUFjdGlvbnMoKSB7Ci0JCUxpc3QgYWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQotCQlhY3Rpb25zLmFkZChuZXcgRW1wdHlUZXh0U2V0dGVyKCkpOwotCQlhY3Rpb25zLmFkZChuZXcgQ29tcG9uZW50Vmlld2VyKCkpOwotCQlyZXR1cm4gYWN0aW9uczsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBMaXN0IGNyZWF0ZUNvbnRyaWJ1dHV0aW9ucygpIHsKLQkJTGlzdCBhY3Rpb25zID0gbmV3IEFycmF5TGlzdCgpOwotCQlyZXR1cm4gYWN0aW9uczsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCUlUZXh0Vmlld2VyIHRleHQgPSBuZXcgVGV4dFZpZXdlcihwYXJlbnQsIFNXVC5SRUFEX09OTFkpOwotCQl0ZXh0LnNldERvY3VtZW50KG5ldyBEb2N1bWVudCgpKTsKLQkJZkNvbnRyb2wgPSB0ZXh0LmdldFRleHRXaWRnZXQoKTsKLQkJdGV4dC5nZXREb2N1bWVudCgpLnNldCgiVXNlIGVpdGhlciB0aGUgdG9vbGJhciBvciB0aGUgbWVudSB0byBydW4geW91ciBhY3Rpb25zXG5cbiIpOwotCX0KLQotCXByaXZhdGUgSVNlbGVjdGlvbkxpc3RlbmVyIGdldFNlbGVjdGlvbkxpc3RlbmVyKCkgewotCQlpZiAoZlNlbGVjdGlvbkxpc3RlbmVyID09IG51bGwpIHsKLQkJCWZTZWxlY3Rpb25MaXN0ZW5lciA9IG5ldyBJU2VsZWN0aW9uTGlzdGVuZXIoKSB7Ci0JCQkJcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJV29ya2JlbmNoUGFydCBwYXJ0LCBJU2VsZWN0aW9uIHNlbGVjdGlvbikgewotCQkJCQlmU2VsZWN0aW9uID0gc2VsZWN0aW9uOwotCQkJCX0KLQkJCX07Ci0JCX0KLQkJcmV0dXJuIGZTZWxlY3Rpb25MaXN0ZW5lcjsKLQl9Ci0KLQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChvcmcuZWNsaXBzZS51aS5JVmlld1NpdGUpCi0JICovCi0JcHVibGljIHZvaWQgaW5pdChJVmlld1NpdGUgc2l0ZSkgdGhyb3dzIFBhcnRJbml0RXhjZXB0aW9uIHsKLQkJc3VwZXIuaW5pdChzaXRlKTsKLQkJTGlzdCBhY3Rpb25zID0gY3JlYXRlQWN0aW9ucygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGFjdGlvbnMuc2l6ZSgpOyBpKyspIHsKLQkJCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKChJQWN0aW9uKSBhY3Rpb25zLmdldChpKSk7Ci0JCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZCgoSUFjdGlvbikgYWN0aW9ucy5nZXQoaSkpOwotCQl9Ci0JCUxpc3QgY29udHJpYnV0aW9ucyA9IGNyZWF0ZUNvbnRyaWJ1dHV0aW9ucygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRyaWJ1dGlvbnMuc2l6ZSgpOyBpKyspIHsKLQkJCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKChJQ29udHJpYnV0aW9uSXRlbSkgY29udHJpYnV0aW9ucy5nZXQoaSkpOwotCQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQoKElDb250cmlidXRpb25JdGVtKSBjb250cmlidXRpb25zLmdldChpKSk7Ci0JCX0KLQkJc2l0ZS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRTZWxlY3Rpb25TZXJ2aWNlKCkuYWRkUG9zdFNlbGVjdGlvbkxpc3RlbmVyKGdldFNlbGVjdGlvbkxpc3RlbmVyKCkpOwotCX0KLQotCXZvaWQgcHJpbnQoU3RyaW5nIHMpIHsKLQkJKChTdHlsZWRUZXh0KSBmQ29udHJvbCkuYXBwZW5kKHMpOwotCX0KLQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWlmIChmQ29udHJvbCAhPSBudWxsICYmICFmQ29udHJvbC5pc0Rpc3Bvc2VkKCkpIHsKLQkJCWZDb250cm9sLnNldEZvY3VzKCk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Db21tb25FZGl0b3JQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvQ29tbW9uRWRpdG9yUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE0NDJjMGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Db21tb25FZGl0b3JQcmVmZXJlbmNlc1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TU0VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnByZWZlcmVuY2VzLkNvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci0KLS8qKgotICogVGhlIHB1cnBvc2Ugb2YgdGhpcyB0ZXN0IGlzIHRvIHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgdGhlCi0gKiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcidzIGNvbW1vbiBlZGl0b3IgcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUKLSAqIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgQ29tbW9uRWRpdG9yUHJlZmVyZW5jZXNUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRlc3RzIGV4aXN0YW5jZSBvZiBwcmVmZXJlbmNlIHZhbHVlcyB3aGVuIGdldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZXMKLQkgKiB0aHJvdWdoIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJ1bmRsZUdldFByZWZlcmVuY2VzKCkgewotCQlmaW5hbCBTdHJpbmcgYnVuZGxlTmFtZSA9ICJvcmcuZWNsaXBzZS53c3Quc3NlLnVpIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0gY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIGRlZmF1bHRWYWx1ZSA9IExvbmcudG9TdHJpbmcoU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkpOwkvLyByYW5kb20gc3RyaW5nCi0JCQotCQlTdHJpbmcgdmFsdWUgPSBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKS5nZXRTdHJpbmcoYnVuZGxlTmFtZSwgcHJlZktleSwgZGVmYXVsdFZhbHVlLCBudWxsKTsKLQkJYXNzZXJ0Tm90U2FtZSgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZS4gS2V5OiAiK3ByZWZLZXksIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOwkJCi0JfQotCi0JLyoqCi0JICogVGVzdHMgZGVmYXVsdCB2YWx1ZXMgb2YgcHJlZmVyZW5jZXMuCi0JICogCi0JICogTk9URTogRXhwZWN0ZWQgZGVmYXVsdCB2YWx1ZXMgYXJlIGhhcmQtY29kZWQsIHNvIGlmIGRlZmF1bHQgdmFsdWVzIGRvCi0JICogZ2V0IGNoYW5nZWQsIGFzc2VydGlvbnMgbmVlZCB0byBiZSB1cGRhdGVkIGFzIHdlbGwKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2VzKCkgewotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gU1NFVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQkKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMsIEJvb2xlYW4udG9TdHJpbmcodHJ1ZSkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIrcHJlZktleSwgZXhwZWN0ZWQsIGRlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihzdG9yZSwgQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUyk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihJUHJlZmVyZW5jZVN0b3JlIHN0b3JlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlib29sZWFuIGV4cGVjdGVkVmFsdWUgPSAhb3JpZ2luYWxWYWx1ZTsKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCWJvb2xlYW4gZm91bmRWYWx1ZSA9IHN0b3JlLmdldEJvb2xlYW4ocHJlZktleSk7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIitwcmVmS2V5KyIgIGV4cGVjdGVkOiAiICsgZXhwZWN0ZWRWYWx1ZSArICIgZm91bmQ6ICIgKyBmb3VuZFZhbHVlLCBleHBlY3RlZFZhbHVlLCBmb3VuZFZhbHVlKTsKLQotCQkvLyBhdHRlbXB0IHRvIHJlc3RvcmUgb3JpZ2luYWwgcHJlZmVyZW5jZSB2YWx1ZQotCQlzdG9yZS5zZXRWYWx1ZShwcmVmS2V5LCBvcmlnaW5hbFZhbHVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0V4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0Vmlldy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9FeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dFZpZXcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjBkMzIwZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL0V4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0Vmlldy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLm5pby5CeXRlQnVmZmVyOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklTdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uU2VwYXJhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRXJyb3JEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkFycmF5Q29udGVudFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuQ2VsbEVkaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLkNvbHVtbldlaWdodERhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5Eb3VibGVDbGlja0V2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSURvdWJsZUNsaWNrTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklMYWJlbFByb3ZpZGVyTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVRhYmxlTGFiZWxQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlNlbGVjdGlvbkNoYW5nZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLlRhYmxlTGF5b3V0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuVGFibGVWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5JbWFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5EaXNwbGF5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkZpbGVEaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuTWVudTsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UYWJsZUNvbHVtbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclJlZ2lzdHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklGaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVBlcnNpc3RhYmxlRWxlbWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JUmV1c2FibGVFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVN0b3JhZ2VFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JVmlld1NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmRpYWxvZ3MuUmVzb3VyY2VTZWxlY3Rpb25EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZWRpdG9ycy50ZXh0LkVkaXRvcnNVSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5tb2RlbC5Xb3JrYmVuY2hMYWJlbFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuRmlsZUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnBhcnQuVmlld1BhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JRWxlbWVudFN0YXRlTGlzdGVuZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JVXBkYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS51dGlscy5TdHJpbmdVdGlsczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLlNTRVVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXh0ZW5zaW9ucy5icmVha3BvaW50LklFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dDsKLQotCi0vKioKLSAqIEBhdXRob3Igbml0aW4KLSAqIAotICogQSB2aWV3IHRvIGFzc2lzdCBpbiB0ZXN0aW5nIG91dCBTdHJ1Y3R1cmVkVGV4dEVkaXRvcidzIElFZGl0b3JJbnB1dAotICogaGFuZGxpbmcuCi0gKiAKLSAqIFBlcm1hbmVudGx5IGluLXByb2dyZXNzLgotICovCi1wdWJsaWMgY2xhc3MgRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXRWaWV3IGV4dGVuZHMgVmlld1BhcnQgewotCS8qKgotCSAqIEFkZHMgYW4gSUZpbGVFZGl0b3JJbnB1dCB0byB0aGUgbGlzdCBvZiBpbnB1dHMgd2l0aCB3aGljaCB0byB0ZXN0Ci0JICovCi0JY2xhc3MgQWRkRmlsZUlucHV0QWN0aW9uIGV4dGVuZHMgQWN0aW9uIHsKLQkJcHVibGljIEFkZEZpbGVJbnB1dEFjdGlvbigpIHsKLQkJCXN1cGVyKCJBZGQgRmlsZUVkaXRvcklucHV0Iik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCVJlc291cmNlU2VsZWN0aW9uRGlhbG9nIGRsZyA9IG5ldyBSZXNvdXJjZVNlbGVjdGlvbkRpYWxvZyhmSW5wdXRMaXN0LmdldENvbnRyb2woKS5nZXRTaGVsbCgpLCBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLCAiQ2hvb3NlIik7Ci0JCQlpbnQgcmV0dmFsID0gZGxnLm9wZW4oKTsKLQkJCWlmIChyZXR2YWwgPT0gV2luZG93Lk9LKSB7Ci0JCQkJT2JqZWN0W10gZmlsZXMgPSBkbGcuZ2V0UmVzdWx0KCk7Ci0JCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGg7IGkrKykgewotCQkJCQlmSW5wdXRzLmFkZChuZXcgRmlsZUVkaXRvcklucHV0KChJRmlsZSkgZmlsZXNbaV0pKTsKLQkJCQl9Ci0JCQkJZklucHV0TGlzdC5yZWZyZXNoKHRydWUpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogQWRkcyBhbiBJU3RvcmFnZUVkaXRvcklucHV0IHRvIHRoZSBsaXN0IG9mIGlucHV0cyB3aXRoIHdoaWNoIHRvIHRlc3QKLQkgKi8KLQljbGFzcyBBZGRTdG9yYWdlSW5wdXRBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gewotCQlwdWJsaWMgQWRkU3RvcmFnZUlucHV0QWN0aW9uKCkgewotCQkJc3VwZXIoIkFkZCBTdG9yYWdlRWRpdG9ySW5wdXQiKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJRmlsZURpYWxvZyBkbGcgPSBuZXcgRmlsZURpYWxvZyhmSW5wdXRMaXN0LmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCVN0cmluZyBmaWxlTmFtZSA9IGRsZy5vcGVuKCk7Ci0JCQlpZiAoZmlsZU5hbWUgIT0gbnVsbCkgewotCQkJCWZJbnB1dHMuYWRkKG5ldyBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQobmV3IEZpbGUoZmlsZU5hbWUpKSk7Ci0JCQkJZklucHV0TGlzdC5yZWZyZXNoKHRydWUpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogSGFuZGxlciBmb3IgZG91YmxlLWNsaWNrIAotCSAqLwotCWNsYXNzIERvdWJsZUNsaWNrTGlzdGVuZXIgaW1wbGVtZW50cyBJRG91YmxlQ2xpY2tMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIGRvdWJsZUNsaWNrKERvdWJsZUNsaWNrRXZlbnQgZXZlbnQpIHsKLQkJCW5ldyBJbnB1dE9wZW5BY3Rpb24oKS5ydW4oKTsKLQkJfQotCX0KLQotCWNsYXNzIEVkaXRvcklucHV0TGFiZWxQcm92aWRlciBpbXBsZW1lbnRzIElUYWJsZUxhYmVsUHJvdmlkZXIgewotCQlJTGFiZWxQcm92aWRlciBiYXNlUHJvdmlkZXIgPSBuZXcgV29ya2JlbmNoTGFiZWxQcm92aWRlcigpOwotCi0JCXB1YmxpYyB2b2lkIGFkZExpc3RlbmVyKElMYWJlbFByb3ZpZGVyTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJCS8vIG5vdCBpbXBsZW1lbnRlZAotCQl9Ci0KLQkJcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJCS8vIG5vIG5lZWQKLQkJfQotCi0JCXB1YmxpYyBJbWFnZSBnZXRDb2x1bW5JbWFnZShPYmplY3QgZWxlbWVudCwgaW50IGNvbHVtbkluZGV4KSB7Ci0JCQlpZiAoZWxlbWVudCBpbnN0YW5jZW9mIElGaWxlRWRpdG9ySW5wdXQgJiYgY29sdW1uSW5kZXggPT0gMCkgewotCQkJCXJldHVybiBiYXNlUHJvdmlkZXIuZ2V0SW1hZ2UoKChJRmlsZUVkaXRvcklucHV0KSBlbGVtZW50KS5nZXRGaWxlKCkpOwotCQkJfQotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQlwdWJsaWMgU3RyaW5nIGdldENvbHVtblRleHQoT2JqZWN0IGVsZW1lbnQsIGludCBjb2x1bW5JbmRleCkgewotCQkJSUVkaXRvcklucHV0IGlucHV0ID0gKElFZGl0b3JJbnB1dCkgZWxlbWVudDsKLQkJCVN0cmluZyB0ZXh0ID0gbnVsbDsKLQkJCXN3aXRjaCAoY29sdW1uSW5kZXgpIHsKLQkJCQljYXNlIDAgOgotCQkJCQl0cnkgewotCQkJCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCQkJCQlJUGF0aCBmdWxscGF0aCA9ICgoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSBlbGVtZW50KS5nZXRTdG9yYWdlKCkuZ2V0RnVsbFBhdGgoKTsKLQkJCQkJCQl0ZXh0ID0gZnVsbHBhdGggIT0gbnVsbCA/IGZ1bGxwYXRoLnRvU3RyaW5nKCkgOiAoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgZWxlbWVudCkuZ2V0TmFtZSgpOwotCQkJCQkJCWlmICgoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgZWxlbWVudCkuaXNEaXJ0eSgpKSB7Ci0JCQkJCQkJCXRleHQgPSAiKiIgKyB0ZXh0OwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJCWVsc2UgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBJRmlsZUVkaXRvcklucHV0KSB7Ci0JCQkJCQkJdGV4dCA9ICgoSUZpbGVFZGl0b3JJbnB1dCkgZWxlbWVudCkuZ2V0RmlsZSgpLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJCQl9Ci0KLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAxIDoKLQkJCQkJaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCQkJCXRleHQgPSAiRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0IjsKLQkJCQkJfQotCQkJCQllbHNlIGlmIChlbGVtZW50IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkgewotCQkJCQkJdGV4dCA9ICJGaWxlRWRpdG9ySW5wdXQiOwotCQkJCQl9Ci0JCQkJCWVsc2UgewotCQkJCQkJdGV4dCA9IGlucHV0LmdldENsYXNzKCkuZ2V0TmFtZSgpOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKHRleHQgPT0gbnVsbCkKLQkJCQl0ZXh0ID0gIiI7Ci0JCQlyZXR1cm4gdGV4dDsKLQkJfQotCi0JCXB1YmxpYyBib29sZWFuIGlzTGFiZWxQcm9wZXJ0eShPYmplY3QgZWxlbWVudCwgU3RyaW5nIHByb3BlcnR5KSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVMaXN0ZW5lcihJTGFiZWxQcm92aWRlckxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCQkvLyBub3QgaW1wbGVtZW50ZWQKLQkJfQotCX0KLQotCi0JY2xhc3MgRmlsZUJhY2tlZFN0b3JhZ2UgaW1wbGVtZW50cyBJU3RvcmFnZSB7Ci0JCUZpbGUgZkZpbGUgPSBudWxsOwotCi0JCUZpbGVCYWNrZWRTdG9yYWdlKEZpbGUgZmlsZSkgewotCQkJc3VwZXIoKTsKLQkJCWZGaWxlID0gZmlsZTsKLQkJfQotCi0JCWJvb2xlYW4gZXhpc3RzKCkgewotCQkJcmV0dXJuIGZGaWxlLmV4aXN0cygpOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSUFkYXB0YWJsZSNnZXRBZGFwdGVyKGphdmEubGFuZy5DbGFzcykKLQkJICovCi0JCXB1YmxpYyBPYmplY3QgZ2V0QWRhcHRlcihDbGFzcyBhZGFwdGVyKSB7Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2UjZ2V0Q29udGVudHMoKQotCQkgKi8KLQkJcHVibGljIElucHV0U3RyZWFtIGdldENvbnRlbnRzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJSW5wdXRTdHJlYW0gY29udGVudHMgPSBudWxsOwotCQkJdHJ5IHsKLQkJCQljb250ZW50cyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZkZpbGUpOwotCQkJCUJ5dGVCdWZmZXIgYnVmZmVyID0gQnl0ZUJ1ZmZlci5hbGxvY2F0ZSgoaW50KSBmRmlsZS5sZW5ndGgoKSk7Ci0JCQkJYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbMjA0OF07Ci0JCQkJd2hpbGUgKGNvbnRlbnRzLmF2YWlsYWJsZSgpID4gMCkgewotCQkJCQlpbnQgY291bnQgPSBjb250ZW50cy5yZWFkKGJ5dGVzKTsKLQkJCQkJYnVmZmVyLnB1dChieXRlcywgMCwgY291bnQpOwotCQkJCX0KLQkJCQljb250ZW50cy5jbG9zZSgpOwotCi0JCQkJY29udGVudHMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0oYnVmZmVyLmFycmF5KCkpOwotCQkJfQotCQkJY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7Ci0JCQkJY29udGVudHMgPSBuZXcgQnl0ZUFycmF5SW5wdXRTdHJlYW0obmV3IGJ5dGVbMF0pOwotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQljb250ZW50cyA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSk7Ci0JCQl9Ci0JCQlyZXR1cm4gY29udGVudHM7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklTdG9yYWdlI2dldEZ1bGxQYXRoKCkKLQkJICovCi0JCXB1YmxpYyBJUGF0aCBnZXRGdWxsUGF0aCgpIHsKLQkJCWlmIChwcm92aWRlSVN0b3JhZ2VGdWxsUGF0aCkgewotCQkJCXJldHVybiBuZXcgUGF0aChmRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7Ci0JCQl9Ci0JCQlyZXR1cm4gbnVsbDsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVN0b3JhZ2UjZ2V0TmFtZSgpCi0JCSAqLwotCQlwdWJsaWMgU3RyaW5nIGdldE5hbWUoKSB7Ci0JCQlyZXR1cm4gZkZpbGUuZ2V0TmFtZSgpOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JU3RvcmFnZSNpc1JlYWRPbmx5KCkKLQkJICovCi0JCXB1YmxpYyBib29sZWFuIGlzUmVhZE9ubHkoKSB7Ci0JCQlyZXR1cm4gdHJ1ZTsKLQkJfQotCX0KLQotCWNsYXNzIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCBpbXBsZW1lbnRzIElFeHRlbmRlZFN0b3JhZ2VFZGl0b3JJbnB1dCB7Ci0JCUxpc3QgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycyA9IG5ldyBWZWN0b3IoMCk7Ci0JCWJvb2xlYW4gZklzRGlydHkgPSBmYWxzZTsKLQkJRmlsZUJhY2tlZFN0b3JhZ2UgZlN0b3JhZ2UgPSBudWxsOwotCi0JCUZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dChGaWxlIGZpbGUpIHsKLQkJCWZTdG9yYWdlID0gbmV3IEZpbGVCYWNrZWRTdG9yYWdlKGZpbGUpOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JRXh0ZW5kZWRTdG9yYWdlRWRpdG9ySW5wdXQjYWRkRWxlbWVudFN0YXRlTGlzdGVuZXIob3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5JRWxlbWVudFN0YXRlTGlzdGVuZXIpCi0JCSAqLwotCQlwdWJsaWMgdm9pZCBhZGRFbGVtZW50U3RhdGVMaXN0ZW5lcihJRWxlbWVudFN0YXRlTGlzdGVuZXIgbGlzdGVuZXIpIHsKLQkJCWZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTsKLQkJfQotCi0JCXZvaWQgZWxlbWVudENvbnRlbnRBYm91dFRvQmVSZXBsYWNlZCgpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5zaXplKCk7IGkrKykgewotCQkJCSgoSUVsZW1lbnRTdGF0ZUxpc3RlbmVyKSBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLmdldChpKSkuZWxlbWVudENvbnRlbnRBYm91dFRvQmVSZXBsYWNlZChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQudGhpcyk7Ci0JCQl9Ci0JCX0KLQotCQl2b2lkIGVsZW1lbnRDb250ZW50UmVwbGFjZWQoKSB7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuc2l6ZSgpOyBpKyspIHsKLQkJCQkoKElFbGVtZW50U3RhdGVMaXN0ZW5lcikgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5nZXQoaSkpLmVsZW1lbnRDb250ZW50UmVwbGFjZWQoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0LnRoaXMpOwotCQkJfQotCQl9Ci0KLQkJdm9pZCBlbGVtZW50RGVsZXRlZCgpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgZkVsZW1lbnRTdGF0ZUxpc3RlbmVycy5zaXplKCk7IGkrKykgewotCQkJCSgoSUVsZW1lbnRTdGF0ZUxpc3RlbmVyKSBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLmdldChpKSkuZWxlbWVudERlbGV0ZWQoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0LnRoaXMpOwotCQkJfQotCQl9Ci0KLQkJdm9pZCBlbGVtZW50RGlydHlTdGF0ZUNoYW5nZWQoYm9vbGVhbiBkaXJ0eSkgewotCQkJc2V0RGlydHkoZGlydHkpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLnNpemUoKTsgaSsrKSB7Ci0JCQkJKChJRWxlbWVudFN0YXRlTGlzdGVuZXIpIGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuZ2V0KGkpKS5lbGVtZW50RGlydHlTdGF0ZUNoYW5nZWQoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0LnRoaXMsIGRpcnR5KTsKLQkJCX0KLQkJfQotCi0JCXZvaWQgZWxlbWVudE1vdmVkKE9iamVjdCBvbGRFbGVtZW50LCBPYmplY3QgbmV3RWxlbWVudCkgewotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmRWxlbWVudFN0YXRlTGlzdGVuZXJzLnNpemUoKTsgaSsrKSB7Ci0JCQkJKChJRWxlbWVudFN0YXRlTGlzdGVuZXIpIGZFbGVtZW50U3RhdGVMaXN0ZW5lcnMuZ2V0KGkpKS5lbGVtZW50TW92ZWQoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0LnRoaXMsIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dC50aGlzKTsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0I2V4aXN0cygpCi0JCSAqLwotCQlwdWJsaWMgYm9vbGVhbiBleGlzdHMoKSB7Ci0JCQlyZXR1cm4gZlN0b3JhZ2UuZXhpc3RzKCk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JQWRhcHRhYmxlI2dldEFkYXB0ZXIoamF2YS5sYW5nLkNsYXNzKQotCQkgKi8KLQkJcHVibGljIE9iamVjdCBnZXRBZGFwdGVyKENsYXNzIGFkYXB0ZXIpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJRmlsZSBnZXRGaWxlKCkgewotCQkJcmV0dXJuIGZTdG9yYWdlLmZGaWxlOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQjZ2V0SW1hZ2VEZXNjcmlwdG9yKCkKLQkJICovCi0JCXB1YmxpYyBJbWFnZURlc2NyaXB0b3IgZ2V0SW1hZ2VEZXNjcmlwdG9yKCkgewotCQkJcmV0dXJuIG51bGw7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXROYW1lKCkKLQkJICovCi0JCXB1YmxpYyBTdHJpbmcgZ2V0TmFtZSgpIHsKLQkJCXJldHVybiBmU3RvcmFnZS5nZXROYW1lKCk7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRQZXJzaXN0YWJsZSgpCi0JCSAqLwotCQlwdWJsaWMgSVBlcnNpc3RhYmxlRWxlbWVudCBnZXRQZXJzaXN0YWJsZSgpIHsKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJLyoKLQkJICogKG5vbi1KYXZhZG9jKQotCQkgKiAKLQkJICogQHNlZSBvcmcuZWNsaXBzZS51aS5JU3RvcmFnZUVkaXRvcklucHV0I2dldFN0b3JhZ2UoKQotCQkgKi8KLQkJcHVibGljIElTdG9yYWdlIGdldFN0b3JhZ2UoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQlyZXR1cm4gZlN0b3JhZ2U7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dCNnZXRUb29sVGlwVGV4dCgpCi0JCSAqLwotCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJcmV0dXJuIGZTdG9yYWdlLmdldEZ1bGxQYXRoKCkgIT0gbnVsbCA/IGZTdG9yYWdlLmdldEZ1bGxQYXRoKCkudG9TdHJpbmcoKSA6IGZTdG9yYWdlLmdldE5hbWUoKTsKLQkJfQotCi0JCWJvb2xlYW4gaXNEaXJ0eSgpIHsKLQkJCXJldHVybiBmSXNEaXJ0eTsKLQkJfQotCi0JCS8qCi0JCSAqIChub24tSmF2YWRvYykKLQkJICogCi0JCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb25zLmJyZWFrcG9pbnQuSUV4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0I3JlbW92ZUVsZW1lbnRTdGF0ZUxpc3RlbmVyKG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSUVsZW1lbnRTdGF0ZUxpc3RlbmVyKQotCQkgKi8KLQkJcHVibGljIHZvaWQgcmVtb3ZlRWxlbWVudFN0YXRlTGlzdGVuZXIoSUVsZW1lbnRTdGF0ZUxpc3RlbmVyIGxpc3RlbmVyKSB7Ci0JCQlmRWxlbWVudFN0YXRlTGlzdGVuZXJzLnJlbW92ZShsaXN0ZW5lcik7Ci0JCX0KLQotCQl2b2lkIHNldERpcnR5KGJvb2xlYW4gZGlydHkpIHsKLQkJCWZJc0RpcnR5ID0gZGlydHk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBJbnB1dENoYW5nZURpcnR5U3RhdGVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJVXBkYXRlIHsKLQkJcHVibGljIElucHV0Q2hhbmdlRGlydHlTdGF0ZUFjdGlvbigpIHsKLQkJCXN1cGVyKCJUb2dnbGUgZGlydHkgZmxhZyIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBnZXRTZWxlY3RlZElucHV0cygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKLQkJCQlpZiAoaW5wdXRzW2ldIGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSB7Ci0JCQkJCSgoRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KSBpbnB1dHNbaV0pLmVsZW1lbnREaXJ0eVN0YXRlQ2hhbmdlZCghKChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0c1tpXSkuaXNEaXJ0eSgpKTsKLQkJCQl9Ci0JCQl9Ci0JCQlmSW5wdXRMaXN0LnJlZnJlc2godHJ1ZSk7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7Ci0JCQlzZXRFbmFibGVkKGZTZWxlY3RlZEVsZW1lbnQgIT0gbnVsbCAmJiBmU2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KTsKLQkJfQotCX0KLQotCWNsYXNzIElucHV0RGVsZXRlQWN0aW9uIGV4dGVuZHMgQWN0aW9uIGltcGxlbWVudHMgSVVwZGF0ZSB7Ci0JCXB1YmxpYyBJbnB1dERlbGV0ZUFjdGlvbigpIHsKLQkJCXN1cGVyKCJEZWxldGUgSW5wdXQiKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJSUVkaXRvcklucHV0W10gaW5wdXRzID0gZ2V0U2VsZWN0ZWRJbnB1dHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJaWYgKGlucHV0c1tpXSBpbnN0YW5jZW9mIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgewotCQkJCQkoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgaW5wdXRzW2ldKS5lbGVtZW50RGVsZXRlZCgpOwotCQkJCX0KLQkJCX0KLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJZklucHV0cy5yZW1vdmUoaW5wdXRzW2ldKTsKLQkJCX0KLQkJCWZJbnB1dExpc3QucmVmcmVzaCgpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgdXBkYXRlKCkgewotCQkJc2V0RW5hYmxlZChmU2VsZWN0ZWRFbGVtZW50ICE9IG51bGwgJiYgZlNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBJbnB1dE1vdmVBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJVXBkYXRlIHsKLQkJcHVibGljIElucHV0TW92ZUFjdGlvbigpIHsKLQkJCXN1cGVyKCJNb3ZlIElucHV0Iik7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQlzdXBlci5ydW4oKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IGdldFNlbGVjdGVkSW5wdXRzKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewotCQkJCWlmIChpbnB1dHNbaV0gaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCQkJKChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0c1tpXSkuZWxlbWVudE1vdmVkKGlucHV0c1tpXSwgaW5wdXRzW2ldKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCB1cGRhdGUoKSB7Ci0JCQlzZXRFbmFibGVkKGZTZWxlY3RlZEVsZW1lbnQgIT0gbnVsbCAmJiBmU2VsZWN0ZWRFbGVtZW50IGluc3RhbmNlb2YgRmlsZUJhc2VkU3RvcmFnZUVkaXRvcklucHV0KTsKLQkJfQotCX0KLQotCWNsYXNzIElucHV0T3BlbkFjdGlvbiBleHRlbmRzIEFjdGlvbiB7Ci0JCXB1YmxpYyBJbnB1dE9wZW5BY3Rpb24oKSB7Ci0JCQlzdXBlcigiT3BlbiIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBnZXRTZWxlY3RlZElucHV0cygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKLQkJCQl0cnkgewotCQkJCQlnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLm9wZW5FZGl0b3IoaW5wdXRzW2ldLCBnZXRFZGl0b3JJZChpbnB1dHNbaV0pKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKFBhcnRJbml0RXhjZXB0aW9uIGUpIHsKLQkJCQkJb3BlbkVycm9yKGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0U2hlbGwoKSwgIk9wZW5TeXN0ZW1FZGl0b3JBY3Rpb24uZGlhbG9nVGl0bGUiLCBlLmdldE1lc3NhZ2UoKSwgZSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JY2xhc3MgSW5wdXRSZXBsYWNlQ29udGVudHNBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJVXBkYXRlIHsKLQkJcHVibGljIElucHV0UmVwbGFjZUNvbnRlbnRzQWN0aW9uKCkgewotCQkJc3VwZXIoIlJlcGxhY2UgSW5wdXQncyBDb250ZW50cyIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBnZXRTZWxlY3RlZElucHV0cygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKLQkJCQkoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgaW5wdXRzW2ldKS5lbGVtZW50Q29udGVudEFib3V0VG9CZVJlcGxhY2VkKCk7Ci0JCQkJKChGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0c1tpXSkuZWxlbWVudENvbnRlbnRSZXBsYWNlZCgpOwotCQkJfQotCQl9Ci0KLQkJcHVibGljIHZvaWQgdXBkYXRlKCkgewotCQkJc2V0RW5hYmxlZChmU2VsZWN0ZWRFbGVtZW50ICE9IG51bGwgJiYgZlNlbGVjdGVkRWxlbWVudCBpbnN0YW5jZW9mIEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCk7Ci0JCX0KLQl9Ci0KLQljbGFzcyBSZW1vdmVJbnB1dEFjdGlvbiBleHRlbmRzIEFjdGlvbiB7Ci0JCXB1YmxpYyBSZW1vdmVJbnB1dEFjdGlvbigpIHsKLQkJCXN1cGVyKCJSZW1vdmUiKTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCXN1cGVyLnJ1bigpOwotCQkJSUVkaXRvcklucHV0W10gaW5wdXRzID0gZ2V0U2VsZWN0ZWRJbnB1dHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJZklucHV0cy5yZW1vdmUoaW5wdXRzW2ldKTsKLQkJCX0KLQkJCWZJbnB1dExpc3QucmVmcmVzaCgpOwotCQl9Ci0JfQotCi0JY2xhc3MgUmV1c2VFZGl0b3JBY3Rpb24gZXh0ZW5kcyBBY3Rpb24gaW1wbGVtZW50cyBJVXBkYXRlIHsKLQkJcHVibGljIFJldXNlRWRpdG9yQWN0aW9uKCkgewotCQkJc3VwZXIoIlJldXNlIEVkaXRvciIpOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJc3VwZXIucnVuKCk7Ci0JCQlJRWRpdG9ySW5wdXRbXSBpbnB1dHMgPSBnZXRTZWxlY3RlZElucHV0cygpOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKLQkJCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBnZXRTaXRlKCkuZ2V0V29ya2JlbmNoV2luZG93KCkuZ2V0QWN0aXZlUGFnZSgpLmdldEFjdGl2ZUVkaXRvcigpOwotCQkJCWlmIChlZGl0b3IgaW5zdGFuY2VvZiBJUmV1c2FibGVFZGl0b3IpIHsKLQkJCQkJZ2V0U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5yZXVzZUVkaXRvcigoKElSZXVzYWJsZUVkaXRvcikgZWRpdG9yKSwgaW5wdXRzW2ldKTsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCVNTRVVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRXb3JrYmVuY2goKS5nZXREaXNwbGF5KCkuYmVlcCgpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKLQkJCWJvb2xlYW4gZW5hYmxlID0gdHJ1ZTsKLQkJCXRyeSB7Ci0JCQkJZW5hYmxlID0gZlNlbGVjdGVkRWxlbWVudCAhPSBudWxsICYmIGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCkgaW5zdGFuY2VvZiBJUmV1c2FibGVFZGl0b3I7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQllbmFibGUgPSB0cnVlOwotCQkJfQotCQkJc2V0RW5hYmxlZChlbmFibGUpOwotCQl9Ci0JfQotCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGJvb2xlYW4gcHJvdmlkZUlTdG9yYWdlRnVsbFBhdGggPSB0cnVlOwotCi0JLyoqCi0JICogT3BlbiBhbiBlcnJvciBzdHlsZSBkaWFsb2cgZm9yIFBhcnRJbml0RXhjZXB0aW9uIGJ5IGluY2x1ZGluZyBhbnkgZXh0cmEKLQkgKiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBuZXN0ZWQgQ29yZUV4Y2VwdGlvbiBpZiBwcmVzZW50LgotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBvcGVuRXJyb3IoU2hlbGwgcGFyZW50LCBTdHJpbmcgdGl0bGUsIFN0cmluZyBtZXNzYWdlLCBQYXJ0SW5pdEV4Y2VwdGlvbiBleGNlcHRpb24pIHsKLQkJLy8gQ2hlY2sgZm9yIGEgbmVzdGVkIENvcmVFeGNlcHRpb24KLQkJQ29yZUV4Y2VwdGlvbiBuZXN0ZWRFeGNlcHRpb24gPSBudWxsOwotCQlJU3RhdHVzIHN0YXR1cyA9IGV4Y2VwdGlvbi5nZXRTdGF0dXMoKTsKLQkJaWYgKHN0YXR1cyAhPSBudWxsICYmIHN0YXR1cy5nZXRFeGNlcHRpb24oKSBpbnN0YW5jZW9mIENvcmVFeGNlcHRpb24pCi0JCQluZXN0ZWRFeGNlcHRpb24gPSAoQ29yZUV4Y2VwdGlvbikgc3RhdHVzLmdldEV4Y2VwdGlvbigpOwotCi0JCWlmIChuZXN0ZWRFeGNlcHRpb24gIT0gbnVsbCkgewotCQkJLy8gT3BlbiBhbiBlcnJvciBkaWFsb2cgYW5kIGluY2x1ZGUgdGhlIGV4dHJhCi0JCQkvLyBzdGF0dXMgaW5mb3JtYXRpb24gZnJvbSB0aGUgbmVzdGVkIENvcmVFeGNlcHRpb24KLQkJCUVycm9yRGlhbG9nLm9wZW5FcnJvcihwYXJlbnQsIHRpdGxlLCBtZXNzYWdlLCBuZXN0ZWRFeGNlcHRpb24uZ2V0U3RhdHVzKCkpOwotCQl9Ci0JCWVsc2UgewotCQkJLy8gT3BlbiBhIHJlZ3VsYXIgZXJyb3IgZGlhbG9nIHNpbmNlIHRoZXJlIGlzIG5vCi0JCQkvLyBleHRyYSBpbmZvcm1hdGlvbiB0byBkaXNwbGF5Ci0JCQlNZXNzYWdlRGlhbG9nLm9wZW5FcnJvcihwYXJlbnQsIHRpdGxlLCBtZXNzYWdlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgTGlzdCBhY3Rpb25zID0gbnVsbDsKLQotCVRhYmxlVmlld2VyIGZJbnB1dExpc3QgPSBudWxsOwotCi0JTGlzdCBmSW5wdXRzID0gbmV3IEFycmF5TGlzdCgwKTsKLQotCU9iamVjdCBmU2VsZWN0ZWRFbGVtZW50ID0gbnVsbDsKLQotCi0JcHVibGljIEV4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0VmlldygpIHsKLQkJc3VwZXIoKTsKLQkJYWN0aW9ucyA9IG5ldyBBcnJheUxpc3QoKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I2NyZWF0ZVBhcnRDb250cm9sKG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkNvbXBvc2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBjcmVhdGVQYXJ0Q29udHJvbChDb21wb3NpdGUgcGFyZW50KSB7Ci0JCWZJbnB1dExpc3QgPSBuZXcgVGFibGVWaWV3ZXIocGFyZW50LCBTV1QuRlVMTF9TRUxFQ1RJT04gfCBTV1QuTVVMVEkgfCBTV1QuSF9TQ1JPTEwgfCBTV1QuVl9TQ1JPTEwpOwotCQlmSW5wdXRMaXN0LnNldENvbnRlbnRQcm92aWRlcihuZXcgQXJyYXlDb250ZW50UHJvdmlkZXIoKSk7Ci0JCWZJbnB1dExpc3Quc2V0TGFiZWxQcm92aWRlcihuZXcgRWRpdG9ySW5wdXRMYWJlbFByb3ZpZGVyKCkpOwotCQlmSW5wdXRMaXN0LmFkZERvdWJsZUNsaWNrTGlzdGVuZXIobmV3IERvdWJsZUNsaWNrTGlzdGVuZXIoKSk7Ci0JCWZJbnB1dExpc3QuZ2V0VGFibGUoKS5zZXRIZWFkZXJWaXNpYmxlKHRydWUpOwotCQlmSW5wdXRMaXN0LmdldFRhYmxlKCkuc2V0TGluZXNWaXNpYmxlKHRydWUpOwotCQlTdHJpbmdbXSBjb2x1bW5zID0gbmV3IFN0cmluZ1tdeyJQYXRoIiwgIlR5cGUifTsKLQkJZklucHV0TGlzdC5zZXRMYWJlbFByb3ZpZGVyKG5ldyBFZGl0b3JJbnB1dExhYmVsUHJvdmlkZXIoKSk7Ci0KLQotCQlUYWJsZUxheW91dCB0bGF5b3V0ID0gbmV3IFRhYmxlTGF5b3V0KCk7Ci0JCUNlbGxFZGl0b3JbXSBjZWxsRWRpdG9ycyA9IG5ldyBDZWxsRWRpdG9yWzVdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbnMubGVuZ3RoOyBpKyspIHsKLQkJCXRsYXlvdXQuYWRkQ29sdW1uRGF0YShuZXcgQ29sdW1uV2VpZ2h0RGF0YSgxKSk7Ci0JCQlUYWJsZUNvbHVtbiB0YyA9IG5ldyBUYWJsZUNvbHVtbihmSW5wdXRMaXN0LmdldFRhYmxlKCksIFNXVC5OT05FKTsKLQkJCXRjLnNldFRleHQoY29sdW1uc1tpXSk7Ci0JCQl0Yy5zZXRSZXNpemFibGUodHJ1ZSk7Ci0JCQl0Yy5zZXRXaWR0aChEaXNwbGF5LmdldEN1cnJlbnQoKS5nZXRCb3VuZHMoKS53aWR0aCAvIDE0KTsKLQkJfQotCQlmSW5wdXRMaXN0LnNldENlbGxFZGl0b3JzKGNlbGxFZGl0b3JzKTsKLQkJZklucHV0TGlzdC5zZXRDb2x1bW5Qcm9wZXJ0aWVzKGNvbHVtbnMpOwotCi0JCUdyaWREYXRhIGdkID0gbmV3IEdyaWREYXRhKFNXVC5GSUxMLCBTV1QuRklMTCwgdHJ1ZSwgdHJ1ZSk7Ci0JCWZJbnB1dExpc3QuZ2V0VGFibGUoKS5zZXRMYXlvdXREYXRhKGdkKTsKLQotCQlNZW51TWFuYWdlciBtZW51TWFuYWdlciA9IG5ldyBNZW51TWFuYWdlcigiI3BvcHVwIik7IC8vJE5PTi1OTFMtMSQKLQkJbWVudU1hbmFnZXIuc2V0UmVtb3ZlQWxsV2hlblNob3duKGZhbHNlKTsKLQotCQltZW51TWFuYWdlci5hZGQobmV3IElucHV0T3BlbkFjdGlvbigpKTsKLQkJbWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgSW5wdXRNb3ZlQWN0aW9uKCkpOwotCQltZW51TWFuYWdlci5hZGQobmV3IElucHV0Q2hhbmdlRGlydHlTdGF0ZUFjdGlvbigpKTsKLQkJbWVudU1hbmFnZXIuYWRkKG5ldyBJbnB1dERlbGV0ZUFjdGlvbigpKTsKLQkJbWVudU1hbmFnZXIuYWRkKG5ldyBJbnB1dFJlcGxhY2VDb250ZW50c0FjdGlvbigpKTsKLQkJbWVudU1hbmFnZXIuYWRkKG5ldyBTZXBhcmF0b3IoKSk7Ci0JCW1lbnVNYW5hZ2VyLmFkZChuZXcgUmVtb3ZlSW5wdXRBY3Rpb24oKSk7Ci0JCU1lbnUgbWVudSA9IG1lbnVNYW5hZ2VyLmNyZWF0ZUNvbnRleHRNZW51KGZJbnB1dExpc3QuZ2V0Q29udHJvbCgpKTsKLQkJZklucHV0TGlzdC5nZXRDb250cm9sKCkuc2V0TWVudShtZW51KTsKLQotCi0JCVNTRVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQbHVnaW5QcmVmZXJlbmNlcygpLnNldERlZmF1bHQoZ2V0SW5wdXRzUHJlZmVyZW5jZU5hbWUoKSwgIiIpOwotCQlTdHJpbmcgcGF0aHNbXSA9IFN0cmluZ1V0aWxzLnVucGFjayhTU0VUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5nZXRTdHJpbmcoZ2V0SW5wdXRzUHJlZmVyZW5jZU5hbWUoKSkpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHBhdGhzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZiAocGF0aHNbaV0uc3RhcnRzV2l0aCgiUyEiKSkgewotCQkJCWZJbnB1dHMuYWRkKG5ldyBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQobmV3IEZpbGUocGF0aHNbaV0uc3Vic3RyaW5nKDIpKSkpOwotCQkJfQotCQkJZWxzZSBpZiAocGF0aHNbaV0uc3RhcnRzV2l0aCgiRiEiKSkgewotCQkJCWZJbnB1dHMuYWRkKG5ldyBGaWxlRWRpdG9ySW5wdXQoUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKHBhdGhzW2ldLnN1YnN0cmluZygyKSkpKSk7Ci0JCQl9Ci0JCX0KLQotCQlmSW5wdXRMaXN0LnNldElucHV0KGZJbnB1dHMpOwotCQlmSW5wdXRMaXN0LmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihuZXcgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcigpIHsKLQkJCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZXZlbnQuZ2V0U2VsZWN0aW9uKCkpOwotCQkJCWZTZWxlY3RlZEVsZW1lbnQgPSBzZWwuZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQl9Ci0JCX0pOwotCX0KLQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNkaXNwb3NlKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBkaXNwb3NlKCkgewotCQlMaXN0IHBhdGhzID0gbmV3IEFycmF5TGlzdCgwKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBmSW5wdXRzLnNpemUoKTsgaSsrKSB7Ci0JCQl0cnkgewotCQkJCU9iamVjdCBpbnB1dCA9IGZJbnB1dHMuZ2V0KGkpOwotCQkJCVN0cmluZyBwYXRoID0gbnVsbDsKLQkJCQlpZiAoaW5wdXQgaW5zdGFuY2VvZiBGaWxlQmFzZWRTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCQkJcGF0aCA9ICJTISIgKyAoKEZpbGVCYXNlZFN0b3JhZ2VFZGl0b3JJbnB1dCkgaW5wdXQpLmdldEZpbGUoKS5nZXRDYW5vbmljYWxQYXRoKCk7Ci0JCQkJfQotCQkJCWVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgSUZpbGVFZGl0b3JJbnB1dCkgewotCQkJCQlwYXRoID0gIkYhIiArICgoSUZpbGVFZGl0b3JJbnB1dCkgaW5wdXQpLmdldEZpbGUoKS5nZXRGdWxsUGF0aCgpLnRvU3RyaW5nKCk7Ci0JCQkJfQotCQkJCWlmIChwYXRoICE9IG51bGwpIHsKLQkJCQkJcGF0aHMuYWRkKHBhdGgpOwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlTU0VUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShnZXRJbnB1dHNQcmVmZXJlbmNlTmFtZSgpLCBTdHJpbmdVdGlscy5wYWNrKChTdHJpbmdbXSkgcGF0aHMudG9BcnJheShuZXcgU3RyaW5nWzBdKSkpOwotCQlTU0VUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuc2F2ZVBsdWdpblByZWZlcmVuY2VzKCk7Ci0JfQotCi0JU3RyaW5nIGdldEVkaXRvcklkKElFZGl0b3JJbnB1dCBpbnB1dCkgewotCQlJV29ya2JlbmNoIHdvcmtiZW5jaCA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCk7Ci0JCUlFZGl0b3JSZWdpc3RyeSBlZGl0b3JSZWdpc3RyeSA9IHdvcmtiZW5jaC5nZXRFZGl0b3JSZWdpc3RyeSgpOwotCQlJQ29udGVudFR5cGVbXSB0eXBlcyA9IG51bGw7Ci0JCVN0cmluZyBlZGl0b3JJRCA9IG51bGw7Ci0JCWlmIChpbnB1dCBpbnN0YW5jZW9mIElTdG9yYWdlRWRpdG9ySW5wdXQpIHsKLQkJCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJaW5wdXRTdHJlYW0gPSAoKElTdG9yYWdlRWRpdG9ySW5wdXQpIGlucHV0KS5nZXRTdG9yYWdlKCkuZ2V0Q29udGVudHMoKTsKLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJdHJ5IHsKLQkJCQl0eXBlcyA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmZpbmRDb250ZW50VHlwZXNGb3IoaW5wdXRTdHJlYW0sIGlucHV0LmdldE5hbWUoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJCWlucHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQkJfQotCQkJfQotCQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0KLQkJSUVkaXRvckRlc2NyaXB0b3IgZGVzY3JpcHRvciA9IGVkaXRvclJlZ2lzdHJ5LmdldERlZmF1bHRFZGl0b3IoaW5wdXQuZ2V0TmFtZSgpLCB0eXBlc1swXSk7Ci0JCWlmIChkZXNjcmlwdG9yICE9IG51bGwpIHsKLQkJCWVkaXRvcklEID0gZGVzY3JpcHRvci5nZXRJZCgpOwotCQl9Ci0JCWlmIChlZGl0b3JJRCA9PSBudWxsKSB7Ci0JCQllZGl0b3JJRCA9IEVkaXRvcnNVSS5ERUZBVUxUX1RFWFRfRURJVE9SX0lEOwotCQl9Ci0JCXJldHVybiBlZGl0b3JJRDsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuCi0JICovCi0JU3RyaW5nIGdldElucHV0c1ByZWZlcmVuY2VOYW1lKCkgewotCQlyZXR1cm4gIkV4dGVuZGVkU3RvcmFnZUVkaXRvcklucHV0VmlldzppbnB1dHMiOwotCX0KLQotCUlFZGl0b3JJbnB1dFtdIGdldFNlbGVjdGVkSW5wdXRzKCkgewotCQlJU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZJbnB1dExpc3QuZ2V0U2VsZWN0aW9uKCk7Ci0JCWlmIChzZWxlY3Rpb24gaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb247Ci0JCQlpZiAoc2VsLmlzRW1wdHkoKSkgewotCQkJCXJldHVybiBuZXcgSUVkaXRvcklucHV0WzBdOwotCQkJfQotCQkJT2JqZWN0W10gYXJyID0gc2VsLnRvQXJyYXkoKTsKLQkJCUlFZGl0b3JJbnB1dFtdIGlucHV0cyA9IG5ldyBJRWRpdG9ySW5wdXRbYXJyLmxlbmd0aF07Ci0JCQlTeXN0ZW0uYXJyYXljb3B5KGFyciwgMCwgaW5wdXRzLCAwLCBpbnB1dHMubGVuZ3RoKTsKLQkJCXJldHVybiBpbnB1dHM7Ci0JCX0KLQkJcmV0dXJuIG5ldyBJRWRpdG9ySW5wdXRbMF07Ci0JfQotCi0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklWaWV3UGFydCNpbml0KG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbml0KElWaWV3U2l0ZSBzaXRlKSB0aHJvd3MgUGFydEluaXRFeGNlcHRpb24gewotCQlzdXBlci5pbml0KHNpdGUpOwotCi0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldFRvb2xCYXJNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBBZGRTdG9yYWdlSW5wdXRBY3Rpb24oKSkpOwotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRUb29sQmFyTWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgQWRkRmlsZUlucHV0QWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0VG9vbEJhck1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IFJldXNlRWRpdG9yQWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0VG9vbEJhck1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IFJlbW92ZUlucHV0QWN0aW9uKCkpKTsKLQotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgSW5wdXRPcGVuQWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IFJldXNlRWRpdG9yQWN0aW9uKCkpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJc2l0ZS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKS5hZGQocmVtZW1iZXJBY3Rpb24obmV3IElucHV0TW92ZUFjdGlvbigpKSk7Ci0JCXNpdGUuZ2V0QWN0aW9uQmFycygpLmdldE1lbnVNYW5hZ2VyKCkuYWRkKHJlbWVtYmVyQWN0aW9uKG5ldyBJbnB1dENoYW5nZURpcnR5U3RhdGVBY3Rpb24oKSkpOwotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgSW5wdXREZWxldGVBY3Rpb24oKSkpOwotCQlzaXRlLmdldEFjdGlvbkJhcnMoKS5nZXRNZW51TWFuYWdlcigpLmFkZChyZW1lbWJlckFjdGlvbihuZXcgSW5wdXRSZXBsYWNlQ29udGVudHNBY3Rpb24oKSkpOwotCX0KLQotCUlBY3Rpb24gcmVtZW1iZXJBY3Rpb24oSUFjdGlvbiBhY3Rpb24pIHsKLQkJYWN0aW9ucy5hZGQoYWN0aW9uKTsKLQkJcmV0dXJuIGFjdGlvbjsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYXJ0I3NldEZvY3VzKCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRGb2N1cygpIHsKLQkJZklucHV0TGlzdC5nZXRDb250cm9sKCkuc2V0Rm9jdXMoKTsKLQl9Ci0KLQotCXByb3RlY3RlZCB2b2lkIHVwZGF0ZUVuYWJsZW1lbnQoKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgYWN0aW9ucy5zaXplKCk7IGkrKykgewotCQkJT2JqZWN0IGFjdGlvbiA9IGFjdGlvbnMuZ2V0KGkpOwotCQkJaWYgKGFjdGlvbiBpbnN0YW5jZW9mIElVcGRhdGUpIHsKLQkJCQkoKElVcGRhdGUpIGFjdGlvbikudXBkYXRlKCk7Ci0JCQl9Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNzY2NzYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZgotICogZGVzaXJlZCwgdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMKLSAqIHBsdWdpbi4gT3RoZXIgcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QudWkudGVzdHMiOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVFJBQ0VGSUxURVJfTE9DQVRJT04gPSAiL2RlYnVnL3RyYWNlZmlsdGVyIjsgLy8kTk9OLU5MUy0xJAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0sgPSBJU3RhdHVzLk9LOyAvLyAwCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GTyA9IElTdGF0dXMuSU5GTzsgLy8gMQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkcgPSBJU3RhdHVzLldBUk5JTkc7IC8vIDIKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUiA9IElTdGF0dXMuRVJST1I7IC8vIDQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LX0RFQlVHID0gMjAwICsgT0s7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgSU5GT19ERUJVRyA9IDIwMCArIElORk87Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklOR19ERUJVRyA9IDIwMCArIFdBUk5JTkc7Ci0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfREVCVUcgPSAyMDAgKyBFUlJPUjsKLQotCS8qKgotCSAqIEFkZHMgbWVzc2FnZSB0byBsb2cuCi0JICogCi0JICogQHBhcmFtIGxldmVsCi0JICogICAgICAgICAgICBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLAotCSAqICAgICAgICAgICAgT0tfREVCVUcsIElORk9fREVCVUcsIFdBUk5JTkdfREVCVUcsIEVSUk9SX0RFQlVHKQotCSAqIEBwYXJhbSBtZXNzYWdlCi0JICogICAgICAgICAgICB0ZXh0IHRvIGFkZCB0byB0aGUgbG9nCi0JICogQHBhcmFtIGV4Y2VwdGlvbgotCSAqICAgICAgICAgICAgZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQl9Ci0KLQkvKioKLQkgKiBQcmludHMgbWVzc2FnZSB0byBsb2cgaWYgY2F0ZWdvcnkgbWF0Y2hlcyAvZGVidWcvdHJhY2VmaWx0ZXIgb3B0aW9uLgotCSAqIAotCSAqIEBwYXJhbSBtZXNzYWdlCi0JICogICAgICAgICAgICB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5Ci0JICogICAgICAgICAgICBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aAotCSAqICAgICAgICAgICAgL2RlYnVnL3RyYWNlZmlsdGVyCi0JICovCi0JcHJvdGVjdGVkIHN0YXRpYyB2b2lkIF90cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChpc1RyYWNpbmcoY2F0ZWdvcnkpKSB7Ci0JCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBQTFVHSU5fSUQsIElTdGF0dXMuT0ssIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJCVBsYXRmb3JtLmdldExvZyhidW5kbGUpLmxvZyhzdGF0dXNPYmopOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiB0cnVlIGlmIHRoZSBwbGF0Zm9ybSBpcyBkZWJ1Z2dpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNEZWJ1Z2dpbmcoKSB7Ci0JCXJldHVybiBQbGF0Zm9ybS5pbkRlYnVnTW9kZSgpOwotCX0KLQotCS8qKgotCSAqIERldGVybWluZXMgaWYgY3VycmVudGx5IHRyYWNpbmcgYSBjYXRlZ29yeQotCSAqIAotCSAqIEBwYXJhbSBjYXRlZ29yeQotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0cmFjaW5nIGNhdGVnb3J5LCBmYWxzZSBvdGhlcndpc2UKLQkgKi8KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gaXNUcmFjaW5nKFN0cmluZyBjYXRlZ29yeSkgewotCQlpZiAoIWlzRGVidWdnaW5nKCkpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nIHRyYWNlRmlsdGVyID0gUGxhdGZvcm0uZ2V0RGVidWdPcHRpb24oUExVR0lOX0lEICsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YzRkOTFlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvU1NFVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5NaXNzaW5nUmVzb3VyY2VFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLlJlc291cmNlQnVuZGxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFNTRVRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgU1NFVGVzdHNQbHVnaW4gcGx1Z2luOwotCS8vUmVzb3VyY2UgYnVuZGxlLgotCXByaXZhdGUgUmVzb3VyY2VCdW5kbGUgcmVzb3VyY2VCdW5kbGU7Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFNTRVRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCQl0cnkgewotCQkJcmVzb3VyY2VCdW5kbGUgPSBSZXNvdXJjZUJ1bmRsZS5nZXRCdW5kbGUoIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuVGVzdHNQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFNTRVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwgb3IgJ2tleScgaWYgbm90Ci0JICogZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlSZXNvdXJjZUJ1bmRsZSBidW5kbGUgPSBTU0VUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiByZXNvdXJjZUJ1bmRsZTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9TU0VVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMmNiNDU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvU1NFVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMudmlld2VyLlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uOwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBTU0VVSVRlc3RTdWl0ZSBleHRlbmRzIFRlc3RTdWl0ZSB7Ci0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IFNTRVVJVGVzdFN1aXRlKCk7Ci0JfQotCi0JcHVibGljIFNTRVVJVGVzdFN1aXRlKCkgewotCQlzdXBlcigiU1NFIFVJIFRlc3QgU3VpdGUiKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFZlcmlmeUVkaXRvclBsdWdpbi5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoQ29tbW9uRWRpdG9yUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvbi5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yLmNsYXNzKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0QWN0aW9uRGVsZWdhdGUuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdEFjdGlvbkRlbGVnYXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2YzBlNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0QWN0aW9uRGVsZWdhdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5NZXNzYWdlRGlhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnJlc291cmNlLkltYWdlRGVzY3JpcHRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvckFjdGlvbkRlbGVnYXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotCi0vKioKLSAqIEBhdXRob3IgbnNkCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFRlc3RBY3Rpb25EZWxlZ2F0ZSBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElFZGl0b3JBY3Rpb25EZWxlZ2F0ZSB7Ci0JSUVkaXRvclBhcnQgZWRpdG9yID0gbnVsbDsKLQlJQWN0aW9uIGZhY3Rpb24gPSBudWxsOwotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRlc3RBY3Rpb25EZWxlZ2F0ZSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGV4dAotCSAqLwotCXB1YmxpYyBUZXN0QWN0aW9uRGVsZWdhdGUoU3RyaW5nIHRleHQpIHsKLQkJc3VwZXIodGV4dCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRleHQKLQkgKiBAcGFyYW0gaW1hZ2UKLQkgKi8KLQlwdWJsaWMgVGVzdEFjdGlvbkRlbGVnYXRlKFN0cmluZyB0ZXh0LCBJbWFnZURlc2NyaXB0b3IgaW1hZ2UpIHsKLQkJc3VwZXIodGV4dCwgaW1hZ2UpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0ZXh0Ci0JICogQHBhcmFtIHN0eWxlCi0JICovCi0JcHVibGljIFRlc3RBY3Rpb25EZWxlZ2F0ZShTdHJpbmcgdGV4dCwgaW50IHN0eWxlKSB7Ci0JCXN1cGVyKHRleHQsIHN0eWxlKTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLklFZGl0b3JBY3Rpb25EZWxlZ2F0ZSNzZXRBY3RpdmVFZGl0b3Iob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24sCi0JICogICAgICBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydCkKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFZGl0b3IoSUFjdGlvbiB0YXJnZXRBY3Rpb24sIElFZGl0b3JQYXJ0IHRhcmdldEVkaXRvcikgewotCQllZGl0b3IgPSB0YXJnZXRFZGl0b3I7Ci0JCWZhY3Rpb24gPSB0YXJnZXRBY3Rpb247Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JQWN0aW9uRGVsZWdhdGUjcnVuKG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uKQotCSAqLwotCXB1YmxpYyB2b2lkIHJ1bihJQWN0aW9uIHJ1bkFjdGlvbikgewotCQlNZXNzYWdlRGlhbG9nLm9wZW5JbmZvcm1hdGlvbihlZGl0b3IuZ2V0RWRpdG9yU2l0ZSgpLmdldFNoZWxsKCksICJUZXN0IiwgIkNvbXBsZXRlZCIpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSUFjdGlvbkRlbGVnYXRlI3NlbGVjdGlvbkNoYW5nZWQob3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklBY3Rpb24sCi0JICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb24pCi0JICovCi0JcHVibGljIHZvaWQgc2VsZWN0aW9uQ2hhbmdlZChJQWN0aW9uIGFjdGlvbiwgSVNlbGVjdGlvbiBzZWxlY3Rpb24pIHsKLQkJLy8gZG8gbm90aGluZwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdEVtYWlsTm90aWNlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1Rlc3RFbWFpbE5vdGljZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNGMzZWVhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdEVtYWlsTm90aWNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcwotICogcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcwotICogb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMCB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kCi0gKiBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOiBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1wdWJsaWMgY2xhc3MgVGVzdEVtYWlsTm90aWNlIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgYm9vbGVhbiBzZW5kTm90aWZpY2F0aW9ucyA9IGZhbHNlOwotCi0JcHVibGljIFRlc3RFbWFpbE5vdGljZSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQlwdWJsaWMgVGVzdEVtYWlsTm90aWNlKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RFbWFpbCgpIHsKLQkJYXNzZXJ0RmFsc2UoIlNpbXBsZSB0ZXN0IHRvIGJlIHN1cmUgZW1haWwgZ2V0cyBzZW50IG9uIGZhaWx1cmUiLCBzZW5kTm90aWZpY2F0aW9ucyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdExpbmVTdHlsZVByb3ZpZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1Rlc3RMaW5lU3R5bGVQcm92aWRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWYzYWU0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVGVzdExpbmVTdHlsZVByb3ZpZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuQ29sbGVjdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVR5cGVkUmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LmN1c3RvbS5TdHlsZVJhbmdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUkdCOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5wcm92aXNpb25hbC5zdHlsZS5IaWdobGlnaHRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwudXRpbC5FZGl0b3JVdGlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVGVzdExpbmVTdHlsZVByb3ZpZGVyIGltcGxlbWVudHMgTGluZVN0eWxlUHJvdmlkZXIgewotCi0JQ29sb3IgZm9yZWdyb3VuZCA9IG51bGw7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgVGVzdExpbmVTdHlsZVByb3ZpZGVyKCkgewotCQlzdXBlcigpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5zdHlsZS5MaW5lU3R5bGVQcm92aWRlciNpbml0KG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQsCi0JICogICAgICBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnN0eWxlLkhpZ2hsaWdodGVyKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoSVN0cnVjdHVyZWREb2N1bWVudCBkb2N1bWVudCwgSGlnaGxpZ2h0ZXIgaGlnaGxpZ2h0ZXIpIHsKLQkJLy8gbm90aGluZyB0byBpbml0Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyI3ByZXBhcmVSZWdpb25zKG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVR5cGVkUmVnaW9uLAotCSAqICAgICAgaW50LCBpbnQsIGphdmEudXRpbC5Db2xsZWN0aW9uKQotCSAqLwotCXB1YmxpYyBib29sZWFuIHByZXBhcmVSZWdpb25zKElUeXBlZFJlZ2lvbiBjdXJyZW50UmVnaW9uLCBpbnQgc3RhcnQsIGludCBsZW5ndGgsIENvbGxlY3Rpb24gc3R5bGVSYW5nZXMpIHsKLQkJLy8gbWFrZSBldmVyeXRoaW5nIGJvbGQgZ3JleQotCQlpZiAoZm9yZWdyb3VuZCA9PSBudWxsKQotCQkJZm9yZWdyb3VuZCA9IEVkaXRvclV0aWxpdHkuZ2V0Q29sb3IobmV3IFJHQigxMjcsIDEyNywgMTI3KSk7Ci0JCXN0eWxlUmFuZ2VzLmFkZChuZXcgU3R5bGVSYW5nZShzdGFydCwgbGVuZ3RoLCBmb3JlZ3JvdW5kLCBudWxsLCBTV1QuQk9MRCkpOwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC5zc2UudWkuc3R5bGUuTGluZVN0eWxlUHJvdmlkZXIjcmVsZWFzZSgpCi0JICovCi0JcHVibGljIHZvaWQgcmVsZWFzZSgpIHsKLQkJLy8gbm90aGluZyB0byByZWxlYXNlCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1Rlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9UZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWNjZDE0Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL1Rlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5SW5wdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5hY3Rpb24uSU1lbnVNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5NZW51TWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTZWxlY3Rpb25Qcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JJbnB1dDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5GaWxlRWRpdG9ySW5wdXQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkucGFydC5JU2hvd0luVGFyZ2V0TGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvciI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRklMRV9OQU1FID0gInRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvci54bWwiOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RydWN0dXJlZFRleHRFZGl0b3IgZkVkaXRvcjsKLQlwcml2YXRlIHN0YXRpYyBJRmlsZSBmRmlsZTsKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZJc1NldHVwID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yKCkgewotCQlzdXBlcigiVGVzdFN0cnVjdHJlZFRleHRFZGl0b3IiKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAoIWZJc1NldHVwKSB7Ci0JCQkvLyBjcmVhdGUgcHJvamVjdAotCQkJY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkJZkZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgRklMRV9OQU1FKTsKLQkJCWZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCi0JCWlmIChmSXNTZXR1cCAmJiBmRWRpdG9yID09IG51bGwpIHsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJSUVkaXRvcklucHV0IGlucHV0ID0gbmV3IEZpbGVFZGl0b3JJbnB1dChmRmlsZSk7Ci0JCQkvKgotCQkJICogVGhpcyBzaG91bGQgdGFrZSBjYXJlIG9mIHRlc3RpbmcgaW5pdCwgY3JlYXRlUGFydENvbnRyb2wsCi0JCQkgKiBiZWdpbkJhY2tncm91bmRPcGVyYXRpb24sIGVuZEJhY2tncm91bmRPcGVyYXRpb24gbWV0aG9kcwotCQkJICovCi0JCQlJRWRpdG9yUGFydCBwYXJ0ID0gcGFnZS5vcGVuRWRpdG9yKGlucHV0LCAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvciIsIHRydWUpOwotCQkJaWYgKHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikKLQkJCQlmRWRpdG9yID0gKFN0cnVjdHVyZWRUZXh0RWRpdG9yKSBwYXJ0OwotCQkJZWxzZQotCQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IiLCBmYWxzZSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAoZkVkaXRvciAhPSBudWxsKSB7Ci0JCQkvKgotCQkJICogVGhpcyBzaG91bGQgdGFrZSBjYXJlIG9mIHRlc3RpbmcgY2xvc2UgYW5kIGRpc3Bvc2UgbWV0aG9kcwotCQkJICovCi0JCQlmRWRpdG9yLmNsb3NlKGZhbHNlKTsKLQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBjbG9zZSBlZGl0b3IiLCB0cnVlKTsKLQkJCWZFZGl0b3IgPSBudWxsOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2pOYW1lKTsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIElGaWxlIGdldE9yQ3JlYXRlRmlsZShTdHJpbmcgZmlsZVBhdGgpIHsKLQkJSUZpbGUgYmxhbmtKc3BGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWlmIChibGFua0pzcEZpbGUgIT0gbnVsbCAmJiAhYmxhbmtKc3BGaWxlLmV4aXN0cygpKSB7Ci0JCQl0cnkgewotCQkJCWJsYW5rSnNwRmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmxhbmtKc3BGaWxlOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb1NhdmluZygpIHsKLQkJZkVkaXRvci5kb1JldmVydFRvU2F2ZWQoKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHJldmVydCB0byBzYXZlZCIsIHRydWUpOwotCQlmRWRpdG9yLmRvU2F2ZShuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHNhdmUiLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RWRpdG9yQ29udGV4dE1lbnVBYm91dFRvU2hvdygpIHsKLQkJSU1lbnVNYW5hZ2VyIG1lbnUgPSBuZXcgTWVudU1hbmFnZXIoKTsKLQkJZkVkaXRvci5lZGl0b3JDb250ZXh0TWVudUFib3V0VG9TaG93KG1lbnUpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gcHJlcGFyZSBmb3IgY29udGV4dCBtZW51IGFib3V0IHRvIHNob3ciLCB0cnVlKTsKLQkJbWVudS5kaXNwb3NlKCk7Ci0JCW1lbnUgPSBudWxsOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBZGFwdGVyKCkgewotCQlPYmplY3QgYWRhcHRlciA9IGZFZGl0b3IuZ2V0QWRhcHRlcihJU2hvd0luVGFyZ2V0TGlzdC5jbGFzcyk7Ci0JCWFzc2VydFRydWUoIkdldCBhZGFwdGVyIGZvciBzaG93IGluIHRhcmdldCBmYWlsZWQiLCBhZGFwdGVyIGluc3RhbmNlb2YgSVNob3dJblRhcmdldExpc3QpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRTZXRFZGl0b3JQYXJ0KCkgewotCQlmRWRpdG9yLnNldEVkaXRvclBhcnQobnVsbCk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byBzZXQgZWRpdG9yIHBhcnQiLCB0cnVlKTsKLQkJSUVkaXRvclBhcnQgcGFydCA9IGZFZGl0b3IuZ2V0RWRpdG9yUGFydCgpOwotCQlhc3NlcnRUcnVlKCJEaWQgbm90IGdldCBleHBlY3RlZCBlZGl0b3IgcGFydCIsIHBhcnQgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEluaXRpYWxpemVEb2N1bWVudFByb3ZpZGVyKCkgewotCQlmRWRpdG9yLmluaXRpYWxpemVEb2N1bWVudFByb3ZpZGVyKG51bGwpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSBkb2N1bWVudCBwcm92aWRlciIsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRPcmllbnRhdGlvbigpIHsKLQkJaW50IG9yID0gZkVkaXRvci5nZXRPcmllbnRhdGlvbigpOwotCQlhc3NlcnRFcXVhbHMoU1dULkxFRlRfVE9fUklHSFQsIG9yKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U2VsZWN0aW9uUHJvdmlkZXIoKSB7Ci0JCUlTZWxlY3Rpb25Qcm92aWRlciBwcm92aWRlciA9IGZFZGl0b3IuZ2V0U2VsZWN0aW9uUHJvdmlkZXIoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiRWRpdG9yJ3Mgc2VsZWN0aW9uIHByb3ZpZGVyIHdhcyBudWxsIiwgcHJvdmlkZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRUZXh0Vmlld2VyKCkgewotCQlTdHJ1Y3R1cmVkVGV4dFZpZXdlciB2aWV3ZXIgPSBmRWRpdG9yLmdldFRleHRWaWV3ZXIoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiRWRpdG9yJ3MgdGV4dCB2aWV3ZXIgd2FzIG51bGwiLCB2aWV3ZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZW1lbWJlclJlc3RvcmVTZWxlY3Rpb24oKSB7Ci0JCWZFZGl0b3IucmVtZW1iZXJTZWxlY3Rpb24oKTsKLQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHJlbWVtYmVyIGVkaXRvciBzZWxlY3Rpb24iLCB0cnVlKTsKLQkJZkVkaXRvci5yZXN0b3JlU2VsZWN0aW9uKCk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byByZXN0b3JlIGVkaXRvciBzZWxlY3Rpb24iLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2FmZWx5U2FuaXR5Q2hlY2soKSB7Ci0JCWZFZGl0b3Iuc2FmZWx5U2FuaXR5Q2hlY2tTdGF0ZShmRWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gc2FmZWx5IHNhbml0eSBjaGVjayBlZGl0b3Igc3RhdGUiLCB0cnVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2hvd0J1c3koKSB7Ci0JCWZFZGl0b3Iuc2hvd0J1c3koZmFsc2UpOwotCQlhc3NlcnRUcnVlKCJVbmFibGUgdG8gc2hvdyBlZGl0b3IgaXMgYnVzeSIsIHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RVcGRhdGUoKSB7Ci0JCWZFZGl0b3IudXBkYXRlKCk7Ci0JCWFzc2VydFRydWUoIlVuYWJsZSB0byB1cGRhdGUgZWRpdG9yIiwgdHJ1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9WZXJpZnlFZGl0b3JQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC9zc2UvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NTNmNmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy9WZXJpZnlFZGl0b3JQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0czsKLQotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5ncmFwaGljcy5Db2xvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuZ3JhcGhpY3MuUkdCOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TU0VVSVBsdWdpbjsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMKLSAqIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKLSAqIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZAotICogaXMgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczogSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wdWJsaWMgY2xhc3MgVmVyaWZ5RWRpdG9yUGx1Z2luIGV4dGVuZHMgVGVzdENhc2UgewotCi0JTGlzdCBjb2xvckxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luRXhpc3RzKCkgewotCQlQbHVnaW4gcGx1Z2luID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXBsdWdpbiA9IFNTRVVJUGx1Z2luLmdldERlZmF1bHQoKTsKLQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcGx1Z2luID0gbnVsbDsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJzc2UgZWRpdG9yIHBsdWdpbiBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIiwgcGx1Z2luKTsKLQotCX0KLQotCS8qKgotCSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyBqdXN0IHRvIHRlc3QgaWYgd2UgY2FuIGRpcmVjdGx5IGNyZWF0ZSBsb3RzCi0JICogb2YgUkJHIGNvbG9ycywgZXZlbiBpZiBkaXNwbGF5IHNldCB0byAiMjU2IiAob24gTGludXgpLiBBbmQsIEJUVywgaXQKLQkgKiBkb2VzIG5vdCBmYWlsIGV2ZW4gd2l0aCAyNTYgY29sb3JzIHNldCwgYXQgbGVhc3Qgb24gTGludXgsIGluIGRldi4gZW52LgotCSAqIFZhcnlpbmcgYWxsIHRocmVlIFJHQiBudW1iZXJzLCB0aG91Z2gsIGl0IGlzIGVhc3kgdG8gcnVuIG91dCBvZiBtZW1vcnkhCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdENvbG9ySGFuZGxlcygpIHsKLQkJRGlzcGxheSBkaXNwbGF5ID0gRGlzcGxheS5nZXRDdXJyZW50KCk7Ci0JCWlmIChkaXNwbGF5ID09IG51bGwpCi0JCQlkaXNwbGF5ID0gRGlzcGxheS5nZXREZWZhdWx0KCk7Ci0JCWFzc2VydE5vdE51bGwoImRpc3BsYXkgY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCIsIGRpc3BsYXkpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7Ci0JCQlmb3IgKGludCBqID0gMDsgaiA8IDI1NjsgaisrKSB7Ci0JCQkJLy8gMjU2IGN1YmVkIHJ1bnMgb3V0IG9mIG1lbW9yeQotCQkJCS8vIGZvciAoaW50IGsgPSAwOyBrIDwgMjU2OyBrKyspIHsKLQkJCQljb2xvckxpc3QuYWRkKG5ldyBDb2xvcihkaXNwbGF5LCBuZXcgUkdCKGksIGosIDUwKSkpOwotCQkJCS8vIH0KLQotCQkJfQotCi0JCX0KLQkJLy8gaWYgd2UgZ2V0IHRoaXMgZmFyIHdpdGhvdXQgZXJyb3IsIGFsbCBpcyBvay4KLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3NzZS91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxNDk4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3Qvc3NlL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy52aWV3ZXI7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklBdXRvRWRpdFN0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVGV4dERvdWJsZUNsaWNrU3RyYXRlZ3k7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVW5kb01hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5jb250ZW50YXNzaXN0LklDb250ZW50QXNzaXN0YW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuZm9ybWF0dGVyLklDb250ZW50Rm9ybWF0dGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaHlwZXJsaW5rLklIeXBlcmxpbmtEZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0Lmh5cGVybGluay5JSHlwZXJsaW5rUHJlc2VudGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaW5mb3JtYXRpb24uSUluZm9ybWF0aW9uUHJlc2VudGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucHJlc2VudGF0aW9uLklQcmVzZW50YXRpb25SZWNvbmNpbGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5JUmVjb25jaWxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbkhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuTG9nZ2VyOwotCi1wdWJsaWMgY2xhc3MgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZkRpc3BsYXlFeGlzdHMgPSB0cnVlOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJc3VwZXIoIlRlc3RWaWV3ZXJDb25maWd1cmF0aW9uIik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJc2V0VXBWaWV3ZXJDb25maWd1cmF0aW9uKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJaWYgKERpc3BsYXkuZ2V0Q3VycmVudCgpICE9IG51bGwpIHsKLQotCQkJU2hlbGwgc2hlbGwgPSBudWxsOwotCQkJQ29tcG9zaXRlIHBhcmVudCA9IG51bGw7Ci0KLQkJCWlmIChQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7Ci0JCQkJc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlzaGVsbCA9IG5ldyBTaGVsbChEaXNwbGF5LmdldEN1cnJlbnQoKSk7Ci0JCQl9Ci0JCQlwYXJlbnQgPSBuZXcgQ29tcG9zaXRlKHNoZWxsLCBTV1QuTk9ORSk7Ci0KLQkJCS8vIGR1bW15IHZpZXdlcgotCQkJZlZpZXdlciA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlcihwYXJlbnQsIG51bGwsIG51bGwsIGZhbHNlLCBTV1QuTk9ORSk7Ci0JCQlmQ29uZmlnID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbigpOwotCQl9Ci0JCWVsc2UgewotCQkJZkRpc3BsYXlFeGlzdHMgPSBmYWxzZTsKLQkJCUxvZ2dlci5sb2coTG9nZ2VyLklORk8sICJSZW1lbWJlciwgdmlld2VyIGNvbmZpZ3VyYXRpb24gdGVzdHMgYXJlIG5vdCBydW4gYmVjYXVzZSB3b3JrYmVuY2ggaXMgbm90IG9wZW4gKG5vcm1hbCBvbiBidWlsZCBtYWNoaW5lKSIpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEFubm90YXRpb25Ib3ZlcigpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUFubm90YXRpb25Ib3ZlciBob3ZlciA9IGZDb25maWcuZ2V0QW5ub3RhdGlvbkhvdmVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJBbm5vdGF0aW9uSG92ZXIgaXMgbnVsbCIsIGhvdmVyKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEF1dG9FZGl0U3RyYXRlZ2llcygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUF1dG9FZGl0U3RyYXRlZ3lbXSBzdHJhdGVnaWVzID0gZkNvbmZpZy5nZXRBdXRvRWRpdFN0cmF0ZWdpZXMoZlZpZXdlciwgSVN0cnVjdHVyZWRQYXJ0aXRpb25zLkRFRkFVTFRfUEFSVElUSU9OKTsKLQkJYXNzZXJ0Tm90TnVsbChzdHJhdGVnaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGF1dG8gZWRpdCBzdHJhdGVnaWVzIiwgc3RyYXRlZ2llcy5sZW5ndGggPiAwKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoY29uZmlndXJlZENvbnRlbnRUeXBlcyk7Ci0JCWFzc2VydFRydWUoY29uZmlndXJlZENvbnRlbnRUeXBlcy5sZW5ndGggPT0gMSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWREb2N1bWVudFBhcnRpdGlvbmluZygpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nIHBhcnRpdGlvbmluZyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZERvY3VtZW50UGFydGl0aW9uaW5nKGZWaWV3ZXIpOwotCQlhc3NlcnRFcXVhbHMoSVN0cnVjdHVyZWRQYXJ0aXRpb25pbmcuREVGQVVMVF9TVFJVQ1RVUkVEX1BBUlRJVElPTklORywgcGFydGl0aW9uaW5nKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29uZmlndXJlZFRleHRIb3ZlclN0YXRlTWFza3MoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCWludFtdIG1hc2tzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkVGV4dEhvdmVyU3RhdGVNYXNrcyhmVmlld2VyLCBJU3RydWN0dXJlZFBhcnRpdGlvbnMuREVGQVVMVF9QQVJUSVRJT04pOwotCQlhc3NlcnRFcXVhbHMoMiwgbWFza3MubGVuZ3RoKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudEFzc2lzdGFudCgpIHsKLQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmICghZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJSUNvbnRlbnRBc3Npc3RhbnQgY2EgPSBmQ29uZmlnLmdldENvbnRlbnRBc3Npc3RhbnQoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGlzIG5vIGNvbnRlbnQgYXNzaXN0YW50IiwgY2EpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRDb250ZW50Rm9ybWF0dGVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQ29udGVudEZvcm1hdHRlciBjZiA9IGZDb25maWcuZ2V0Q29udGVudEZvcm1hdHRlcihmVmlld2VyKTsKLQkJYXNzZXJ0TnVsbCgidGhlcmUgaXMgYSBjb250ZW50IGZvcm1hdHRlciIsIGNmKTsKLQl9Ci0KLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYgKHN0cmF0ZWd5ICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgZG91YmxlIGNsaWNrIHN0cmF0ZWdpZXMiLCBmYWxzZSk7Ci0JfQotCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRIeXBlcmxpbmtEZXRlY3RvcnMoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlIeXBlcmxpbmtEZXRlY3RvcltdIGRldGVjdG9ycyA9IGZDb25maWcuZ2V0SHlwZXJsaW5rRGV0ZWN0b3JzKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBhcmUgbm8gaHlwZXJsaW5rIGRldGVjdG9ycyIsIGRldGVjdG9ycyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzLmxlbmd0aCA+IDApOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRIeXBlcmxpbmtQcmVzZW50ZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlIeXBlcmxpbmtQcmVzZW50ZXIgcHJlc2VudGVyID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtQcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoImh5cGVybGluayBwcmVzZW50ZXIgc2hvdWxkbid0IGJlIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJSW5mb3JtYXRpb25Db250cm9sQ3JlYXRvciBpbmZvQ29udHJvbENyZWF0b3IgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoImluZm8gY29udHJvbCBjcmVhdG9yIHdhcyBudWxsIiwgaW5mb0NvbnRyb2xDcmVhdG9yKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlJbmZvcm1hdGlvblByZXNlbnRlciBwcmVzZW50ZXIgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uUHJlc2VudGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJJbmZvcm1hdGlvblByZXNlbnRlciB3YXMgbnVsbCIsIHByZXNlbnRlcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldExpbmVTdHlsZVByb3ZpZGVycygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCS8vIHRoZXJlIHNob3VsZCBiZSBubyBsaW5lc3R5bGVwcm92aWRlcnMgZm9yIGRlZmF1bHQKLQkJU3RyaW5nW10gY29udGVudFR5cGVzID0gZkNvbmZpZy5nZXRDb25maWd1cmVkQ29udGVudFR5cGVzKGZWaWV3ZXIpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnRUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJTGluZVN0eWxlUHJvdmlkZXIgcHJvdmlkZXJzW10gPSBmQ29uZmlnLmdldExpbmVTdHlsZVByb3ZpZGVycyhmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJYXNzZXJ0TnVsbCgibGluZSBzdHlsZSBwcm92aWRlcnMgaXMgbm90IG51bGwiLCBwcm92aWRlcnMpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRPdmVydmlld1J1bGVyQW5ub3RhdGlvbkhvdmVyKCkgewotCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYgKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQotCQlJQW5ub3RhdGlvbkhvdmVyIGFubm90YXRpb25Ib3ZlciA9IGZDb25maWcuZ2V0T3ZlcnZpZXdSdWxlckFubm90YXRpb25Ib3ZlcihmVmlld2VyKTsKLQkJYXNzZXJ0Tm90TnVsbCgiYW5ub3RhdGlvbiBob3ZlciB3YXMgbnVsbCIsIGFubm90YXRpb25Ib3Zlcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFByZXNlbnRhdGlvblJlY29uY2lsZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlQcmVzZW50YXRpb25SZWNvbmNpbGVyIHByZXNlbnRhdGlvblJlY29uY2lsZXIgPSBmQ29uZmlnLmdldFByZXNlbnRhdGlvblJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCS8vIG91ciBkZWZhdWx0IHByZXNlbnRhdGlvbiByZWNvbmNpbGVyIGlzIG51bGwKLQkJYXNzZXJ0TnVsbCgicHJlc2VudGF0aW9uIHJlY29uY2lsZXIgd2FzIG5vdCBudWxsIiwgcHJlc2VudGF0aW9uUmVjb25jaWxlcik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgd2FzIG51bGwiLCByKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VW5kb01hbmFnZXIoKSB7Ci0KLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZiAoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCi0JCUlVbmRvTWFuYWdlciB1bmRvTWFuYWdlciA9IGZDb25maWcuZ2V0VW5kb01hbmFnZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInVuZG8gbWFuYWdlciB3YXMgbnVsbCIsIHVuZG9NYW5hZ2VyKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cy90ZXN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U2NWVlMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3Quc3NlLnVpLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVzdHMuU1NFVUlUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0idWktdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzUxYzhmMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UuamR0LmxhdW5jaGluZy5KUkVfQ09OVEFJTkVSIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9ImNvbiIgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIi8+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMDc3YTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1iaW4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQxNzUxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLmNvcmU8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz48L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjN2QxMGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI0ZyaSBNYXIgMjUgMTc6MzQ6MDEgRVNUIDIwMDUKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy8vZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkPVVURjgKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVmNmNjMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiBUZXN0IFBsdWctaW4KLUJ1bmRsZS1TeW1ib2xpY05hbWU6IG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMC43LjAKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbC5UZXN0UGx1Z2luCi1CdW5kbGUtVmVuZG9yOiBJQk0KLUJ1bmRsZS1Mb2NhbGl6YXRpb246IHBsdWdpbgotRXhwb3J0LVBhY2thZ2U6IG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnJlc29sdmVyLnRvb2xzLnRlc3RzLmludGVybmFsLAotIG9yZy5lY2xpcHNlLndzdC54bWwudXJpcmVzb2x2ZXIudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbAotUmVxdWlyZS1CdW5kbGU6IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuanVuaXQsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLAotIG9yZy5hcGFjaGUueGVyY2VzLAotIG9yZy5lY2xpcHNlLnhzZAotRWNsaXBzZS1BdXRvU3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYzU5ODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5NYXkgMiwgMjAwNjwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NmZmMzZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBAQAotc291cmNlLmNhdGFsb2d0ZXN0cy5qYXIgPSBzcmMvCi1vdXRwdXQuY2F0YWxvZ3Rlc3RzLmphciA9IGJpbi8KLWJpbi5pbmNsdWRlcyA9IGFjdHVhbF9yZXN1bHRzLyxcCi0gICAgICAgICAgICAgICBkYXRhLyxcCi0gICAgICAgICAgICAgICBqYXJzLyxcCi0gICAgICAgICAgICAgICBwbHVnaW4ueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBjYXRhbG9ndGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwKLQotc3JjLmluY2x1ZGVzID0gYWN0dWFsX3Jlc3VsdHMvCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczN2JhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRUxFTUVOVCBJbnZvaWNlIChIZWFkZXIsSXRlbSspPgotPCFFTEVNRU5UIEhlYWRlciAoRGF0ZSxCaWxsVG8pPgotPCFBVFRMSVNUIEhlYWRlcgotIGludm9pY2VOdW1iZXIgQ0RBVEEgI1JFUVVJUkVECi0+Ci08IUVMRU1FTlQgSXRlbSAoZGVzY3JpcHRpb24qKT4KLTwhQVRUTElTVCBJdGVtCi0gcHJpY2UgQ0RBVEEgI1JFUVVJUkVECi0gZGlzY291bnQgKHByb21vdGlvbiB8IHJlZ3VsYXIpICJyZWd1bGFyIgotPgotPCFFTEVNRU5UIERhdGUgKChNb250aCxEYXksWWVhcil8KERheSxNb250aCxZZWFyKSk+Ci08IUVMRU1FTlQgQmlsbFRvIChBZGRyZXNzKT4KLTwhQVRUTElTVCBCaWxsVG8KLSBjdXN0TnVtYmVyIElEICNSRVFVSVJFRAotIG5hbWUgQ0RBVEEgI0lNUExJRUQKLSBwaG9uZSBDREFUQSAjSU1QTElFRAotPgotPCFFTEVNRU5UIGRlc2NyaXB0aW9uICgjUENEQVRBKT4KLTwhRUxFTUVOVCBBZGRyZXNzIChzdHJlZXQxLHN0cmVldDI/LGNpdHksKHN0YXRlfHByb3ZpbmNlKSx6aXAsY291bnRyeT8pPgotPCFFTEVNRU5UIHN0cmVldDEgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHN0cmVldDIgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGNpdHkgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHN0YXRlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBwcm92aW5jZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgemlwICgjUENEQVRBKT4KLTwhRUxFTUVOVCBjb3VudHJ5ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBNb250aCAoI1BDREFUQSk+Ci08IUVMRU1FTlQgRGF5ICgjUENEQVRBKT4KLTwhRUxFTUVOVCBZZWFyICgjUENEQVRBKT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL0ludm9pY2UvSW52b2ljZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9JbnZvaWNlL0ludm9pY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWZlMzk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL0ludm9pY2UvSW52b2ljZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIEludm9pY2UgUFVCTElDICJJbnZvaWNlSWRfdGVzdCIgIkludm9pY2UuZHRkIiA+Ci08SW52b2ljZT4KLSAgPEhlYWRlciBpbnZvaWNlTnVtYmVyPSIxMjM0NSI+Ci0gICAgPERhdGU+Ci0gICAgICA8TW9udGg+SnVseTwvTW9udGg+Ci0gICAgICA8RGF5PjE1PC9EYXk+Ci0gICAgICA8WWVhcj4yMDAxPC9ZZWFyPgotICAgIDwvRGF0ZT4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9Ilg1NzM5IiBuYW1lPSJNaWx0b24gTWNHb28iIHBob25lPSI0MTYtNDQ4LTQ0MTQiPgotICAgICAgPEFkZHJlc3M+Ci0gICAgICAgIDxzdHJlZXQxPklCTTwvc3RyZWV0MT4KLSAgICAgICAgPHN0cmVldDI+MTE1MCBFZ2xpbnRvbiBBdmUgRWFzdDwvc3RyZWV0Mj4KLSAgICAgICAgPGNpdHk+VG9yb250bzwvY2l0eT4KLSAgICAgICAgPHN0YXRlPk9udGFyaW88L3N0YXRlPgotICAgICAgICA8emlwPk0zQyAxSDc8L3ppcD4KLSAgICAgICAgPGNvdW50cnk+Q2FuYWRhPC9jb3VudHJ5PgotICAgICAgPC9BZGRyZXNzPgotICAgIDwvQmlsbFRvPgotICA8L0hlYWRlcj4KLSAgPEl0ZW0gZGlzY291bnQ9InByb21vdGlvbiIgcHJpY2U9IjU3Ij4KLSAgICA8ZGVzY3JpcHRpb24+aGlnaCBzcGVlZCAzRCBncmFwaGljcyBjYXJkPC9kZXNjcmlwdGlvbj4KLSAgPC9JdGVtPgotPC9JbnZvaWNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwtc2NoZW1hLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLXNjaGVtYS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMyZjcyNWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwtc2NoZW1hLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cGVyc29ubmVsIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JICAgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249J3BlcnNvbmFsLnhzZCc+Ci0KLSAgPHBlcnNvbiBpZD0iQmlnLkJvc3MiID4KLSAgICA8bmFtZT48ZmFtaWx5PkJvc3M8L2ZhbWlseT4gPGdpdmVuPkJpZzwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5jaGllZkBmb28uY29tPC9lbWFpbD4KLSAgICA8bGluayBzdWJvcmRpbmF0ZXM9Im9uZS53b3JrZXIgdHdvLndvcmtlciB0aHJlZS53b3JrZXIgZm91ci53b3JrZXIgZml2ZS53b3JrZXIiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0ib25lLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPk9uZTwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5vbmVAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0idHdvLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPlR3bzwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD50d29AZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0idGhyZWUud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+VGhyZWU8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+dGhyZWVAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0iZm91ci53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5Gb3VyPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPmZvdXJAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0iZml2ZS53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5GaXZlPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPmZpdmVAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLTwvcGVyc29ubmVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjRlNDhhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLTw/eG1sIGVuY29kaW5nPSJVVEYtOCI/PgotPCFFTEVNRU5UIHBlcnNvbm5lbCAocGVyc29uKSs+Ci0KLTwhRUxFTUVOVCBwZXJzb24gKG5hbWUsZW1haWwqLHVybCosbGluaz8pPgotPCFBVFRMSVNUIHBlcnNvbiBpZCBJRCAjUkVRVUlSRUQ+Ci08IUFUVExJU1QgcGVyc29uIG5vdGUgQ0RBVEEgI0lNUExJRUQ+Ci08IUFUVExJU1QgcGVyc29uIGNvbnRyICh0cnVlfGZhbHNlKSAnZmFsc2UnPgotPCFBVFRMSVNUIHBlcnNvbiBzYWxhcnkgQ0RBVEEgI0lNUExJRUQ+Ci0KLTwhRUxFTUVOVCBuYW1lICgoZmFtaWx5LGdpdmVuKXwoZ2l2ZW4sZmFtaWx5KSk+Ci0KLTwhRUxFTUVOVCBmYW1pbHkgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgZ2l2ZW4gKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgZW1haWwgKCNQQ0RBVEEpPgotCi08IUVMRU1FTlQgdXJsIEVNUFRZPgotPCFBVFRMSVNUIHVybCBocmVmIENEQVRBICdodHRwOi8vJz4KLQotPCFFTEVNRU5UIGxpbmsgRU1QVFk+Ci08IUFUVExJU1QgbGluayBtYW5hZ2VyIElEUkVGICNJTVBMSUVEPgotPCFBVFRMSVNUIGxpbmsgc3Vib3JkaW5hdGVzIElEUkVGUyAjSU1QTElFRD4KLQotPCFOT1RBVElPTiBnaWYgUFVCTElDICctLy9BUFAvUGhvdG9zaG9wLzQuMCcgJ3Bob3Rvc2hvcC5leGUnPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzNlNDM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGVyc29ubmVsIFNZU1RFTSAiaHR0cDovL3BlcnNvbmFsL3BlcnNvbmFsLmR0ZCI+Ci08cGVyc29ubmVsPgotCi0gIDxwZXJzb24gaWQ9IkJpZy5Cb3NzIj4KLSAgICA8bmFtZT48ZmFtaWx5PkJvc3M8L2ZhbWlseT4gPGdpdmVuPkJpZzwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5jaGllZkBmb28uY29tPC9lbWFpbD4KLSAgICA8bGluayBzdWJvcmRpbmF0ZXM9Im9uZS53b3JrZXIgdHdvLndvcmtlciB0aHJlZS53b3JrZXIgZm91ci53b3JrZXIgZml2ZS53b3JrZXIiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0ib25lLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPk9uZTwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD5vbmVAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0idHdvLndvcmtlciI+Ci0gICAgPG5hbWU+PGZhbWlseT5Xb3JrZXI8L2ZhbWlseT4gPGdpdmVuPlR3bzwvZ2l2ZW4+PC9uYW1lPgotICAgIDxlbWFpbD50d29AZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0idGhyZWUud29ya2VyIj4KLSAgICA8bmFtZT48ZmFtaWx5PldvcmtlcjwvZmFtaWx5PiA8Z2l2ZW4+VGhyZWU8L2dpdmVuPjwvbmFtZT4KLSAgICA8ZW1haWw+dGhyZWVAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0iZm91ci53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5Gb3VyPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPmZvdXJAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLSAgPHBlcnNvbiBpZD0iZml2ZS53b3JrZXIiPgotICAgIDxuYW1lPjxmYW1pbHk+V29ya2VyPC9mYW1pbHk+IDxnaXZlbj5GaXZlPC9naXZlbj48L25hbWU+Ci0gICAgPGVtYWlsPmZpdmVAZm9vLmNvbTwvZW1haWw+Ci0gICAgPGxpbmsgbWFuYWdlcj0iQmlnLkJvc3MiLz4KLSAgPC9wZXJzb24+Ci0KLTwvcGVyc29ubmVsPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUGVyc29uYWwvcGVyc29uYWwueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNWUzMTgzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1BlcnNvbmFsL3BlcnNvbmFsLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDc5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHM6c2NoZW1hIHhtbG5zOnhzPSdodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSc+Ci0KLSA8eHM6ZWxlbWVudCBuYW1lPSJwZXJzb25uZWwiPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6c2VxdWVuY2U+Ci0gICAgIDx4czplbGVtZW50IHJlZj0icGVyc29uIiBtaW5PY2N1cnM9JzEnIG1heE9jY3Vycz0ndW5ib3VuZGVkJy8+Ci0gICA8L3hzOnNlcXVlbmNlPgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czp1bmlxdWUgbmFtZT0idW5pcXVlMSI+Ci0gICA8eHM6c2VsZWN0b3IgeHBhdGg9InBlcnNvbiIvPgotICAgPHhzOmZpZWxkIHhwYXRoPSJuYW1lL2dpdmVuIi8+Ci0gICA8eHM6ZmllbGQgeHBhdGg9Im5hbWUvZmFtaWx5Ii8+Ci0gIDwveHM6dW5pcXVlPgotICA8eHM6a2V5IG5hbWU9J2VtcGlkJz4KLSAgIDx4czpzZWxlY3RvciB4cGF0aD0icGVyc29uIi8+Ci0gICA8eHM6ZmllbGQgeHBhdGg9IkBpZCIvPgotICA8L3hzOmtleT4KLSAgPHhzOmtleXJlZiBuYW1lPSJrZXlyZWYxIiByZWZlcj0nZW1waWQnPgotICAgPHhzOnNlbGVjdG9yIHhwYXRoPSJwZXJzb24iLz4gCi0gICA8eHM6ZmllbGQgeHBhdGg9ImxpbmsvQG1hbmFnZXIiLz4gIAotICA8L3hzOmtleXJlZj4KLQotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9InBlcnNvbiI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czpzZXF1ZW5jZT4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJuYW1lIi8+Ci0gICAgIDx4czplbGVtZW50IHJlZj0iZW1haWwiIG1pbk9jY3Vycz0nMCcgbWF4T2NjdXJzPSd1bmJvdW5kZWQnLz4KLSAgICAgPHhzOmVsZW1lbnQgcmVmPSJ1cmwiICAgbWluT2NjdXJzPScwJyBtYXhPY2N1cnM9J3VuYm91bmRlZCcvPgotICAgICA8eHM6ZWxlbWVudCByZWY9ImxpbmsiICBtaW5PY2N1cnM9JzEnIG1heE9jY3Vycz0nMScvPgotICAgPC94czpzZXF1ZW5jZT4KLSAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaWQiICB0eXBlPSJ4czpJRCIgdXNlPSdyZXF1aXJlZCcvPgotICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJub3RlIiB0eXBlPSJ4czpzdHJpbmciLz4KLSAgIDx4czphdHRyaWJ1dGUgbmFtZT0iY29udHIiIGRlZmF1bHQ9ImZhbHNlIj4KLSAgICA8eHM6c2ltcGxlVHlwZT4KLSAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2UgPSAieHM6c3RyaW5nIj4KLSAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9InRydWUiLz4KLSAgICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9ImZhbHNlIi8+Ci0gICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpzaW1wbGVUeXBlPgotICAgPC94czphdHRyaWJ1dGU+Ci0gICA8eHM6YXR0cmlidXRlIG5hbWU9InNhbGFyeSIgdHlwZT0ieHM6aW50ZWdlciIvPgotICA8L3hzOmNvbXBsZXhUeXBlPgotIDwveHM6ZWxlbWVudD4KLQotIDx4czplbGVtZW50IG5hbWU9Im5hbWUiPgotICA8eHM6Y29tcGxleFR5cGU+Ci0gICA8eHM6YWxsPgotICAgIDx4czplbGVtZW50IHJlZj0iZmFtaWx5Ii8+Ci0gICAgPHhzOmVsZW1lbnQgcmVmPSJnaXZlbiIvPgotICAgPC94czphbGw+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0iZmFtaWx5IiB0eXBlPSd4czpzdHJpbmcnLz4KLQotIDx4czplbGVtZW50IG5hbWU9ImdpdmVuIiB0eXBlPSd4czpzdHJpbmcnLz4KLQotIDx4czplbGVtZW50IG5hbWU9ImVtYWlsIiB0eXBlPSd4czpzdHJpbmcnLz4KLQotIDx4czplbGVtZW50IG5hbWU9InVybCI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czphdHRyaWJ1dGUgbmFtZT0iaHJlZiIgdHlwZT0ieHM6c3RyaW5nIiBkZWZhdWx0PSJodHRwOi8vIi8+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0gPC94czplbGVtZW50PgotCi0gPHhzOmVsZW1lbnQgbmFtZT0ibGluayI+Ci0gIDx4czpjb21wbGV4VHlwZT4KLSAgIDx4czphdHRyaWJ1dGUgbmFtZT0ibWFuYWdlciIgdHlwZT0ieHM6SURSRUYiLz4KLSAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3Vib3JkaW5hdGVzIiB0eXBlPSJ4czpJRFJFRlMiLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLSA8L3hzOmVsZW1lbnQ+Ci0KLSA8eHM6bm90YXRpb24gbmFtZT0nZ2lmJyBwdWJsaWM9Jy0vL0FQUC9QaG90b3Nob3AvNC4wJyBzeXN0ZW09J3Bob3Rvc2hvcC5leGUnLz4KLQotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY2NjIxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjOkNhdGFsb2d1ZSB4bWxuczpjPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS90ZXN0IiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlL3Rlc3QgQ2F0YWxvZ3VlLnhzZCAiPgotCTxjOkJvb2s+Ci0JCTx0aXRsZT5Qcm9mZXNzaW9uYWwgWE1MIFNjaGVtYTwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JCTxpc2JuPjEtODYxMDA1LTQ3LTQ8L2lzYm4+Ci0JCTxwdWJsaXNoZXI+V3JveCBQcmVzczwvcHVibGlzaGVyPgotCTwvYzpCb29rPgotCTxjOk1hZ2F6aW5lPgotCQk8dGl0bGU+V2ViU3BoZXJlIERldmVsb3BlcidzIEpvdXJuYWw8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCTwvYzpNYWdhemluZT4KLQk8YzpCb29rPgotCQk8dGl0bGU+SmF2YSBhbmQgWFNMVDwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JCTxpc2JuPjAtNTk2LTAwMTQzLTY8L2lzYm4+Ci0JCTxwdWJsaXNoZXI+TydSZWlsbHk8L3B1Ymxpc2hlcj4KLQk8L2M6Qm9vaz4KLTwvYzpDYXRhbG9ndWU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTY2ODY0Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNjUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS90ZXN0IgotCXhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLQl4bWxuczpjPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS90ZXN0IgotCXhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvdGVzdCBDYXRhbG9ndWUueHNkICI+Ci0JPGdyb3VwIG5hbWU9InRlc3QiPgotCQk8c2VxdWVuY2U+Ci0JCQk8ZWxlbWVudCBuYW1lPSJ0ZXN0MSI+PC9lbGVtZW50PgotCQk8L3NlcXVlbmNlPgotCTwvZ3JvdXA+Ci0JPGNvbXBsZXhUeXBlIG5hbWU9IlB1YmxpY2F0aW9uVHlwZSI+Ci0JCTxzZXF1ZW5jZT4KLQkJCTxlbGVtZW50IG5hbWU9InRpdGxlIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9ImF1dGhvciIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiCi0JCQkJbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJPC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iZGF0ZSIgdHlwZT0iZ1llYXIiPjwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9IkJvb2tUeXBlIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJjOlB1YmxpY2F0aW9uVHlwZSI+Ci0JCQkJPHNlcXVlbmNlPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJpc2JuIiB0eXBlPSJzdHJpbmciIC8+Ci0JCQkJCTxlbGVtZW50IG5hbWU9InB1Ymxpc2hlciIgdHlwZT0ic3RyaW5nIiAvPgotCQkJCTwvc2VxdWVuY2U+Ci0JCQk8L2V4dGVuc2lvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1hZ2F6aW5lVHlwZSI+Ci0JCTxjb21wbGV4Q29udGVudD4KLQkJCTxyZXN0cmljdGlvbiBiYXNlPSJjOlB1YmxpY2F0aW9uVHlwZSI+Ci0JCQkJPHNlcXVlbmNlPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJ0aXRsZSIgdHlwZT0ic3RyaW5nIiAvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJhdXRob3IiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIgotCQkJCQkJbWF4T2NjdXJzPSIwIiAvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJkYXRlIiB0eXBlPSJnWWVhciI+PC9lbGVtZW50PgotCQkJCTwvc2VxdWVuY2U+Ci0JCQk8L3Jlc3RyaWN0aW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0KLQk8ZWxlbWVudCBuYW1lPSJQdWJsaWNhdGlvbiIgdHlwZT0iYzpQdWJsaWNhdGlvblR5cGUiCi0JCWFic3RyYWN0PSJ0cnVlIj4KLQk8L2VsZW1lbnQ+Ci0KLQk8ZWxlbWVudCBuYW1lPSJCb29rIiB0eXBlPSJjOkJvb2tUeXBlIgotCQlzdWJzdGl0dXRpb25Hcm91cD0iYzpQdWJsaWNhdGlvbiI+Ci0JPC9lbGVtZW50PgotCi0JPGVsZW1lbnQgbmFtZT0iTWFnYXppbmUiIHR5cGU9ImM6TWFnYXppbmVUeXBlIgotCQlzdWJzdGl0dXRpb25Hcm91cD0iYzpQdWJsaWNhdGlvbiI+Ci0JPC9lbGVtZW50PgotCi0JPGVsZW1lbnQgbmFtZT0iQ2F0YWxvZ3VlIj4KLQkJPGNvbXBsZXhUeXBlPgotCQkJPHNlcXVlbmNlPgotCQkJCTxlbGVtZW50IHJlZj0iYzpQdWJsaWNhdGlvbiIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPjwvZWxlbWVudD4KLQkJCTwvc2VxdWVuY2U+Ci0JCTwvY29tcGxleFR5cGU+Ci0JPC9lbGVtZW50PgotCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL1B1cmNoYXNlT3JkZXIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9QdXJjaGFzZU9yZGVyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTJiZDdlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL1B1cmNoYXNlT3JkZXIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwbzpwdXJjaGFzZU9yZGVyIG9yZGVyRGF0ZT0iMjAwMS0wMS0wMSIgeG1sbnM6cG89Imh0dHA6Ly93d3cuaWJtLmNvbSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmlibS5jb20gUHVyY2hhc2VPcmRlci54c2QiPgotICA8c2hpcFRvIGNvdW50cnk9IlVTIj4KLSAgICA8bmFtZT5BbGljZSBTbWl0aDwvbmFtZT4KLSAgICA8c3RyZWV0PjEyNSBNYXBsZSBTdHJlZXQ8L3N0cmVldD4KLSAgICA8Y2l0eT5NaWxsIFZhbGxleTwvY2l0eT4KLSAgICA8c3RhdGU+Q0E8L3N0YXRlPgotICAgIDx6aXA+OTA5NTI8L3ppcD4KLSAgPC9zaGlwVG8+Ci0gIDxiaWxsVG8gY291bnRyeT0iVVMiPgotICAgIDxuYW1lPlJvYmVydCBTbWl0aDwvbmFtZT4KLSAgICA8c3RyZWV0PjggT2FrIEF2ZW51ZTwvc3RyZWV0PgotICAgIDxjaXR5Pk9sZCBUb3duPC9jaXR5PgotICAgIDxzdGF0ZT5QQTwvc3RhdGU+Ci0gICAgPHppcD45NTgxOTwvemlwPgotICA8L2JpbGxUbz4KLSAgPHBvOmNvbW1lbnQ+SHVycnksIG15IGxhd24gaXMgZ29pbmcgd2lsZCE8L3BvOmNvbW1lbnQ+Ci0gIDxpdGVtcz4KLSAgICA8aXRlbSBwYXJ0TnVtPSI4NzItQUEiPgotICAgICAgPHByb2R1Y3ROYW1lPkxhd25tb3dlcjwvcHJvZHVjdE5hbWU+Ci0gICAgICA8cXVhbnRpdHk+MTwvcXVhbnRpdHk+Ci0gICAgICA8VVNQcmljZT4xNDguOTU8L1VTUHJpY2U+Ci0gICAgICA8cG86Y29tbWVudD5Db25maXJtIHRoaXMgaXMgZWxlY3RyaWM8L3BvOmNvbW1lbnQ+Ci0gICAgPC9pdGVtPgotICAgIDxpdGVtIHBhcnROdW09IjkyNi1BQSI+Ci0gICAgICA8cHJvZHVjdE5hbWU+QmFieSBNb25pdG9yPC9wcm9kdWN0TmFtZT4KLSAgICAgIDxxdWFudGl0eT4xPC9xdWFudGl0eT4KLSAgICAgIDxVU1ByaWNlPjM5Ljk4PC9VU1ByaWNlPgotICAgICAgPHNoaXBEYXRlPjIwMDEtMDctMjE8L3NoaXBEYXRlPgotICAgIDwvaXRlbT4KLSAgPC9pdGVtcz4KLTwvcG86cHVyY2hhc2VPcmRlcj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvUHVyY2hhc2VPcmRlci54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL1B1cmNoYXNlT3JkZXIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGZiMDk0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvUHVyY2hhc2VPcmRlci54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmlibS5jb20iCi0geG1sbnM6cG89Imh0dHA6Ly93d3cuaWJtLmNvbSI+Ci0gICAgPGFubm90YXRpb24+Ci0gICAgICAgIDxkb2N1bWVudGF0aW9uIHhtbDpsYW5nPSJlbiI+Ci0gICAgICAgICAgICBQdXJjaGFzZSBvcmRlciBzY2hlbWEgZXhhbXBsZSBmcm9tIFhNTCBTY2hlbWEgUGFydCAwOiBQcmltZXIKLSAgICAgICAgCi0gICAgICAgICAgICBDb3B5cmlnaHQgMjAwMSwgSUJNIENvcnAuIEFsbCByaWdodHMgcmVzZXJ2ZWQKLSAgICAgICAgICAgIENvcHlyaWdodCAyMDAxLCBXb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAKLSAgICAgICAgICAgIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlZXQgZW4gQXV0b21hdGlxdWUsIEtlaW8gVW5pdmVyc2l0eSkuCi0gICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLgotICAgICAgICA8L2RvY3VtZW50YXRpb24+Ci0gICAgPC9hbm5vdGF0aW9uPgotCi0gICAgPGVsZW1lbnQgbmFtZT0icHVyY2hhc2VPcmRlciIgdHlwZT0icG86UHVyY2hhc2VPcmRlclR5cGUiLz4KLQotICAgIDxlbGVtZW50IG5hbWU9ImNvbW1lbnQiIHR5cGU9InN0cmluZyIvPgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9IlB1cmNoYXNlT3JkZXJUeXBlIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0ic2hpcFRvIiB0eXBlPSJwbzpVU0FkZHJlc3MiLz4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImJpbGxUbyIgdHlwZT0icG86VVNBZGRyZXNzIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCByZWY9InBvOmNvbW1lbnQiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaXRlbXMiIHR5cGU9InBvOkl0ZW1zIi8+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ib3JkZXJEYXRlIiB0eXBlPSJkYXRlIi8+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJVU0FkZHJlc3MiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJuYW1lIiB0eXBlPSJzdHJpbmciLz4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InN0cmVldCIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJjaXR5IiB0eXBlPSJzdHJpbmciLz4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InN0YXRlIiB0eXBlPSJwbzpVU1N0YXRlIi8+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ6aXAiIHR5cGU9ImRlY2ltYWwiLz4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJjb3VudHJ5IiB0eXBlPSJOTVRPS0VOIiBmaXhlZD0iVVMiLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9Ikl0ZW1zIj4KLSAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iaXRlbSIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwcm9kdWN0TmFtZSIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJxdWFudGl0eSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNpbXBsZVR5cGU+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZXN0cmljdGlvbiBiYXNlPSJwb3NpdGl2ZUludGVnZXIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1heEV4Y2x1c2l2ZSB2YWx1ZT0iMTAwIi8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zaW1wbGVUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0iVVNQcmljZSIgdHlwZT0iZGVjaW1hbCIvPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgcmVmPSJwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InNoaXBEYXRlIiB0eXBlPSJkYXRlIiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICAgICAgICAgICAgICAgICAgPGF0dHJpYnV0ZSBuYW1lPSJwYXJ0TnVtIiB0eXBlPSJwbzpTS1UiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICA8L3NlcXVlbmNlPgotICAgIDwvY29tcGxleFR5cGU+Ci0KLSAgICA8c2ltcGxlVHlwZSBuYW1lPSJTS1UiPgotICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgICAgICAgIDxwYXR0ZXJuIHZhbHVlPSJcZHszfS1bQS1aXXsyfSIvPgotICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgIDwvc2ltcGxlVHlwZT4KLSAgICAKLSAgICA8c2ltcGxlVHlwZSBuYW1lPSJVU1N0YXRlIj4KLSAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICAgICAgICAgICA8ZW51bWVyYXRpb24gdmFsdWU9IkNBIj48L2VudW1lcmF0aW9uPgotICAgICAgICAgICAgPGVudW1lcmF0aW9uIHZhbHVlPSJQQSI+PC9lbnVtZXJhdGlvbj4KLSAgICAgICAgICAgIDxlbnVtZXJhdGlvbiB2YWx1ZT0iQVIiPjwvZW51bWVyYXRpb24+Ci0gICAgICAgIDwvcmVzdHJpY3Rpb24+Ci0gICAgPC9zaW1wbGVUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvYWRkcmVzcy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvYWRkcmVzcy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2ZWE0NDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2FkZHJlc3MueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNjggKzAsMCBAQAotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgIHhtbG5zOmlwbz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iPgotCi0gPGFubm90YXRpb24+Ci0gIDxkb2N1bWVudGF0aW9uIHhtbDpsYW5nPSJlbiI+Ci0gICBBZGRyZXNzZXMgZm9yIEludGVybmF0aW9uYWwgUHVyY2hhc2Ugb3JkZXIgc2NoZW1hCi0gICBDb3B5cmlnaHQgMjAwMCBFeGFtcGxlLmNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgPC9kb2N1bWVudGF0aW9uPiAKLSA8L2Fubm90YXRpb24+Ci0KLSA8Y29tcGxleFR5cGUgbmFtZT0iQWRkcmVzcyI+Ci0gIDxzZXF1ZW5jZT4KLSAgIDxlbGVtZW50IG5hbWU9Im5hbWUiICAgdHlwZT0ic3RyaW5nIi8+Ci0gICA8ZWxlbWVudCBuYW1lPSJzdHJlZXQiIHR5cGU9InN0cmluZyIvPgotICAgPGVsZW1lbnQgbmFtZT0iY2l0eSIgICB0eXBlPSJzdHJpbmciLz4KLSAgPC9zZXF1ZW5jZT4KLSA8L2NvbXBsZXhUeXBlPgotCi0gPGNvbXBsZXhUeXBlIG5hbWU9IlVTQWRkcmVzcyI+Ci0gIDxjb21wbGV4Q29udGVudD4KLSAgIDxleHRlbnNpb24gYmFzZT0iaXBvOkFkZHJlc3MiPgotICAgIDxzZXF1ZW5jZT4KLSAgICAgPGVsZW1lbnQgbmFtZT0ic3RhdGUiIHR5cGU9ImlwbzpVU1N0YXRlIi8+Ci0gICAgIDxlbGVtZW50IG5hbWU9InppcCIgICB0eXBlPSJwb3NpdGl2ZUludGVnZXIiLz4KLSAgICA8L3NlcXVlbmNlPgotICAgPC9leHRlbnNpb24+Ci0gIDwvY29tcGxleENvbnRlbnQ+Ci0gPC9jb21wbGV4VHlwZT4KLQotIDxjb21wbGV4VHlwZSBuYW1lPSJVS0FkZHJlc3MiPgotICA8Y29tcGxleENvbnRlbnQ+Ci0gICA8ZXh0ZW5zaW9uIGJhc2U9ImlwbzpBZGRyZXNzIj4KLSAgICA8c2VxdWVuY2U+Ci0gICAgIDxlbGVtZW50IG5hbWU9InBvc3Rjb2RlIiB0eXBlPSJpcG86VUtQb3N0Y29kZSIvPgotICAgIDwvc2VxdWVuY2U+Ci0gICAgPGF0dHJpYnV0ZSBuYW1lPSJleHBvcnRDb2RlIiB0eXBlPSJwb3NpdGl2ZUludGVnZXIiIGZpeGVkPSIxIi8+Ci0gICA8L2V4dGVuc2lvbj4KLSAgPC9jb21wbGV4Q29udGVudD4KLSA8L2NvbXBsZXhUeXBlPgotCi0gPCEtLSBvdGhlciBBZGRyZXNzIGRlcml2YXRpb25zIGZvciBtb3JlIGNvdW50cmllcyAtLT4gCi0KLSA8c2ltcGxlVHlwZSBuYW1lPSJVU1N0YXRlIj4KLSAgPHJlc3RyaWN0aW9uIGJhc2U9InN0cmluZyI+Ci0gICA8ZW51bWVyYXRpb24gdmFsdWU9IkFLIi8+Ci0gICA8ZW51bWVyYXRpb24gdmFsdWU9IkFMIi8+Ci0gICA8ZW51bWVyYXRpb24gdmFsdWU9IkFSIi8+Ci0gICA8IS0tIGFuZCBzbyBvbiAuLi4gLS0+Ci0gIDwvcmVzdHJpY3Rpb24+Ci0gPC9zaW1wbGVUeXBlPgotCi0gPCEtLSBzaW1wbGUgdHlwZSBkZWZpbml0aW9uIGZvciBQb3N0Y29kZSAtLT4KLSA8c2ltcGxlVHlwZSBuYW1lPSJQb3N0Y29kZSI+Ci0gIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICA8L3Jlc3RyaWN0aW9uPgotIDwvc2ltcGxlVHlwZT4KLQotIDwhLS0gc2ltcGxlIHR5cGUgZGVmaW5pdGlvbiBmb3IgVUtQb3N0Y29kZSAtLT4KLSA8c2ltcGxlVHlwZSBuYW1lPSJVS1Bvc3Rjb2RlIj4KLSAgPHJlc3RyaWN0aW9uIGJhc2U9ImlwbzpQb3N0Y29kZSI+Ci0gICAgPHBhdHRlcm4gdmFsdWU9IltBLVpdezJ9XGRcc1xkW0EtWl17Mn0iLz4KLSAgPC9yZXN0cmljdGlvbj4KLSA8L3NpbXBsZVR5cGU+Ci0KLQotPC9zY2hlbWE+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG8ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwby54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ODNhZGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwby54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxpcG86cHVyY2hhc2VPcmRlcgotICBvcmRlckRhdGU9IjIwMDEtMDEtMDEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhtbG5zOmlwbz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8gaXBvLnhzZCAiPgotCi0gICAgPHNoaXBUbyBleHBvcnRDb2RlPSIxIiB4c2k6dHlwZT0iaXBvOlVLQWRkcmVzcyI+Ci0gICAgICAgIDxuYW1lPkhlbGVuIFpvZTwvbmFtZT4KLSAgICAgICAgPHN0cmVldD40NyBFZGVuIFN0cmVldDwvc3RyZWV0PgotICAgICAgICA8Y2l0eT5DYW1icmlkZ2U8L2NpdHk+Ci0gICAgICAgIDxwb3N0Y29kZT5DQjEgMUpSPC9wb3N0Y29kZT4KLSAgICA8L3NoaXBUbz4KLQotICAgIDxiaWxsVG8geHNpOnR5cGU9ImlwbzpVU0FkZHJlc3MiPgotICAgICAgICA8bmFtZT5Sb2JlcnQgU21pdGg8L25hbWU+Ci0gICAgICAgIDxzdHJlZXQ+OCBPYWsgQXZlbnVlPC9zdHJlZXQ+Ci0gICAgICAgIDxjaXR5Pk9sZCBUb3duPC9jaXR5PgotICAgICAgICA8c3RhdGU+QVI8L3N0YXRlPgotICAgICAgICA8emlwPjk1ODE5PC96aXA+Ci0gICAgPC9iaWxsVG8+Ci0KLSAgICA8aXRlbXM+Ci0gICAgICAgIDxpdGVtIHBhcnROdW09IjgzMy1BQSI+Ci0gICAgICAgICAgICA8cHJvZHVjdE5hbWU+TGFwaXMgbmVja2xhY2U8L3Byb2R1Y3ROYW1lPgotICAgICAgICAgICAgPHF1YW50aXR5PjE8L3F1YW50aXR5PgotICAgICAgICAgICAgPFVTUHJpY2U+OTkuOTU8L1VTUHJpY2U+Ci0gICAgICAgICAgICA8aXBvOmNvbW1lbnQ+V2FudCB0aGlzIGZvciB0aGUgaG9saWRheXMhPC9pcG86Y29tbWVudD4KLSAgICAgICAgICAgIDxzaGlwRGF0ZT4xOTk5LTEyLTA1PC9zaGlwRGF0ZT4KLSAgICAgICAgPC9pdGVtPgotICAgIDwvaXRlbXM+Ci08L2lwbzpwdXJjaGFzZU9yZGVyPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvaXBvLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG8ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTYzZDAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG8ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPHNjaGVtYSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotICAgICAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgIHhtbG5zOmlwbz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iPgotCi0gPGFubm90YXRpb24+Ci0gIDxkb2N1bWVudGF0aW9uIHhtbDpsYW5nPSJlbiI+Ci0gICBJbnRlcm5hdGlvbmFsIFB1cmNoYXNlIG9yZGVyIHNjaGVtYSBmb3IgRXhhbXBsZS5jb20KLSAgIENvcHlyaWdodCAyMDAwIEV4YW1wbGUuY29tLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICA8L2RvY3VtZW50YXRpb24+IAotIDwvYW5ub3RhdGlvbj4KLQotIDwhLS0gaW5jbHVkZSBhZGRyZXNzIGNvbnN0cnVjdHMgLS0+Ci0gPGluY2x1ZGUKLSAgc2NoZW1hTG9jYXRpb249ImFkZHJlc3MueHNkIi8+Ci0KLSA8ZWxlbWVudCBuYW1lPSJwdXJjaGFzZU9yZGVyIiB0eXBlPSJpcG86UHVyY2hhc2VPcmRlclR5cGUiLz4KLQotIDxlbGVtZW50IG5hbWU9ImNvbW1lbnQiIHR5cGU9InN0cmluZyIvPgotCi0gPGNvbXBsZXhUeXBlIG5hbWU9IlB1cmNoYXNlT3JkZXJUeXBlIj4KLSAgPHNlcXVlbmNlPgotICAgPGVsZW1lbnQgbmFtZT0ic2hpcFRvIiAgICAgdHlwZT0iaXBvOkFkZHJlc3MiLz4KLSAgIDxlbGVtZW50IG5hbWU9ImJpbGxUbyIgICAgIHR5cGU9ImlwbzpBZGRyZXNzIi8+Ci0gICA8ZWxlbWVudCByZWY9Imlwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgIDxlbGVtZW50IG5hbWU9Iml0ZW1zIiAgICAgIHR5cGU9ImlwbzpJdGVtcyIvPgotICA8L3NlcXVlbmNlPgotICA8YXR0cmlidXRlIG5hbWU9Im9yZGVyRGF0ZSIgdHlwZT0iZGF0ZSIvPgotIDwvY29tcGxleFR5cGU+Ci0KLSA8Y29tcGxleFR5cGUgbmFtZT0iSXRlbXMiPgotICA8c2VxdWVuY2U+Ci0gICA8ZWxlbWVudCBuYW1lPSJpdGVtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLSAgICA8Y29tcGxleFR5cGU+Ci0gICAgIDxzZXF1ZW5jZT4KLSAgICAgIDxlbGVtZW50IG5hbWU9InByb2R1Y3ROYW1lIiB0eXBlPSJzdHJpbmciLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9InF1YW50aXR5Ij4KLSAgICAgICA8c2ltcGxlVHlwZT4KLSAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9InBvc2l0aXZlSW50ZWdlciI+Ci0gICAgICAgICA8bWF4RXhjbHVzaXZlIHZhbHVlPSIxMDAiLz4KLSAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICAgICA8L3NpbXBsZVR5cGU+Ci0gICAgICA8L2VsZW1lbnQ+Ci0gICAgICA8ZWxlbWVudCBuYW1lPSJVU1ByaWNlIiAgICB0eXBlPSJkZWNpbWFsIi8+Ci0gICAgICA8ZWxlbWVudCByZWY9Imlwbzpjb21tZW50IiBtaW5PY2N1cnM9IjAiLz4KLSAgICAgIDxlbGVtZW50IG5hbWU9InNoaXBEYXRlIiAgIHR5cGU9ImRhdGUiIG1pbk9jY3Vycz0iMCIvPgotICAgICA8L3NlcXVlbmNlPgotICAgICA8YXR0cmlidXRlIG5hbWU9InBhcnROdW0iIHR5cGU9ImlwbzpTS1UiIHVzZT0icmVxdWlyZWQiLz4KLSAgICA8L2NvbXBsZXhUeXBlPgotICAgPC9lbGVtZW50PgotICA8L3NlcXVlbmNlPgotIDwvY29tcGxleFR5cGU+Ci0KLSA8c2ltcGxlVHlwZSBuYW1lPSJTS1UiPgotICA8cmVzdHJpY3Rpb24gYmFzZT0ic3RyaW5nIj4KLSAgIDxwYXR0ZXJuIHZhbHVlPSJcZHszfS1bQS1aXXsyfSIvPgotICA8L3Jlc3RyaWN0aW9uPgotIDwvc2ltcGxlVHlwZT4KLQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwb18ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwb18ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzZkNDlkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG9fLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLTxzY2hlbWEgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLSAgICAgICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotICAgICAgICB4bWxuczppcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIj4KLQotIDxhbm5vdGF0aW9uPgotICA8ZG9jdW1lbnRhdGlvbiB4bWw6bGFuZz0iZW4iPgotICAgSW50ZXJuYXRpb25hbCBQdXJjaGFzZSBvcmRlciBzY2hlbWEgZm9yIEV4YW1wbGUuY29tCi0gICBDb3B5cmlnaHQgMjAwMCBFeGFtcGxlLmNvbS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAgPC9kb2N1bWVudGF0aW9uPiAKLSA8L2Fubm90YXRpb24+Ci0KLSA8IS0tIGluY2x1ZGUgYWRkcmVzcyBjb25zdHJ1Y3RzIC0tPgotIDxpbmNsdWRlCi0gIHNjaGVtYUxvY2F0aW9uPSJhZGRyZXNzXy54c2QiLz4KLQotIDxlbGVtZW50IG5hbWU9InB1cmNoYXNlT3JkZXIiIHR5cGU9ImlwbzpQdXJjaGFzZU9yZGVyVHlwZSIvPgotCi0gPGVsZW1lbnQgbmFtZT0iY29tbWVudCIgdHlwZT0ic3RyaW5nIi8+Ci0KLSA8Y29tcGxleFR5cGUgbmFtZT0iUHVyY2hhc2VPcmRlclR5cGUiPgotICA8c2VxdWVuY2U+Ci0gICA8ZWxlbWVudCBuYW1lPSJzaGlwVG8iICAgICB0eXBlPSJpcG86QWRkcmVzcyIvPgotICAgPGVsZW1lbnQgbmFtZT0iYmlsbFRvIiAgICAgdHlwZT0iaXBvOkFkZHJlc3MiLz4KLSAgIDxlbGVtZW50IHJlZj0iaXBvOmNvbW1lbnQiIG1pbk9jY3Vycz0iMCIvPgotICAgPGVsZW1lbnQgbmFtZT0iaXRlbXMiICAgICAgdHlwZT0iaXBvOkl0ZW1zIi8+Ci0gIDwvc2VxdWVuY2U+Ci0gIDxhdHRyaWJ1dGUgbmFtZT0ib3JkZXJEYXRlIiB0eXBlPSJkYXRlIi8+Ci0gPC9jb21wbGV4VHlwZT4KLQotIDxjb21wbGV4VHlwZSBuYW1lPSJJdGVtcyI+Ci0gIDxzZXF1ZW5jZT4KLSAgIDxlbGVtZW50IG5hbWU9Iml0ZW0iIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgIDxjb21wbGV4VHlwZT4KLSAgICAgPHNlcXVlbmNlPgotICAgICAgPGVsZW1lbnQgbmFtZT0icHJvZHVjdE5hbWUiIHR5cGU9InN0cmluZyIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0icXVhbnRpdHkiPgotICAgICAgIDxzaW1wbGVUeXBlPgotICAgICAgICA8cmVzdHJpY3Rpb24gYmFzZT0icG9zaXRpdmVJbnRlZ2VyIj4KLSAgICAgICAgIDxtYXhFeGNsdXNpdmUgdmFsdWU9IjEwMCIvPgotICAgICAgICA8L3Jlc3RyaWN0aW9uPgotICAgICAgIDwvc2ltcGxlVHlwZT4KLSAgICAgIDwvZWxlbWVudD4KLSAgICAgIDxlbGVtZW50IG5hbWU9IlVTUHJpY2UiICAgIHR5cGU9ImRlY2ltYWwiLz4KLSAgICAgIDxlbGVtZW50IHJlZj0iaXBvOmNvbW1lbnQiIG1pbk9jY3Vycz0iMCIvPgotICAgICAgPGVsZW1lbnQgbmFtZT0ic2hpcERhdGUiICAgdHlwZT0iZGF0ZSIgbWluT2NjdXJzPSIwIi8+Ci0gICAgIDwvc2VxdWVuY2U+Ci0gICAgIDxhdHRyaWJ1dGUgbmFtZT0icGFydE51bSIgdHlwZT0iaXBvOlNLVSIgdXNlPSJyZXF1aXJlZCIvPgotICAgIDwvY29tcGxleFR5cGU+Ci0gICA8L2VsZW1lbnQ+Ci0gIDwvc2VxdWVuY2U+Ci0gPC9jb21wbGV4VHlwZT4KLQotIDxzaW1wbGVUeXBlIG5hbWU9IlNLVSI+Ci0gIDxyZXN0cmljdGlvbiBiYXNlPSJzdHJpbmciPgotICAgPHBhdHRlcm4gdmFsdWU9IlxkezN9LVtBLVpdezJ9Ii8+Ci0gIDwvcmVzdHJpY3Rpb24+Ci0gPC9zaW1wbGVUeXBlPgotCi08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGVkNmYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxleDpwdXJjaGFzZVJlcG9ydAotICAgICAgICB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0gICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQgcmVwb3J0LnhzZCI+Ci0gICAgPGV4OnJlZ2lvbnM+Ci0gICAgICAgIDxleDp6aXAgY29kZT0iMzk0ODciPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtQVgiIHF1YW50aXR5PSIzIi8+Ci0gICAgICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjI5My1MRCIgcXVhbnRpdHk9IjMiLz4KLSAgICAgICAgPC9leDp6aXA+Ci0gICAgICAgIDxleDp6aXAgY29kZT0iMjkzODciPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSI4OTctSkQiIHF1YW50aXR5PSIzMCIvPgotICAgICAgICA8L2V4OnppcD4KLSAgICAgICAgPGV4OnppcCBjb2RlPSIxOTI4NSI+Ci0gICAgICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjEyMy1DSyIgcXVhbnRpdHk9IjE5Ii8+Ci0gICAgICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjE3NS1GUSIgcXVhbnRpdHk9IjgiLz4KLSAgICAgICAgPC9leDp6aXA+Ci0gICAgPC9leDpyZWdpb25zPgotCi0gICAgPGV4OnBhcnRzPgotICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjI5My1BWCIvPgotICAgICAgICA8ZXg6cGFydCBudW1iZXI9Ijg5Ny1KRCIvPgotICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjEyMy1DSyIvPgotICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjI5My1MRCIvPgotICAgICAgICA8ZXg6cGFydCBudW1iZXI9IjE3NS1GUSIvPgotICAgIDwvZXg6cGFydHM+Ci08L2V4OnB1cmNoYXNlUmVwb3J0PgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWU3Y2E0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0geG1sbnM6cj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0geG1sbnM6eGlwbz0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iCi0gZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotICAgIDxhbm5vdGF0aW9uPgotICAgICAgICA8ZG9jdW1lbnRhdGlvbj4KLSAgICAgICAgICAgIFRoZSBSZXBvcnQgU2NoZW1hIGZyb20gWE1MIFNjaGVtYSBQYXJ0IDA6IFByaW1lcgotICAgICAgICAgICAgCi0gICAgICAgICAgICBDb3B5cmlnaHQgMjAwMSwgSUJNIENvcnAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gICAgICAgICAgICBDb3B5cmlnaHQgMjAwMSwgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bSAKLSAgICAgICAgICAgIChNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlLCBLZWlvIFVuaXZlcnNpdHkpLgotICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAgICAgICAgPC9kb2N1bWVudGF0aW9uPgotICAgIDwvYW5ub3RhdGlvbj4KLQotICAgIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIgc2NoZW1hTG9jYXRpb249Imlwby54c2QiLz4KLQotICAgIDxlbGVtZW50IG5hbWU9InB1cmNoYXNlUmVwb3J0Ij4KLSAgICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlZ2lvbnMiIHR5cGU9InI6UmVnaW9uc1R5cGUiLz4KLSAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwYXJ0cyIgdHlwZT0icjpQYXJ0c1R5cGUiLz4KLSAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBlcmlvZCIgdHlwZT0iZHVyYXRpb24iLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icGVyaW9kRW5kaW5nIiB0eXBlPSJkYXRlIi8+Ci0gICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgIAotICAgICAgICA8dW5pcXVlIG5hbWU9ImR1bW15MSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cmVnaW9ucy9yOnppcCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAY29kZSIvPgotICAgICAgICA8L3VuaXF1ZT4KLSAgICAgICAgCi0gICAgICAgIDxrZXkgbmFtZT0icE51bUtleSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cGFydHMvcjpwYXJ0Ii8+Ci0gICAgICAgICAgICA8ZmllbGQgeHBhdGg9IkBudW1iZXIiLz4KLSAgICAgICAgPC9rZXk+Ci0gICAgICAgIDxrZXlyZWYgbmFtZT0iZHVtbXkyIiByZWZlcj0icjpwTnVtS2V5Ij4KLSAgICAgICAgICAgIDxzZWxlY3RvciB4cGF0aD0icjpyZWdpb25zL3I6emlwL3I6cGFydCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAbnVtYmVyIi8+Ci0gICAgICAgIDwva2V5cmVmPgotICAgIDwvZWxlbWVudD4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZWdpb25zVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InppcCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9ImFueVR5cGUiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4aXBvOlNLVSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icXVhbnRpdHkiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNvZGUiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIvPgotICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJQYXJ0c1R5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwYXJ0IiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im51bWJlciIgdHlwZT0ieGlwbzpTS1UiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICA8L3NpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdkMzRjZTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxleDpwdXJjaGFzZVJlcG9ydAotICAgICAgICB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0gICAgICAgIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0gICAgICAgIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiPgotICAgIDxleDpyZWdpb25zPgotICAgICAgICA8ZXg6emlwIGNvZGU9IjM5NDg3Ij4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iMjkzLUFYIiBxdWFudGl0eT0iMyIvPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtTEQiIHF1YW50aXR5PSIzIi8+Ci0gICAgICAgIDwvZXg6emlwPgotICAgICAgICA8ZXg6emlwIGNvZGU9IjI5Mzg3Ij4KLSAgICAgICAgICAgIDxleDpwYXJ0IG51bWJlcj0iODk3LUpEIiBxdWFudGl0eT0iMzAiLz4KLSAgICAgICAgPC9leDp6aXA+Ci0gICAgICAgIDxleDp6aXAgY29kZT0iMTkyODUiPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxMjMtQ0siIHF1YW50aXR5PSIxOSIvPgotICAgICAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxNzUtRlEiIHF1YW50aXR5PSI4Ii8+Ci0gICAgICAgIDwvZXg6emlwPgotICAgIDwvZXg6cmVnaW9ucz4KLQotICAgIDxleDpwYXJ0cz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtQVgiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSI4OTctSkQiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxMjMtQ0siLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIyOTMtTEQiLz4KLSAgICAgICAgPGV4OnBhcnQgbnVtYmVyPSIxNzUtRlEiLz4KLSAgICA8L2V4OnBhcnRzPgotPC9leDpwdXJjaGFzZVJlcG9ydD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjI4NGJlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnRfLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDgxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotIHhtbG5zOnI9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotIHhtbG5zOnhpcG89Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIj4KLSAgICA8YW5ub3RhdGlvbj4KLSAgICAgICAgPGRvY3VtZW50YXRpb24+Ci0gICAgICAgICAgICBUaGUgUmVwb3J0IFNjaGVtYSBmcm9tIFhNTCBTY2hlbWEgUGFydCAwOiBQcmltZXIKLSAgICAgICAgICAgIAotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDEsIElCTSBDb3JwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICAgICAgICAgICAgQ29weXJpZ2h0IDIwMDEsIFdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0gCi0gICAgICAgICAgICAoTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSwgS2VpbyBVbml2ZXJzaXR5KS4KLSAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gICAgICAgIDwvZG9jdW1lbnRhdGlvbj4KLSAgICA8L2Fubm90YXRpb24+Ci0KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9JUE8iIHNjaGVtYUxvY2F0aW9uPSJpcG9fXy54c2QiLz4KLQotICAgIDxlbGVtZW50IG5hbWU9InB1cmNoYXNlUmVwb3J0Ij4KLSAgICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InJlZ2lvbnMiIHR5cGU9InI6UmVnaW9uc1R5cGUiLz4KLSAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwYXJ0cyIgdHlwZT0icjpQYXJ0c1R5cGUiLz4KLSAgICAgICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9InBlcmlvZCIgdHlwZT0iZHVyYXRpb24iLz4KLSAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icGVyaW9kRW5kaW5nIiB0eXBlPSJkYXRlIi8+Ci0gICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgIAotICAgICAgICA8dW5pcXVlIG5hbWU9ImR1bW15MSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cmVnaW9ucy9yOnppcCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAY29kZSIvPgotICAgICAgICA8L3VuaXF1ZT4KLSAgICAgICAgCi0gICAgICAgIDxrZXkgbmFtZT0icE51bUtleSI+Ci0gICAgICAgICAgICA8c2VsZWN0b3IgeHBhdGg9InI6cGFydHMvcjpwYXJ0Ii8+Ci0gICAgICAgICAgICA8ZmllbGQgeHBhdGg9IkBudW1iZXIiLz4KLSAgICAgICAgPC9rZXk+Ci0gICAgICAgIDxrZXlyZWYgbmFtZT0iZHVtbXkyIiByZWZlcj0icjpwTnVtS2V5Ij4KLSAgICAgICAgICAgIDxzZWxlY3RvciB4cGF0aD0icjpyZWdpb25zL3I6emlwL3I6cGFydCIvPgotICAgICAgICAgICAgPGZpZWxkIHhwYXRoPSJAbnVtYmVyIi8+Ci0gICAgICAgIDwva2V5cmVmPgotICAgIDwvZWxlbWVudD4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJSZWdpb25zVHlwZSI+Ci0gICAgICAgIDxzZXF1ZW5jZT4KLSAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InppcCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICAgICAgPGVsZW1lbnQgbmFtZT0icGFydCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjb21wbGV4VHlwZT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNvbXBsZXhDb250ZW50PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlc3RyaWN0aW9uIGJhc2U9ImFueVR5cGUiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0ibnVtYmVyIiB0eXBlPSJ4aXBvOlNLVSIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhdHRyaWJ1dGUgbmFtZT0icXVhbnRpdHkiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9yZXN0cmljdGlvbj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jb21wbGV4Q29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICAgICAgPC9lbGVtZW50PgotICAgICAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9ImNvZGUiIHR5cGU9InBvc2l0aXZlSW50ZWdlciIvPgotICAgICAgICAgICAgICAgIDwvY29tcGxleFR5cGU+Ci0gICAgICAgICAgICA8L2VsZW1lbnQ+Ci0gICAgICAgIDwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJQYXJ0c1R5cGUiPgotICAgICAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJwYXJ0IiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0gICAgICAgICAgICAgICAgPGNvbXBsZXhUeXBlPgotICAgICAgICAgICAgICAgICAgICA8c2ltcGxlQ29udGVudD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxleHRlbnNpb24gYmFzZT0ic3RyaW5nIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXR0cmlidXRlIG5hbWU9Im51bWJlciIgdHlwZT0ieGlwbzpTS1UiLz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvZXh0ZW5zaW9uPgotICAgICAgICAgICAgICAgICAgICA8L3NpbXBsZUNvbnRlbnQ+Ci0gICAgICAgICAgICAgICAgPC9jb21wbGV4VHlwZT4KLSAgICAgICAgICAgIDwvZWxlbWVudD4KLSAgICAgICAgPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDBjODJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTk2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgICAgeG1sbnM6ZXI9Imh0dHA6Ly9vYXNpcy5uYW1lcy50Yy5lbnRpdHkueG1sbnMueG1sLmNhdGFsb2ciCi0gICAgICAgICAgIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL29hc2lzLm5hbWVzLnRjLmVudGl0eS54bWxucy54bWwuY2F0YWxvZyIKLSAgICAgICAgICAgZWxlbWVudEZvcm1EZWZhdWx0PSJxdWFsaWZpZWQiPgotCi0gIDwhLS0gJElkOiBjYXRhbG9nLnhzZCx2IDEuMSAyMDA1LzA2LzI0IDA0OjE3OjUwIGNzYWx0ZXIgRXhwICQgLS0+Ci0KLSAgPHhzOnNpbXBsZVR5cGUgbmFtZT0icHViSWRDaGFycyI+Ci0gICAgPCEtLSBBIHN0cmluZyBvZiB0aGUgY2hhcmFjdGVycyBkZWZpbmVkIGFzIHB1YklkQ2hhciBpbiBwcm9kdWN0aW9uIDEzCi0gICAgICAgICBvZiB0aGUgU2Vjb25kIEVkaXRpb24gb2YgdGhlIFhNTCAxLjAgUmVjb21tZW5kYXRpb24uIERvZXMgbm90IGluY2x1ZGUKLSAgICAgICAgIHRoZSB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5J3JlIG5vcm1hbGl6ZWQgYnkgWE1MIHBhcnNpbmcuIC0tPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czpzdHJpbmciPgotICAgICAgPHhzOnBhdHRlcm4gdmFsdWU9IlthXC16QVwtWjBcLTlcLScoKSssLi86PT87ISojQCRfJV0qIi8+Ci0gICAgPC94czpyZXN0cmljdGlvbj4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9J3B1YmxpY0lkZW50aWZpZXInPgotICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJlcjpwdWJJZENoYXJzIi8+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8eHM6c2ltcGxlVHlwZSBuYW1lPSdwYXJ0aWFsUHVibGljSWRlbnRpZmllcic+Ci0gICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9J2VyOnB1YklkQ2hhcnMnLz4KLSAgPC94czpzaW1wbGVUeXBlPgotCi0gIDx4czpzaW1wbGVUeXBlIG5hbWU9J3N5c3RlbU9yUHVibGljJz4KLSAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0neHM6c3RyaW5nJz4KLSAgICAgIDx4czplbnVtZXJhdGlvbiB2YWx1ZT0nc3lzdGVtJy8+Ci0gICAgICA8eHM6ZW51bWVyYXRpb24gdmFsdWU9J3B1YmxpYycvPgotICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gIDwveHM6c2ltcGxlVHlwZT4KLQotICA8IS0tIFRoZSBnbG9iYWwgYXR0cmlidXRlIHhtbDpiYXNlIGlzIG5vdCBleHBsaWNpdGx5IGRlY2xhcmVkOyAtLT4KLSAgPCEtLSBpdCBpcyBhbGxvd2VkIGJ5IHRoZSBhbnlBdHRyaWJ1dGUgZGVjbGFyYXRpb25zLiAtLT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nY2F0YWxvZyc+Ci0gICAgPHhzOmNob2ljZSBtaW5PY2N1cnM9JzEnIG1heE9jY3Vycz0ndW5ib3VuZGVkJz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6cHVibGljJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnN5c3RlbScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjp1cmknLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6cmV3cml0ZVN5c3RlbScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpyZXdyaXRlVVJJJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlUHVibGljJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlU3lzdGVtJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmRlbGVnYXRlVVJJJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOm5leHRDYXRhbG9nJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOmdyb3VwJy8+Ci0gICAgICA8eHM6YW55IG5hbWVzcGFjZT0nIyNvdGhlcicgcHJvY2Vzc0NvbnRlbnRzPSdza2lwJy8+Ci0gICAgPC94czpjaG9pY2U+Ci0gICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9J3ByZWZlcicgdHlwZT0nZXI6c3lzdGVtT3JQdWJsaWMnLz4KLSAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ncHVibGljJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0icHVibGljSWQiIHR5cGU9ImVyOnB1YmxpY0lkZW50aWZpZXIiCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmkiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nc3lzdGVtJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0ic3lzdGVtSWQiIHR5cGU9InhzOnN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVyaSIgdHlwZT0ieHM6YW55VVJJIiB1c2U9InJlcXVpcmVkIi8+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0naWQnIHR5cGU9J3hzOklEJy8+Ci0gICAgICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICAgICAgPC94czpyZXN0cmljdGlvbj4KLSAgICA8L3hzOmNvbXBsZXhDb250ZW50PgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czpjb21wbGV4VHlwZSBuYW1lPSd1cmknPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4czphbnlVUkkiCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJ1cmkiIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ncmV3cml0ZVN5c3RlbSc+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InN5c3RlbUlkU3RhcnRTdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InhzOnN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJld3JpdGVQcmVmaXgiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0ncmV3cml0ZVVSSSc+Ci0gICAgPHhzOmNvbXBsZXhDb250ZW50PgotICAgICAgPHhzOnJlc3RyaWN0aW9uIGJhc2U9InhzOmFueVR5cGUiPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InVyaUlkU3RhcnRTdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InhzOnN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9InJld3JpdGVQcmVmaXgiIHR5cGU9InhzOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nZGVsZWdhdGVQdWJsaWMnPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJwdWJsaWNJZFN0YXJ0U3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJlcjpwYXJ0aWFsUHVibGljSWRlbnRpZmllciIKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNhdGFsb2ciIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nZGVsZWdhdGVTeXN0ZW0nPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJzeXN0ZW1JZFN0YXJ0U3RyaW5nIgotICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJ4czpzdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXRhbG9nIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2RlbGVnYXRlVVJJJz4KLSAgICA8eHM6Y29tcGxleENvbnRlbnQ+Ci0gICAgICA8eHM6cmVzdHJpY3Rpb24gYmFzZT0ieHM6YW55VHlwZSI+Ci0gICAgICAgIDx4czphdHRyaWJ1dGUgbmFtZT0idXJpU3RhcnRTdHJpbmciCi0gICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InhzOnN0cmluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9ImNhdGFsb2ciIHR5cGU9InhzOmFueVVSSSIgdXNlPSJyZXF1aXJlZCIvPgotICAgICAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgICAgICA8eHM6YW55QXR0cmlidXRlIG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJsYXgiLz4KLSAgICAgIDwveHM6cmVzdHJpY3Rpb24+Ci0gICAgPC94czpjb21wbGV4Q29udGVudD4KLSAgPC94czpjb21wbGV4VHlwZT4KLQotICA8eHM6Y29tcGxleFR5cGUgbmFtZT0nbmV4dENhdGFsb2cnPgotICAgIDx4czpjb21wbGV4Q29udGVudD4KLSAgICAgIDx4czpyZXN0cmljdGlvbiBiYXNlPSJ4czphbnlUeXBlIj4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSJjYXRhbG9nIiB0eXBlPSJ4czphbnlVUkkiIHVzZT0icmVxdWlyZWQiLz4KLSAgICAgICAgPHhzOmF0dHJpYnV0ZSBuYW1lPSdpZCcgdHlwZT0neHM6SUQnLz4KLSAgICAgICAgPHhzOmFueUF0dHJpYnV0ZSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ibGF4Ii8+Ci0gICAgICA8L3hzOnJlc3RyaWN0aW9uPgotICAgIDwveHM6Y29tcGxleENvbnRlbnQ+Ci0gIDwveHM6Y29tcGxleFR5cGU+Ci0KLSAgPHhzOmNvbXBsZXhUeXBlIG5hbWU9J2dyb3VwJz4KLSAgICA8eHM6Y2hvaWNlIG1pbk9jY3Vycz0nMScgbWF4T2NjdXJzPSd1bmJvdW5kZWQnPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpwdWJsaWMnLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6c3lzdGVtJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnVyaScvPgotICAgICAgPHhzOmVsZW1lbnQgcmVmPSdlcjpyZXdyaXRlU3lzdGVtJy8+Ci0gICAgICA8eHM6ZWxlbWVudCByZWY9J2VyOnJld3JpdGVVUkknLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6ZGVsZWdhdGVQdWJsaWMnLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6ZGVsZWdhdGVTeXN0ZW0nLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6ZGVsZWdhdGVVUkknLz4KLSAgICAgIDx4czplbGVtZW50IHJlZj0nZXI6bmV4dENhdGFsb2cnLz4KLSAgICAgIDx4czphbnkgbmFtZXNwYWNlPScjI290aGVyJyBwcm9jZXNzQ29udGVudHM9J3NraXAnLz4KLSAgICA8L3hzOmNob2ljZT4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9J3ByZWZlcicgdHlwZT0nZXI6c3lzdGVtT3JQdWJsaWMnLz4KLSAgICA8eHM6YXR0cmlidXRlIG5hbWU9J2lkJyB0eXBlPSd4czpJRCcvPgotICAgIDx4czphbnlBdHRyaWJ1dGUgbmFtZXNwYWNlPSIjI290aGVyIiBwcm9jZXNzQ29udGVudHM9ImxheCIvPgotICA8L3hzOmNvbXBsZXhUeXBlPgotCi0gIDx4czplbGVtZW50IG5hbWU9ImNhdGFsb2ciIHR5cGU9ImVyOmNhdGFsb2ciLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0icHVibGljIiB0eXBlPSJlcjpwdWJsaWMiLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0ic3lzdGVtIiB0eXBlPSJlcjpzeXN0ZW0iLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0idXJpIiB0eXBlPSJlcjp1cmkiLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0icmV3cml0ZVN5c3RlbSIgdHlwZT0iZXI6cmV3cml0ZVN5c3RlbSIvPgotICA8eHM6ZWxlbWVudCBuYW1lPSJyZXdyaXRlVVJJIiB0eXBlPSJlcjpyZXdyaXRlVVJJIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9ImRlbGVnYXRlUHVibGljIiB0eXBlPSJlcjpkZWxlZ2F0ZVB1YmxpYyIvPgotICA8eHM6ZWxlbWVudCBuYW1lPSJkZWxlZ2F0ZVN5c3RlbSIgdHlwZT0iZXI6ZGVsZWdhdGVTeXN0ZW0iLz4KLSAgPHhzOmVsZW1lbnQgbmFtZT0iZGVsZWdhdGVVUkkiIHR5cGU9ImVyOmRlbGVnYXRlVVJJIi8+Ci0gIDx4czplbGVtZW50IG5hbWU9Im5leHRDYXRhbG9nIiB0eXBlPSJlcjpuZXh0Q2F0YWxvZyIvPgotICA8eHM6ZWxlbWVudCBuYW1lPSJncm91cCIgdHlwZT0iZXI6Z3JvdXAiLz4KLQotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nMS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nMS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyNGJjMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciPgotICA8cHVibGljIHB1YmxpY0lkPSJJbnZvaWNlSWRfdGVzdCIgdXJpPSIuL0ludm9pY2UvSW52b2ljZS5kdGQiIHdlYlVSTD0iaHR0cDovL3dlYlVSTCIvPgotICA8c3lzdGVtIHN5c3RlbUlkPSJJbnZvaWNlLmR0ZCIgdXJpPSIuL0ludm9pY2UvSW52b2ljZS5kdGQiIGNoYWNoZWQ9InllcyIgcHJvcGVydHk9InZhbHVlMSIvPgotICA8dXJpIG5hbWU9Imh0dHA6Ly93d3cudGVzdC5jb20vSW52b2ljZS5kdGQiIHVyaT0iLi9JbnZvaWNlL0ludm9pY2UuZHRkIiBjaGFjaGVkPSJubyIgcHJvcGVydHk9InZhbHVlMiIvPgotICA8bmV4dENhdGFsb2cgY2F0YWxvZz0iY2F0YWxvZzIueG1sIiBpZD0ibmV4dENhdGFsb2cxIi8+Ci08L2NhdGFsb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jYXRhbG9nMi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlY2EwM2MuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4gCi08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlXzAwMSIgdXJpPSIuL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPHN5c3RlbSBzeXN0ZW1JZD0iQ2F0YWxvZ3VlLnhzZCIgdXJpPSIuL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIiAvPiAKLSAgPHVyaSBuYW1lPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZS54c2QiIHVyaT0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhzZCIgLz4gCi0gIDxncm91cCBpZD0iZ3JvdXAxIiBwcmVmZXI9InN5c3RlbSI+Ci0gICAgPHB1YmxpYyBwdWJsaWNJZD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWVfMDAyIiB1cmk9Ii4vUHVibGljYXRpb25DYXRhbG9nL0NhdGFsb2d1ZS54c2QiIC8+IAotICA8L2dyb3VwPgotICA8L2NhdGFsb2c+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzJiYWsueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY2F0YWxvZzJiYWsueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMGE1YjIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2NhdGFsb2cyYmFrLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUiIHVyaT0iLi9QdWJsaWNhdGlvbkNhdGFsb2cvQ2F0YWxvZ3VlLnhzZCIvPgotICA8c3lzdGVtIHN5c3RlbUlkPSJDYXRhbG9ndWUueHNkIiB1cmk9Ii4vUHVibGljYXRpb25DYXRhbG9nL0NhdGFsb2d1ZS54c2QiLz4KLSAgIDxncm91cCBpZD0iZ3JvdXAxIiBwcmVmZXI9InN5c3RlbSI+Ci0gCQk8dXJpIG5hbWU9Imh0dHA6Ly9DYXRhbG9ndWUueHNkIiB1cmk9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiLz4KLSAgIDwvZ3JvdXA+Ci08L2NhdGFsb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jb21wYXRhYmlsaXR5VGVzdC54bWxjYXRhbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvY29tcGF0YWJpbGl0eVRlc3QueG1sY2F0YWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTg4NDU1MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9jb21wYXRhYmlsaXR5VGVzdC54bWxjYXRhbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4NCi08WE1MQ2F0YWxvZ1NldHRpbmdzPg0KLSAgPFVzZXJFbnRyaWVzPg0KLSAgICA8VXNlckVudHJ5IFRZUEU9IlBVQkxJQyIgSUQ9Ikludm9pY2VJZCIgDQotVVJJPSJwbGF0Zm9ybTovcmVzb3VyY2UvWE1MRXhhbXBsZXMvSW52b2ljZTIvSW52b2ljZS5kdGQiLz4NCi0gIDwvVXNlckVudHJpZXM+DQotPC9YTUxDYXRhbG9nU2V0dGluZ3M+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZGVsZWdhdGVBbmRSZXdyaXRlL2NhdGFsb2cueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZGVsZWdhdGVBbmRSZXdyaXRlL2NhdGFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Yzc5NGM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2RlbGVnYXRlQW5kUmV3cml0ZS9jYXRhbG9nLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIGNhdGFsb2cgUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIiAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0gIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwiIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94bWxjYXRhbG9nIi8+Ci0gIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIiBjYXRhbG9nPSJmaWxlOi8vL3Vzci9zaGFyZS9zZ21sL2RvY2Jvb2sveG1sY2F0YWxvZyIvPgotICA8ZGVsZWdhdGVQdWJsaWMgcHVibGljSWRTdGFydFN0cmluZz0iSVNPIDg4Nzk6MTk4NiIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbGNhdGFsb2ciLz4KLSAgPGRlbGVnYXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8iIGNhdGFsb2c9ImZpbGU6Ly8vdXNyL3NoYXJlL3NnbWwvZG9jYm9vay94bWxjYXRhbG9nIi8+Ci0gIDxkZWxlZ2F0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rLyIgY2F0YWxvZz0iZmlsZTovLy91c3Ivc2hhcmUvc2dtbC9kb2Nib29rL3htbGNhdGFsb2ciLz4KLSAgPHJld3JpdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3Njcm9sbGtlZXBlci5zb3VyY2Vmb3JnZS5uZXQvZHRkcy9zY3JvbGxrZWVwZXItb21mLTEuMC9zY3JvbGxrZWVwZXItb21mLmR0ZCIgcmV3cml0ZVByZWZpeD0iL3Vzci9zaGFyZS94bWwvc2Nyb2xsa2VlcGVyL2R0ZHMvc2Nyb2xsa2VlcGVyLW9tZi5kdGQiLz4KLSAgPHJld3JpdGVVUkkgdXJpU3RhcnRTdHJpbmc9Imh0dHA6Ly9zY3JvbGxrZWVwZXIuc291cmNlZm9yZ2UubmV0L2R0ZHMvc2Nyb2xsa2VlcGVyLW9tZi0xLjAvc2Nyb2xsa2VlcGVyLW9tZi5kdGQiIHJld3JpdGVQcmVmaXg9Ii91c3Ivc2hhcmUveG1sL3Njcm9sbGtlZXBlci9kdGRzL3Njcm9sbGtlZXBlci1vbWYuZHRkIi8+Ci08L2NhdGFsb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kb2Nib29rL3htbGNhdGFsb2cueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZG9jYm9vay94bWxjYXRhbG9nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI4M2RlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9kb2Nib29rL3htbGNhdGFsb2cueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgY2F0YWxvZyBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIj4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgUHVibGlzaGluZy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1wdWIuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIExldHRlcnMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tZ3JrMS5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIEluZm9ybWF0aW9uIFBvb2wgVjQuMS4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yL2RicG9vbHgubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEJveCBhbmQgTGluZSBEcmF3aW5nLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWJveC5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0RURCBEb2NCb29rIFhNTCBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvZG9jYm9va3guZHRkIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdyZWVrIFN5bWJvbHMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tZ3JrMy5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBOZWdhdGVkIFJlbGF0aW9ucy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1hbXNuLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBOdW1lcmljIGFuZCBTcGVjaWFsIEdyYXBoaWMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tbnVtLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9kYmNlbnR4Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBBbHRlcm5hdGl2ZSBHcmVlayBTeW1ib2xzLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWdyazQuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBOb3RhdGlvbnMgVjQuMS4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMS4yLTEuMC0xNy4yL2Ribm90bngubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIERpYWNyaXRpY2FsIE1hcmtzLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWRpYS5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTW9ub3RvbmlrbyBHcmVlay8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1ncmsyLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgQWRkaXRpb25hbCBHZW5lcmFsIEVudGl0aWVzIFY0LjEuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMi9kYmdlbmVudC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIERvY3VtZW50IEhpZXJhcmNoeSBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvZGJoaWVyeC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBBcnJvdyBSZWxhdGlvbnMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tYW1zYS5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBPcmRpbmFyeS8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1hbXNvLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSJJU08gODg3OToxOTg2Ly9FTlRJVElFUyBSdXNzaWFuIEN5cmlsbGljLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWN5cmwuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEdlbmVyYWwgVGVjaG5pY2FsLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLXRlY2guZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIE1hdGggU3ltYm9sczogRGVsaW1pdGVycy8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZW50L2lzby1hbXNjLmVudCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIFhNTCBFeGNoYW5nZSBUYWJsZSBNb2RlbCAxOTk5MDMxNS8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvc29leHRibHguZHRkIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9EVEQgRG9jQm9vayBYTUwgQ0FMUyBUYWJsZSBNb2RlbCBWNC4xLjIvL0VOIiB1cmk9InhtbC1kdGQtNC4xLjItMS4wLTE3LjIvY2Fsc3RibHguZHRkIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDEvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tbGF0MS5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBCaW5hcnkgT3BlcmF0b3JzLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9lbnQvaXNvLWFtc2IuZW50Ii8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9IklTTyA4ODc5OjE5ODYvL0VOVElUSUVTIEFkZGVkIExhdGluIDIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tbGF0Mi5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgQWRkZWQgTWF0aCBTeW1ib2xzOiBSZWxhdGlvbnMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tYW1zci5lbnQiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iSVNPIDg4Nzk6MTk4Ni8vRU5USVRJRVMgTm9uLVJ1c3NpYW4gQ3lyaWxsaWMvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2VudC9pc28tY3lyMi5lbnQiLz4KLSAgPHJld3JpdGVTeXN0ZW0gc3lzdGVtSWRTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMiIgcmV3cml0ZVByZWZpeD0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMiIvPgotICA8cmV3cml0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjEuMiIgcmV3cml0ZVByZWZpeD0ieG1sLWR0ZC00LjEuMi0xLjAtMTcuMiIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRUxFTUVOVFMgRG9jQm9vayBYTUwgSW5mb3JtYXRpb24gUG9vbCBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9kYnBvb2x4Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2RvY2Jvb2t4LmR0ZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRU5USVRJRVMgRG9jQm9vayBYTUwgQ2hhcmFjdGVyIEVudGl0aWVzIFY0LjIvL0VOIiB1cmk9InhtbC1kdGQtNC4yLTEuMC0xNy4yL2RiY2VudHgubW9kIi8+Ci0gIDxwdWJsaWMgcHVibGljSWQ9Ii0vL09BU0lTLy9FTlRJVElFUyBEb2NCb29rIFhNTCBOb3RhdGlvbnMgVjQuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvZGJub3RueC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VOVElUSUVTIERvY0Jvb2sgWE1MIEFkZGl0aW9uYWwgR2VuZXJhbCBFbnRpdGllcyBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9kYmdlbmVudC5tb2QiLz4KLSAgPHB1YmxpYyBwdWJsaWNJZD0iLS8vT0FTSVMvL0VMRU1FTlRTIERvY0Jvb2sgWE1MIERvY3VtZW50IEhpZXJhcmNoeSBWNC4yLy9FTiIgdXJpPSJ4bWwtZHRkLTQuMi0xLjAtMTcuMi9kYmhpZXJ4Lm1vZCIvPgotICA8cHVibGljIHB1YmxpY0lkPSItLy9PQVNJUy8vRFREIERvY0Jvb2sgWE1MIENBTFMgVGFibGUgTW9kZWwgVjQuMi8vRU4iIHVyaT0ieG1sLWR0ZC00LjItMS4wLTE3LjIvY2Fsc3RibHguZHRkIi8+Ci0gIDxyZXdyaXRlU3lzdGVtIHN5c3RlbUlkU3RhcnRTdHJpbmc9Imh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay94bWwvNC4yIiByZXdyaXRlUHJlZml4PSJ4bWwtZHRkLTQuMi0xLjAtMTcuMiIvPgotICA8cmV3cml0ZVVSSSB1cmlTdGFydFN0cmluZz0iaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9kb2Nib29rL3htbC80LjIiIHJld3JpdGVQcmVmaXg9InhtbC1kdGQtNC4yLTEuMC0xNy4yIi8+Ci08L2NhdGFsb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlLWNhdGFsb2cueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS1jYXRhbG9nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTY3Y2QwNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlLWNhdGFsb2cueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPCFET0NUWVBFIGNhdGFsb2cKLSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCi0gImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciCi0gICAgICAgICBwcmVmZXI9InB1YmxpYyI+Ci0gPHVyaSBuYW1lPSJodHRwOi8vYXBhY2hlLm9yZy94bWwveGNhdGFsb2cvZXhhbXBsZSIgdXJpPSIuL2V4YW1wbGUvZXhhbXBsZS54c2QiLz4gIAotIDxzeXN0ZW0gc3lzdGVtSWQ9Im15ZXhhbXBsZS54c2QiIHVyaT0iLi9leGFtcGxlL2V4YW1wbGUtbm9uYW1lc3BhY2UueHNkIi8+ICAgIAotICAgIAotIDxkZWxlZ2F0ZVB1YmxpYyBwdWJsaWNJZFN0YXJ0U3RyaW5nPSItLy9BLy8iCi0gICAgICAgICAgICAgICAgIGNhdGFsb2c9ImV4YW1wbGUtY2F0YWxvZzIueG1sIi8+Ci0KLSAgICAgICAgICAgICAgICAgICAKLTwvY2F0YWxvZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlLWNhdGFsb2cyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZzIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGJiMWVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUtY2F0YWxvZzIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08IURPQ1RZUEUgY2F0YWxvZwotIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyIKLSAgICAgICAgIHByZWZlcj0icHVibGljIj4KLSA8cHVibGljIHB1YmxpY0lkPSItLy9BLy9YTUwgQ0FUQUxPRyBJREVOVElGSUVSLy9FTiIgCi0gICAgICAgICB1cmk9Ii4vZXhhbXBsZS9leGFtcGxlLmVudCIvPgotPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1kdGQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLWR0ZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YWFhZTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLWR0ZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIHJvb3QgWwotIDwhRU5USVRZIHRleHQgUFVCTElDICItLy9BLy9YTUwgQ0FUQUxPRyBJREVOVElGSUVSLy9FTiIgCi0gICJ1cm46cHVibGljaWQ6LTpBOlhNTCtDQVRBTE9HK0lERU5USUZJRVI6RU4iPgotXT4KLTxyb290PiZ0ZXh0Ozwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1ub25hbWVzcGFjZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtbm9uYW1lc3BhY2UueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjI5OThkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1ub25hbWVzcGFjZS54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHhzOnNjaGVtYSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiPgotIDx4czplbGVtZW50IG5hbWU9InJvb3QiIHR5cGU9InhzOmFueVVSSSIvPgotPC94czpzY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9leGFtcGxlL2V4YW1wbGUtc2NoZW1hLW5vbmFtZXNwYWNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEtbm9uYW1lc3BhY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOTE3NWYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEtbm9uYW1lc3BhY2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxyb290IHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCi0JICAgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249Im15ZXhhbXBsZS54c2QiPgotaHR0cDovL2FwYWNoZS5vcmcveG1sL2FueVVSSTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY5N2NiM2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHJvb3QgIHhtbG5zPSJodHRwOi8vYXBhY2hlLm9yZy94bWwveGNhdGFsb2cvZXhhbXBsZSI+Ci1odHRwOi8vYXBhY2hlLm9yZy94bWwvYW55VVJJPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLmVudCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS5lbnQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkMDg3NTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLmVudAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLUhlbGxvIHdvcmxkIQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL2V4YW1wbGUvZXhhbXBsZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxYTI5ZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvZXhhbXBsZS9leGFtcGxlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08eHM6c2NoZW1hIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIKLSAgICAgICAgICAgeG1sbnM9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIgotICAgICAgICAgICB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9hcGFjaGUub3JnL3htbC94Y2F0YWxvZy9leGFtcGxlIj4KLSA8eHM6ZWxlbWVudCBuYW1lPSJyb290IiB0eXBlPSJ4czphbnlVUkkiLz4KLTwveHM6c2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfbWFwcGVkaW5jbHVkZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfbWFwcGVkaW5jbHVkZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjEyN2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX21hcHBlZGluY2x1ZGVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTwhRE9DVFlQRSBjYXRhbG9nCi0gUFVCTElDICItLy9PQVNJUy8vRFREIEVudGl0eSBSZXNvbHV0aW9uIFhNTCBDYXRhbG9nIFYxLjAvL0VOIgotICJodHRwOi8vd3d3Lm9hc2lzLW9wZW4ub3JnL2NvbW1pdHRlZXMvZW50aXR5L3JlbGVhc2UvMS4wL2NhdGFsb2cuZHRkIj4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIgotCXByZWZlcj0icHVibGljIj4KLQkKLQk8dXJpIG5hbWU9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueHNkIiAvPgotICAgIDwhLS0gd2UgY2FuIG5vdCBtYXAgUHVibGljSWQgb3IgVVJJIG9mIHRoZSBpbmNsdWRlZC9yZWRlZmluZWQgc2NoZW1hcyAtLT4JCi0JPHVyaSBuYW1lPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL0lQTyIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG9fLnhzZCIgLz4KLQk8c3lzdGVtIHN5c3RlbUlkPSJhZGRyZXNzXy54c2QiCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvYWRkcmVzcy54c2QiIC8+Ci0KLTwvY2F0YWxvZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19wdWJsaWMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvcmVwb3J0LWNhdGFsb2dfcHVibGljLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzM0ZWNiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19wdWJsaWMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPCFET0NUWVBFIGNhdGFsb2cKLSBQVUJMSUMgIi0vL09BU0lTLy9EVEQgRW50aXR5IFJlc29sdXRpb24gWE1MIENhdGFsb2cgVjEuMC8vRU4iCi0gImh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvY29tbWl0dGVlcy9lbnRpdHkvcmVsZWFzZS8xLjAvY2F0YWxvZy5kdGQiPgotPGNhdGFsb2cgeG1sbnM9InVybjpvYXNpczpuYW1lczp0YzplbnRpdHk6eG1sbnM6eG1sOmNhdGFsb2ciCi0JcHJlZmVyPSJwdWJsaWMiPgotCQotCTx1cmkgbmFtZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9SZXBvcnQiCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54c2QiIC8+Ci0gICAgPCEtLSB3ZSBjYW4gbm90IG1hcCBQdWJsaWNJZCBvciBVUkkgb2YgdGhlIGluY2x1ZGVkL3JlZGVmaW5lZCBzY2hlbWFzIC0tPgkKLQk8dXJpIG5hbWU9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vSVBPIgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL2lwby54c2QiIC8+Ci0JCi0KLQotPC9jYXRhbG9nPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3N5c3RlbS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9yZXBvcnQtY2F0YWxvZ19zeXN0ZW0ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjZhMWI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3JlcG9ydC1jYXRhbG9nX3N5c3RlbS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMyArMCwwIEBACi08IURPQ1RZUEUgY2F0YWxvZwotIFBVQkxJQyAiLS8vT0FTSVMvL0RURCBFbnRpdHkgUmVzb2x1dGlvbiBYTUwgQ2F0YWxvZyBWMS4wLy9FTiIKLSAiaHR0cDovL3d3dy5vYXNpcy1vcGVuLm9yZy9jb21taXR0ZWVzL2VudGl0eS9yZWxlYXNlLzEuMC9jYXRhbG9nLmR0ZCI+Ci08Y2F0YWxvZyB4bWxucz0idXJuOm9hc2lzOm5hbWVzOnRjOmVudGl0eTp4bWxuczp4bWw6Y2F0YWxvZyI+Ci0KLQk8dXJpIG5hbWU9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vUmVwb3J0IgotCQl1cmk9Ii4vUHVyY2hhc2VPcmRlci9pbnRlcm5hdGlvbmFsL3JlcG9ydF8ueHNkIiAvPgotCTxzeXN0ZW0gc3lzdGVtSWQ9Imlwb19fLnhzZCIKLQkJdXJpPSIuL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9pcG9fLnhzZCIgLz4KLQk8c3lzdGVtIHN5c3RlbUlkPSJhZGRyZXNzXy54c2QiCi0JCXVyaT0iLi9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvYWRkcmVzcy54c2QiIC8+Ci0KLTwvY2F0YWxvZz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9zY2hlbWFzLmphciBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3NjaGVtYXMuamFyCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZDFlNGRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3NjaGVtYXMuamFyCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL2NhdGFsb2cueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL2NhdGFsb2cueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGIwNGExLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci9jYXRhbG9nLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjYXRhbG9nIHhtbG5zPSJ1cm46b2FzaXM6bmFtZXM6dGM6ZW50aXR5OnhtbG5zOnhtbDpjYXRhbG9nIiB4bWw6YmFzZT0iLiI+Ci0gICAJCTxwdWJsaWMgcHVibGljSWQ9Im15cXVvdGUiIHVyaT0icXVvdGUyLnhtbCIvPiAgCi08L2NhdGFsb2c+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIvcXVvdGUxLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci9xdW90ZTEueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZmNiYTUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci9xdW90ZTEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLQotICA8IS0tIEkgYmVsb25nIHRvOgotICAgICAgIG9yZy5hcGFjaGUudG9vbHMuYW50LnR5cGVzLlhNTENhdGFsb2dCdWlsZEZpbGVUZXN0LmphdmEgCi0gICAgICAgLS0+Ci0KLTxwYXJhPgotICBBIHN0aXRjaCBpbiB0aW1lIHNhdmVzIG5pbmUKLTwvcGFyYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci9xdW90ZTIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3F1b3RlMi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwY2QxNGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3F1b3RlMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotCi08cGFyYT4KLSAgTm8gbmV3cyBpcyBnb29kIG5ld3MKLTwvcGFyYT4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cueHNsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cueHNsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjkyYjBlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nLnhzbAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Ci08eHNsOnN0eWxlc2hlZXQgCi0gIHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICB2ZXJzaW9uPSIxLjAiPgotCi0gIDx4c2w6b3V0cHV0IG1ldGhvZD0idGV4dCIvPgotCi0gIDwhLS0gbmFtZSBvZiB0aGUgb3V0cHV0IHBhcmFtZXRlciB0byB3cml0ZSAtLT4KLSAgPHhzbDpwYXJhbSBuYW1lPSJvdXRwcm9wIj52YWx1ZTwveHNsOnBhcmFtPgotCi0gIDx4c2w6c3RyaXAtc3BhY2UgZWxlbWVudHM9IioiLz4KLQotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSIvIj4KLSAgICA8eHNsOnZhbHVlLW9mIHNlbGVjdD0iJG91dHByb3AiLz46IDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iL2ZyYWdtZW50L3BhcmEiLz4KLSAgPC94c2w6dGVtcGxhdGU+Ci0KLSAgPCEtLSBUaGlzIHdpbGwgb25seSBiZSBtYXRjaGVkIGluIGRvYzIueG1sIC0tPgotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJSZWYiPgotICAgIDx4c2w6YXBwbHktdGVtcGxhdGVzIHNlbGVjdD0iZG9jdW1lbnQoQGZpbGUpL2ZyYWdtZW50L3BhcmEiLz4KLSAgPC94c2w6dGVtcGxhdGU+Ci0KLSAgPCEtLSBUaGlzIHdpbGwgb25seSBiZSBtYXRjaGVkIGluIGRvYzEueG1sIC0tPgotICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJ0ZXh0KCkiPgotICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSJub3JtYWxpemUtc3BhY2UoLikiLz4KLSAgPC94c2w6dGVtcGxhdGU+Ci0KLTwveHNsOnN0eWxlc2hlZXQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzEueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cxLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTFjNzMwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzEueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08IURPQ1RZUEUgZnJhZ21lbnQgWwotICA8IUVOVElUWSBxdW90ZSBQVUJMSUMgIm15cXVvdGUiICJxdW90ZTEueG1sIj4KLV0+Ci0KLTxmcmFnbWVudD4KLSAgPHBhcmE+Ci0gICAgICAmcXVvdGU7Ci0gIDwvcGFyYT4KLTwvZnJhZ21lbnQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGQ0MWQwYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLQotPGZyYWdtZW50PgotICA8cGFyYT4KLSAgICA8UmVmIGZpbGU9InhtbGNhdGFsb2cxLnhtbCIvPgotICA8L3BhcmE+Ci08L2ZyYWdtZW50PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbC1vdXQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLW91dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTlkN2ZjNS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIveG1sY2F0YWxvZzIueG1sLW91dAorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLXRlc3R2YWx1ZTogQSBzdGl0Y2ggaW4gdGltZSBzYXZlcyBuaW5lClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbC1vdXQtZGlmZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwtb3V0LWRpZmYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4N2E1ZGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbC1vdXQtZGlmZgorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotPDw8PCB0ZXN0dmFsdWU6IEEgc3RpdGNoIGluIHRpbWUgc2F2ZXMgbmluZQ0KLTw8PDwgdGVzdHZhbHVlOiBObyBuZXdzIGlzIGdvb2QgbmV3cw0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9kYXRhL3Rlc3RYU0xUd2l0aENhdGFsb2dSZXNvbHZlci94bWxjYXRhbG9nMi54bWwtcmVzdWx0IGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbC1yZXN1bHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkZTI4YTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEvdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyL3htbGNhdGFsb2cyLnhtbC1yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi10ZXN0dmFsdWU6IE5vIG5ld3MgaXMgZ29vZCBuZXdzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL2RhdGEveHNkL1hTTFNjaGVtYS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS94c2QvWFNMU2NoZW1hLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5NjQ1YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS94c2QvWFNMU2NoZW1hLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDM5MCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHhzZDpzY2hlbWEgeG1sbnM6eHNkPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgotCTwhLS0geHNkOmltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZSIgc2NoZW1hTG9jYXRpb249InhtbC54c2QiIC8tLT4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJzdHlsZXNoZWV0IiB0eXBlPSJ3cmFwcGVyIiAvPgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJ0cmFuc2Zvcm0iIHR5cGU9IndyYXBwZXIiIC8+Ci0KLQk8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IndyYXBwZXIiPgotCQk8eHNkOmdyb3VwIHJlZj0idG9wTGV2ZWxFbGVtZW50cyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZXh0ZW5zaW9uLWVsZW1lbnQtcHJlZml4ZXMiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImV4Y2x1ZGUtcmVzdWx0LXByZWZpeGVzIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpZCIgdHlwZT0ieHNkOklEIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ2ZXJzaW9uIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImltcG9ydCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJocmVmIiB0eXBlPSJ4c2Q6YW55VVJJIiB1c2U9InJlcXVpcmVkIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCTx4c2Q6ZWxlbWVudCBuYW1lPSJpbmNsdWRlIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImhyZWYiIHR5cGU9InhzZDphbnlVUkkiIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0ic3RyaXAtc3BhY2UiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZWxlbWVudHMiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JPHhzZDplbGVtZW50IG5hbWU9InByZXNlcnZlLXNwYWNlIj4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImVsZW1lbnRzIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJvdXRwdXQiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibWV0aG9kIiB1c2U9Im9wdGlvbmFsIj4KLQkJCQk8eHNkOnNpbXBsZVR5cGU+Ci0JCQkJCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ4bWwiIC8+Ci0JCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJodG1sIiAvPgotCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0idGV4dCIgLz4KLQkJCQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JCQkJPC94c2Q6c2ltcGxlVHlwZT4KLQkJCTwveHNkOmF0dHJpYnV0ZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InZlcnNpb24iIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZW5jb2RpbmciIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ib21pdC14bWwtZGVjbGFyYXRpb24iIHVzZT0ib3B0aW9uYWwiIHR5cGU9Illlc05vVHlwZSIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InN0YW5kYWxvbmUiIHVzZT0ib3B0aW9uYWwiIHR5cGU9Illlc05vVHlwZSIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImRvY3R5cGUtcHVibGljIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iZG9jdHlwZS1zeXN0ZW0iIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJjZGF0YS1zZWN0aW9uLWVsZW1lbnRzIiB0eXBlPSJ4c2Q6Tk1UT0tFTlMiIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJpbmRlbnQiIHVzZT0ib3B0aW9uYWwiIHR5cGU9Illlc05vVHlwZSIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im1lZGlhLXR5cGUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImtleSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im1hdGNoIiB0eXBlPSJwYXR0ZXJuIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idXNlIiB0eXBlPSJleHByZXNzaW9uIiB1c2U9InJlcXVpcmVkIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJkZWNpbWFsLWZvcm1hdCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9Ii4iIG5hbWU9ImRlY2ltYWwtc2VwYXJhdG9yIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iLCIgbmFtZT0iZ3JvdXBpbmctc2VwYXJhdG9yIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iSW5maW5pdHkiIG5hbWU9ImluZmluaXR5IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iLSIgbmFtZT0ibWludXMtc2lnbiIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9Ik5hTiIgbmFtZT0iTmFOIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iJSIgbmFtZT0icGVyY2VudCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9IuKAsCIgbmFtZT0icGVyLW1pbGxlIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iMCIgbmFtZT0iemVyby1kaWdpdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9IiMiIG5hbWU9ImRpZ2l0IiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0iOyIgbmFtZT0icGF0dGVybi1zZXBhcmF0b3IiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9Im5hbWVzcGFjZS1hbGlhcyI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJzdHlsZXNoZWV0LXByZWZpeCIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InJlc3VsdC1wcmVmaXgiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9InRlbXBsYXRlIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9InBhcmFtIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQkJCTx4c2Q6Y2hvaWNlIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPgotCQkJCQk8eHNkOmdyb3VwIHJlZj0iY2hhci1pbnN0cnVjdGlvbnMiPjwveHNkOmdyb3VwPgotCQkJCQk8eHNkOmFueSBuYW1lc3BhY2U9IiMjb3RoZXIiIHByb2Nlc3NDb250ZW50cz0ic2tpcCIgLz4KLQkJCQk8L3hzZDpjaG9pY2U+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im1hdGNoIiB0eXBlPSJwYXR0ZXJuIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJwcmlvcml0eSIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJtb2RlIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0idmFsdWUtb2YiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9InNlbGVjdC1yZXF1aXJlZCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJkaXNhYmxlLW91dHB1dC1lc2NhcGluZyIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iY29weS1vZiI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VsZWN0LXJlcXVpcmVkIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJudW1iZXIiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0ic2luZ2xlIiBuYW1lPSJsZXZlbCI+Ci0JCQkJPHhzZDpzaW1wbGVUeXBlPgotCQkJCQk8eHNkOnJlc3RyaWN0aW9uIGJhc2U9InhzZDpzdHJpbmciPgotCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ic2luZ2xlIiAvPgotCQkJCQkJPHhzZDplbnVtZXJhdGlvbiB2YWx1ZT0ibXVsdGlwbGUiIC8+Ci0JCQkJCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJhbnkiIC8+Ci0JCQkJCTwveHNkOnJlc3RyaWN0aW9uPgotCQkJCTwveHNkOnNpbXBsZVR5cGU+Ci0JCQk8L3hzZDphdHRyaWJ1dGU+Ci0JICAgICAgICA8eHNkOmF0dHJpYnV0ZSBuYW1lPSJjb3VudCIgdHlwZT0icGF0dGVybiIgdXNlPSJvcHRpb25hbCIvPgotCQkgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0iZnJvbSIgdHlwZT0icGF0dGVybiIgdXNlPSJvcHRpb25hbCIvPgotCQkgICAgPHhzZDphdHRyaWJ1dGUgbmFtZT0idmFsdWUiIHR5cGU9ImV4cHJlc3Npb24iIHVzZT0ib3B0aW9uYWwiLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9IjEiIG5hbWU9ImZvcm1hdCIgdHlwZT0ieHNkOnN0cmluZyIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxhbmciIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJsZXR0ZXItdmFsdWUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJncm91cGluZy1zZXBhcmF0b3IiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJncm91cGluZy1zaXplIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJhcHBseS10ZW1wbGF0ZXMiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJPHhzZDplbGVtZW50IHJlZj0ic29ydCIgLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ3aXRoLXBhcmFtIiAvPgotCQkJPC94c2Q6Y2hvaWNlPgotCQkJPHhzZDphdHRyaWJ1dGUgZGVmYXVsdD0ibm9kZSgpIiBuYW1lPSJzZWxlY3QiIHR5cGU9ImV4cHJlc3Npb24iIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJtb2RlIiB0eXBlPSJ4c2Q6Tk1UT0tFTiIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iYXBwbHktaW1wb3J0cyI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgLz4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImZvci1lYWNoIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9InNvcnQiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCQkJPHhzZDpjaG9pY2UgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCI+Ci0JCQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyI+PC94c2Q6Z3JvdXA+Ci0JCQkJCTx4c2Q6YW55IG5hbWVzcGFjZT0iIyNvdGhlciIgcHJvY2Vzc0NvbnRlbnRzPSJza2lwIiAvPgotCQkJCTwveHNkOmNob2ljZT4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9InNlbGVjdC1yZXF1aXJlZCIgLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJzb3J0Ij4KLQkJPHhzZDpjb21wbGV4VHlwZT4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9Ii4iIG5hbWU9InNlbGVjdCIgdHlwZT0iZXhwcmVzc2lvbiIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9ImxhbmciIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSJ0ZXh0IiBuYW1lPSJkYXRhLXR5cGUiIHR5cGU9InhzZDpzdHJpbmciIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBkZWZhdWx0PSJhc2NlbmRpbmciIG5hbWU9Im9yZGVyIiB0eXBlPSJ4c2Q6c3RyaW5nIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0iY2FzZS1vcmRlciIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iaWYiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJpbnN0cnVjdGlvbnMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPjwveHNkOmdyb3VwPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0idGVzdCIgdHlwZT0iZXhwcmVzc2lvbiIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJjaG9vc2UiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJ3aGVuIiBtaW5PY2N1cnM9IjEiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9Im90aGVyd2lzZSIgbWluT2NjdXJzPSIwIiAvPgotCQkJPC94c2Q6c2VxdWVuY2U+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0id2hlbiI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpncm91cCByZWY9Imluc3RydWN0aW9ucyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9InRlc3QiIHR5cGU9ImV4cHJlc3Npb24iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0ib3RoZXJ3aXNlIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iaW5zdHJ1Y3Rpb25zIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIiAvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCi0JPHhzZDplbGVtZW50IG5hbWU9ImF0dHJpYnV0ZS1zZXQiPgotCQk8eHNkOmNvbXBsZXhUeXBlPgotCQkJPHhzZDpzZXF1ZW5jZT4KLQkJCQk8eHNkOmVsZW1lbnQgIHJlZj0iYXR0cmlidXRlIiAgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJ1c2UtYXR0cmlidXRlLXNldHMiIHR5cGU9InhzZDpOTVRPS0VOUyIgdXNlPSJvcHRpb25hbCIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iY2FsbC10ZW1wbGF0ZSI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IndpdGgtcGFyYW0iIG1pbk9jY3Vycz0iMCIgIG1heE9jY3Vycz0idW5ib3VuZGVkIiAgLz4KLQkJCTwveHNkOnNlcXVlbmNlPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOk5NVE9LRU4iIHVzZT0icmVxdWlyZWQiIC8+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9IndpdGgtcGFyYW0iIHR5cGU9Ik5hbWVkQW5kU2VsZWN0YWJsZSIgLz4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0idmFyaWFibGUiIHR5cGU9Ik5hbWVkQW5kU2VsZWN0YWJsZSIgLz4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0icGFyYW0iIHR5cGU9Ik5hbWVkQW5kU2VsZWN0YWJsZSIgLz4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0idGV4dCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNpbXBsZUNvbnRlbnQ+Ci0JCQkJPHhzZDpleHRlbnNpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQkJCTx4c2Q6YXR0cmlidXRlR3JvdXAgcmVmPSJkaXNhYmxlLW91dHB1dC1lc2NhcGluZyIgLz4KLQkJCQk8L3hzZDpleHRlbnNpb24+Ci0JCQk8L3hzZDpzaW1wbGVDb250ZW50PgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJwcm9jZXNzaW5nLWluc3RydWN0aW9uIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iY2hhci1pbnN0cnVjdGlvbnMiPjwveHNkOmdyb3VwPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZSIgdHlwZT0ieHNkOnN0cmluZyIgdXNlPSJyZXF1aXJlZCIgLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iZWxlbWVudCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpncm91cCByZWY9Imluc3RydWN0aW9ucyI+PC94c2Q6Z3JvdXA+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9InJlcXVpcmVkIiAvPgotCQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ibmFtZXNwYWNlIiB0eXBlPSJ4c2Q6c3RyaW5nIiB1c2U9Im9wdGlvbmFsIiAvPgotCQkJPHhzZDphdHRyaWJ1dGVHcm91cCByZWY9InVzZS1hdHRyaWJ1dGUtc2V0cyIgLz4KLQkJCTwhLS0gIHhzZDphdHRyaWJ1dGUgcmVmPSJ4bWw6c3BhY2UiIC8tLT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQkKLQk8eHNkOmVsZW1lbnQgbmFtZT0iYXR0cmlidXRlIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iY2hhci1pbnN0cnVjdGlvbnMiLz4KLQkJCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0icmVxdWlyZWQiIC8+Ci0JCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJuYW1lc3BhY2UiIHR5cGU9InhzZDpzdHJpbmciIHVzZT0ib3B0aW9uYWwiIC8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0JCi0JPHhzZDplbGVtZW50IG5hbWU9ImNvbW1lbnQiPgotCQk8eHNkOmNvbXBsZXhUeXBlIG1peGVkPSJ0cnVlIj4KLQkJCTx4c2Q6Z3JvdXAgcmVmPSJjaGFyLWluc3RydWN0aW9ucyIvPgotCQkJPCEtLSAgeHNkOmF0dHJpYnV0ZSByZWY9InhtbDpzcGFjZSIgLy0tPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJjb3B5Ij4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iaW5zdHJ1Y3Rpb25zIi8+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0idXNlLWF0dHJpYnV0ZS1zZXRzIiAvPgotCQk8L3hzZDpjb21wbGV4VHlwZT4KLQk8L3hzZDplbGVtZW50PgotCQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJtZXNzYWdlIj4KLQkJPHhzZDpjb21wbGV4VHlwZSBtaXhlZD0idHJ1ZSI+Ci0JCQk8eHNkOmdyb3VwIHJlZj0iY2hhci1pbnN0cnVjdGlvbnMiLz4KLQkJCTx4c2Q6YXR0cmlidXRlIGRlZmF1bHQ9Im5vIiBuYW1lPSJ0ZXJtaW5hdGUiIHR5cGU9Illlc05vVHlwZSIgLz4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJmYWxsYmFjayI+Ci0JCTx4c2Q6Y29tcGxleFR5cGUgbWl4ZWQ9InRydWUiPgotCQkJPHhzZDpjaG9pY2UgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIG1pbk9jY3Vycz0iMCI+Ci0JCQkJPHhzZDpncm91cCByZWY9Imluc3RydWN0aW9ucyI+PC94c2Q6Z3JvdXA+Ci0JCQk8L3hzZDpjaG9pY2U+Ci0JCQk8IS0tICB4c2Q6YXR0cmlidXRlIHJlZj0ieG1sOnNwYWNlIiAvLS0+Ci0JCTwveHNkOmNvbXBsZXhUeXBlPgotCTwveHNkOmVsZW1lbnQ+Ci0KLQk8eHNkOmdyb3VwIG5hbWU9Imluc3RydWN0aW9ucyI+Ci0JCTx4c2Q6Y2hvaWNlPgotCQkJPHhzZDpncm91cCByZWY9ImNoYXItaW5zdHJ1Y3Rpb25zIj48L3hzZDpncm91cD4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InByb2Nlc3NpbmctaW5zdHJ1Y3Rpb24iIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJjb21tZW50IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iZWxlbWVudCIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImF0dHJpYnV0ZSIgLz4KLQkJPC94c2Q6Y2hvaWNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJjaGFyLWluc3RydWN0aW9ucyI+Ci0JCTx4c2Q6Y2hvaWNlPgotCQkJPHhzZDplbGVtZW50IHJlZj0iYXBwbHktdGVtcGxhdGVzIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iY2FsbC10ZW1wbGF0ZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImFwcGx5LWltcG9ydHMiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJmb3ItZWFjaCIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InZhbHVlLW9mIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iY29weS1vZiIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9Im51bWJlciIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImNob29zZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImlmIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0idGV4dCIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImNvcHkiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ2YXJpYWJsZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9Im1lc3NhZ2UiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJmYWxsYmFjayIgLz4KLQkJPC94c2Q6Y2hvaWNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDpncm91cCBuYW1lPSJ0b3BMZXZlbEVsZW1lbnRzIj4KLQkJPHhzZDpjaG9pY2U+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJpbXBvcnQiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJpbmNsdWRlIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0ic3RyaXAtc3BhY2UiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJwcmVzZXJ2ZS1zcGFjZSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImtleSIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9ImRlY2ltYWwtZm9ybWF0IiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0iYXR0cmlidXRlLXNldCIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9Im5hbWVzcGFjZS1hbGlhcyIgLz4KLQkJCTx4c2Q6ZWxlbWVudCByZWY9InBhcmFtIiAvPgotCQkJPHhzZDplbGVtZW50IHJlZj0idmFyaWFibGUiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJvdXRwdXQiIC8+Ci0JCQk8eHNkOmVsZW1lbnQgcmVmPSJ0ZW1wbGF0ZSIgLz4KLQkJPC94c2Q6Y2hvaWNlPgotCTwveHNkOmdyb3VwPgotCi0JPHhzZDpzaW1wbGVUeXBlIG5hbWU9Illlc05vVHlwZSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJ5ZXMiIC8+Ci0JCQk8eHNkOmVudW1lcmF0aW9uIHZhbHVlPSJubyIgLz4KLQkJPC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6Y29tcGxleFR5cGUgbmFtZT0iTmFtZWRBbmRTZWxlY3RhYmxlIiBtaXhlZD0idHJ1ZSI+Ci0JCTx4c2Q6Z3JvdXAgcmVmPSJpbnN0cnVjdGlvbnMiIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiIC8+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9Im5hbWUiIHR5cGU9InhzZDpOTVRPS0VOIiB1c2U9InJlcXVpcmVkIiAvPgotCQk8eHNkOmF0dHJpYnV0ZUdyb3VwIHJlZj0ic2VsZWN0LW9wdGlvbmFsIiAvPgotCTwveHNkOmNvbXBsZXhUeXBlPgotCi0KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0iZXhwcmVzc2lvbiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQk8eHNkOnNpbXBsZVR5cGUgbmFtZT0icGF0dGVybiI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+PC94c2Q6cmVzdHJpY3Rpb24+Ci0JPC94c2Q6c2ltcGxlVHlwZT4KLQotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VsZWN0LW9wdGlvbmFsIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJleHByZXNzaW9uIiAvPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0ic2VsZWN0LXJlcXVpcmVkIj4KLQkJPHhzZDphdHRyaWJ1dGUgbmFtZT0ic2VsZWN0IiB0eXBlPSJleHByZXNzaW9uIiB1c2U9InJlcXVpcmVkIiAvPgotCTwveHNkOmF0dHJpYnV0ZUdyb3VwPgotCTx4c2Q6YXR0cmlidXRlR3JvdXAgbmFtZT0iZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmciPgotCQk8eHNkOmF0dHJpYnV0ZSBuYW1lPSJkaXNhYmxlLW91dHB1dC1lc2NhcGluZyIgdHlwZT0iWWVzTm9UeXBlIiBkZWZhdWx0PSJubyIgLz4KLQk8L3hzZDphdHRyaWJ1dGVHcm91cD4KLQk8eHNkOmF0dHJpYnV0ZUdyb3VwIG5hbWU9InVzZS1hdHRyaWJ1dGUtc2V0cyI+Ci0JCTx4c2Q6YXR0cmlidXRlIG5hbWU9InVzZS1hdHRyaWJ1dGUtc2V0cyIgdHlwZT0ieHNkOk5NVE9LRU5TIiB1c2U9Im9wdGlvbmFsIi8+Ci0JPC94c2Q6YXR0cmlidXRlR3JvdXA+Ci0KLTwveHNkOnNjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3BsdWdpbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhOGZmZTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3BsdWdpbi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPD9lY2xpcHNlIHZlcnNpb249IjMuMCI/PgotPHBsdWdpbj4KLQotICAgIAk8ZXh0ZW5zaW9uIHBvaW50PSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuY2F0YWxvZ0NvbnRyaWJ1dGlvbnMiPgotCSAgPGNhdGFsb2dDb250cmlidXRpb24+IAotICAgICAgICAgICA8c3lzdGVtIGlkPSJ0ZXN0U3lzdGVtSWQiCi0gICAgICAgICAgICAgICBzeXN0ZW1JZD0iaHR0cDovL3BlcnNvbmFsL3BlcnNvbmFsLmR0ZCIKLSAgICAgICAgICAgICAgIHVyaT0iZGF0YS9QZXJzb25hbC9wZXJzb25hbC5kdGQiPiAKLSAgICAgICAgICAgICAgIDwvc3lzdGVtPgotICAgICAgICAgICA8cHVibGljIGlkPSJ0ZXN0UHVibGljSWQxIgotICAgICAgICAgICAgICAgcHVibGljSWQ9Ikludm9pY2VJZF90ZXN0IgotICAgICAgICAgICAgICAgdXJpPSJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiCi0gICAgICAgICAgICAgICB3ZWJVUkw9Imh0dHA6Ly9vcmcuZWNsaXBzZS53c3QueG1sLmV4YW1wbGUvSW52b2ljZS5kdGQiPgotICAgICAgICAgIDwvcHVibGljPgotICAgICAgICAgIDx1cmkgaWQ9InRlc3RVcmlJZDEiCi0gICAgICAgICAgICAgICBuYW1lPSJodHRwOi8vYXBhY2hlLm9yZy94bWwveGNhdGFsb2cvZXhhbXBsZSIgCi0gICAgICAgICAgICAgICB1cmk9ImRhdGEvZXhhbXBsZS9leGFtcGxlLnhzZCIvPiAKLSAgICAgICAgICA8dXJpIGlkPSJ0ZXN0VVJJSWQyIgotICAgICAgICAgICAgICAgbmFtZT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0gICAgICAgICAgICAgICB1cmk9InBsYXRmb3JtOi9wbHVnaW4vb3JnLmVjbGlwc2UueHNkL2NhY2hlL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEueHNkIj4KLSAgICAgICAgICA8L3VyaT4gCi0gICAgICAgICAgIDx1cmkgaWQ9InRlc3RVUklJZDMiCi0gICAgICAgICAgICAgICBuYW1lPSJodHRwOi8vb2FzaXMubmFtZXMudGMuZW50aXR5LnhtbG5zLnhtbC5jYXRhbG9nIgotICAgICAgICAgICAgICAgdXJpPSJqYXI6cGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9zY2hlbWFzLmphciEvZGF0YS9jYXRhbG9nLnhzZCI+Ci0gICAgICAgICAgPC91cmk+IAotICAgICAgICAgIDxuZXh0Q2F0YWxvZyBpZD0idGVzdE5lc3RlZENhdGFsb2ciCi0gICAgICAgICAgICAgICBjYXRhbG9nPSJkYXRhL2NhdGFsb2cxLnhtbCIvPiAKLSAgICAgICA8L2NhdGFsb2dDb250cmlidXRpb24+IAotCTwvZXh0ZW5zaW9uPiAKLSAgIAotIAotPC9wbHVnaW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9BYnN0cmFjdENhdGFsb2dUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9BYnN0cmFjdENhdGFsb2dUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwNDU4MjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQWJzdHJhY3RDYXRhbG9nVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cuQ2F0YWxvZ0NvbnRyaWJ1dG9yUmVnaXN0cnlSZWFkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cuQ2F0YWxvZ1NldDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZ0VudHJ5OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklOZXh0Q2F0YWxvZzsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotCi1wdWJsaWMgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RDYXRhbG9nVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gICAgcHJpdmF0ZSBDYXRhbG9nU2V0IGNhdGFsb2dTZXQgPSBuZXcgQ2F0YWxvZ1NldCgpOwotICAgIAotICAgIHByb3RlY3RlZCBJQ2F0YWxvZyBzeXN0ZW1DYXRhbG9nOwotCi0gICAgcHJvdGVjdGVkIElDYXRhbG9nIHVzZXJDYXRhbG9nOwotCi0gICAgcHJvdGVjdGVkIElDYXRhbG9nIGRlZmF1bHRDYXRhbG9nOwotICAgIAotICAgIAotICAgIHB1YmxpYyBBYnN0cmFjdENhdGFsb2dUZXN0KFN0cmluZyBuYW1lKQotICAgIHsKLSAgICAgICAgc3VwZXIobmFtZSk7Ci0gICAgICAgIAotICAgIH0KLQotICAgIHByb3RlY3RlZCBzdGF0aWMgTGlzdCBnZXRDYXRhbG9nRW50cmllcyhJQ2F0YWxvZyBjYXRhbG9nLCBpbnQgZW50cnlUeXBlKQotICAgIHsKLSAgICAgICAgTGlzdCByZXN1bHQgPSBuZXcgQXJyYXlMaXN0KCk7Ci0gICAgICAgIElDYXRhbG9nRW50cnlbXSBlbnRyaWVzID0gY2F0YWxvZy5nZXRDYXRhbG9nRW50cmllcygpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIElDYXRhbG9nRW50cnkgZW50cnkgPSBlbnRyaWVzW2ldOwotICAgICAgICAgICAgaWYgKGVudHJ5LmdldEVudHJ5VHlwZSgpID09IGVudHJ5VHlwZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGVudHJ5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBwcm90ZWN0ZWQgSUNhdGFsb2cgZ2V0Q2F0YWxvZyhTdHJpbmcgaWQsIFN0cmluZyB1cmlTdHJpbmcpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0JCXJldHVybiBjYXRhbG9nU2V0Lmxvb2t1cE9yQ3JlYXRlQ2F0YWxvZyhpZCwgdXJpU3RyaW5nKTsKLSAgICB9Ci0gICAgCi0KLSAgICBwdWJsaWMgdm9pZCBpbml0Q2F0YWxvZ3MoKQotICAgIHsKLSAgICAgICAgZGVmYXVsdENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotICAgICAgICBJTmV4dENhdGFsb2dbXSBuZXh0Q2F0YWxvZ3MgPSBkZWZhdWx0Q2F0YWxvZy5nZXROZXh0Q2F0YWxvZ3MoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXh0Q2F0YWxvZ3MubGVuZ3RoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICAgIElOZXh0Q2F0YWxvZyBjYXRhbG9nID0gbmV4dENhdGFsb2dzW2ldOwotICAgICAgICAgICAgSUNhdGFsb2cgcmVmZXJlbmNlZENhdGFsb2cgPSBjYXRhbG9nLmdldFJlZmVyZW5jZWRDYXRhbG9nKCk7Ci0gICAgICAgICAgICBpZiAocmVmZXJlbmNlZENhdGFsb2cgIT0gbnVsbCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoWE1MQ29yZVBsdWdpbi5TWVNURU1fQ0FUQUxPR19JRAotICAgICAgICAgICAgICAgICAgICAgICAgLmVxdWFscyhyZWZlcmVuY2VkQ2F0YWxvZy5nZXRJZCgpKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHN5c3RlbUNhdGFsb2cgPSByZWZlcmVuY2VkQ2F0YWxvZzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKFhNTENvcmVQbHVnaW4uVVNFUl9DQVRBTE9HX0lECi0gICAgICAgICAgICAgICAgICAgICAgICAuZXF1YWxzKHJlZmVyZW5jZWRDYXRhbG9nLmdldElkKCkpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgdXNlckNhdGFsb2cgPSByZWZlcmVuY2VkQ2F0YWxvZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgICAgIGluaXRDYXRhbG9ncygpOwotICAgIH0KLQkKLQlwcm90ZWN0ZWQgc3RhdGljIFN0cmluZyBtYWtlQWJzb2x1dGUoU3RyaW5nIGJhc2VMb2NhdGlvbiwgU3RyaW5nIGxvY2F0aW9uKQotCSAgewotCQkgIFVSTCBsb2NhbCA9IG51bGw7Ci0JCSAgbG9jYXRpb24gPSBsb2NhdGlvbi5yZXBsYWNlKCdcXCcsICcvJyk7Ci0JCSAgdHJ5Ci0JCSAgewotCQkJICBVUkwgYmFzZVVSTCA9IG5ldyBVUkwoYmFzZUxvY2F0aW9uKTsKLQkJCSAgbG9jYWwgPSBuZXcgVVJMKGJhc2VVUkwsIGxvY2F0aW9uKTsKLQkJICB9IGNhdGNoIChNYWxmb3JtZWRVUkxFeGNlcHRpb24gZSkKLQkJICB7Ci0JCSAgfQotCQkgIAotCQkgIGlmIChsb2NhbCAhPSBudWxsKQotCQkgIHsKLQkJCSAgcmV0dXJuIGxvY2FsLnRvU3RyaW5nKCk7Ci0JCSAgfSBlbHNlCi0JCSAgewotCQkJICByZXR1cm4gbG9jYXRpb247Ci0JCSAgfQotCSAgfQotCQotCXByb3RlY3RlZCBzdGF0aWMgVVJMIHJlc29sdmVQbHVnaW5Mb2NhdGlvbihTdHJpbmcgcGx1Z2luSWQpewotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKHBsdWdpbklkKTsKLQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQl7Ci0JCQlVUkwgYnVuZGxlRW50cnkgPSBidW5kbGUuZ2V0RW50cnkoIi8iKTsKLQkJCXRyeQotCQkJewotCQkJCXJldHVybiBQbGF0Zm9ybS5yZXNvbHZlKGJ1bmRsZUVudHJ5KTsKLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpCi0JCQl7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0JCi0JLy8gc2VlIENhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyLnJlc29sdmVQYXRoKFN0cmluZyBwYXRoKSAKLQkgIHByb3RlY3RlZCBTdHJpbmcgcmVzb2x2ZVBhdGgoU3RyaW5nIHBsdWdpbklkLCBTdHJpbmcgcGF0aCkgCi0JICB7Ci0KLQkJICByZXR1cm4gIENhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyLnJlc29sdmVQYXRoKCAKLQkJCQkgIENhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyLmdldFBsYXRmb3JtVVJMKHBsdWdpbklkKSwgcGF0aCk7Ci0JICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0FsbFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9BbGxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YzRiZDc4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0FsbFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLXB1YmxpYyBjbGFzcyBBbGxUZXN0cyB7Ci0KLQlwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKSB7Ci0JCVRlc3RTdWl0ZSBzdWl0ZSA9IG5ldyBUZXN0U3VpdGUoCi0JCQkJIlRlc3QgZm9yIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cyIpOwotCQkvLyRKVW5pdC1CRUdJTiQKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENhdGFsb2dSZWFkZXJUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENhdGFsb2dSZXNvbHZlclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ2F0YWxvZ1dyaXRlclRlc3QuY2xhc3MpOwotCQlzdWl0ZS5hZGRUZXN0U3VpdGUoQ2F0YWxvZ0NvbnRyaWJ1dG9yUmVnaXN0cnlSZWFkZXJUZXN0LmNsYXNzKTsKLQkJc3VpdGUuYWRkVGVzdFN1aXRlKENhdGFsb2dUZXN0LmNsYXNzKTsKLQkJLy8kSlVuaXQtRU5EJAotCQlyZXR1cm4gc3VpdGU7Ci0JfQotICAgIAotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ0NvbnRyaWJ1dG9yUmVnaXN0cnlSZWFkZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1YzgwZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ0NvbnRyaWJ1dG9yUmVnaXN0cnlSZWFkZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLnByb3Zpc2lvbmFsLklDYXRhbG9nRW50cnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSU5leHRDYXRhbG9nOwotCi0KLQotcHVibGljIGNsYXNzIENhdGFsb2dDb250cmlidXRvclJlZ2lzdHJ5UmVhZGVyVGVzdCBleHRlbmRzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QKLXsKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgIHN1cGVyLnNldFVwKCk7Ci0gICAgfQotCi0gICAgcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uCi0gICAgewotICAgICAgICBzdXBlci50ZWFyRG93bigpOwotICAgIH0KLQotICAgIHB1YmxpYyBDYXRhbG9nQ29udHJpYnV0b3JSZWdpc3RyeVJlYWRlclRlc3QoU3RyaW5nIG5hbWUpCi0gICAgewotICAgICAgICBzdXBlcihuYW1lKTsKLSAgICB9Ci0KLSAgICBwdWJsaWMgZmluYWwgdm9pZCB0ZXN0UmVhZFJlZ2lzdHJ5KCkgdGhyb3dzIEV4Y2VwdGlvbgotICAgIHsKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChkZWZhdWx0Q2F0YWxvZyk7Ci0gICAgICAgIGFzc2VydEVxdWFscyhYTUxDb3JlUGx1Z2luLkRFRkFVTFRfQ0FUQUxPR19JRCwgZGVmYXVsdENhdGFsb2cuZ2V0SWQoKSk7Ci0gICAgICAgIGFzc2VydEVxdWFscygyLCBkZWZhdWx0Q2F0YWxvZy5nZXROZXh0Q2F0YWxvZ3MoKS5sZW5ndGgpOwotCi0JCVN0cmluZyBwbHVnaW5JZCA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpOwotICAgIAotCQkgIC8vIHRlc3Qgc3lzdGVtIGVudHJpZXMKLSAgICAgICAgYXNzZXJ0Tm90TnVsbChzeXN0ZW1DYXRhbG9nKTsKLSAgICAgICAgTGlzdCBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoc3lzdGVtQ2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1NZU1RFTSk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cmllcy5zaXplKCk7IGkrKykKLQkJewotCQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KGkpOwotCQkJaWYoInRlc3RTeXN0ZW1JZCIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCVN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAiZGF0YS9QZXJzb25hbC9wZXJzb25hbC5kdGQiKTsKLQkJCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly9wZXJzb25hbC9wZXJzb25hbC5kdGQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JCX0KLQkJCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLSAgICAgICAgZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKHN5c3RlbUNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOyAgICAgIAotCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXMuc2l6ZSgpOyBpKyspCi0JCXsKLQkJCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldChpKTsKLQkJCWlmKCJ0ZXN0UHVibGljSWQxIi5lcXVhbHMoZW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJU3RyaW5nIHJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgocGx1Z2luSWQsICJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoIkludm9pY2VJZF90ZXN0IiwgZW50cnkuZ2V0S2V5KCkpOwotCQkJCS8vIHRlc3QgdXNlciBkZWZpbmVkIGF0dHJpYnV0ZXMKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QueG1sLmV4YW1wbGUvSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgid2ViVVJMIikpOwotCi0JCQl9Ci0JCQkKLQkJCWVsc2UgaWYoInRlc3RNYXBwaW5nSW5mbyIuZXF1YWxzKGVudHJ5LmdldElkKCkpKQotCQkJewotCQkJCVN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvY2FjaGUvd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiKTsKLQkJCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hMSIsIGVudHJ5LmdldEtleSgpKTsKLQkJCX0KLQkgICAgIAotCQl9Ci0gICAgICAKLSAgICAgICAgLy8gdGVzdCB1cmkgZW50cmllcwotICAgICAgICBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoc3lzdGVtQ2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1VSSSk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZW50cmllcy5zaXplKCk7IGkrKykKLQkJewotCQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KGkpOwotCQkJaWYoInRlc3RVUklJZDEiLmVxdWFscyhlbnRyeS5nZXRJZCgpKSkKLQkJCXsKLQkJCQkgIFN0cmluZyByZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKHBsdWdpbklkLCAiZGF0YS9leGFtcGxlL2V4YW1wbGUueHNkIik7Ci0JCQkgICAgICBhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIGVudHJ5LmdldFVSSSgpKTsKLQkJCSAgICAgIGFzc2VydEVxdWFscygiaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JCQllbHNlIGlmKCJ0ZXN0VVJJSWQyIi5lcXVhbHMoZW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJU3RyaW5nIHJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgocGx1Z2luSWQsICJwbGF0Zm9ybTovcGx1Z2luL29yZy5lY2xpcHNlLnhzZC9jYWNoZS93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCIpOwotCQkJCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgZW50cnkuZ2V0VVJJKCkpOwotCQkJCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JCQllbHNlIGlmKCJ0ZXN0VVJJSWQzIi5lcXVhbHMoZW50cnkuZ2V0SWQoKSkpCi0JCQl7Ci0JCQkJU3RyaW5nIHJlc29sdmVkVVJJID0gcmVzb2x2ZVBhdGgocGx1Z2luSWQsICJqYXI6cGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvZGF0YS9zY2hlbWFzLmphciEvZGF0YS9jYXRhbG9nLnhzZCIpOwotCQkJCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgZW50cnkuZ2V0VVJJKCkpOwotCQkJCWFzc2VydEVxdWFscygiaHR0cDovL29hc2lzLm5hbWVzLnRjLmVudGl0eS54bWxucy54bWwuY2F0YWxvZyIsIGVudHJ5LmdldEtleSgpKTsKLQkJCX0KLQkJfQotICAgICAgCi0gICAgICAgIC8vIHRlc3QgdGVzdGVkIGNhdGFsb2cKLSAgICAgICAgSU5leHRDYXRhbG9nW10gbmV4dENhdGFsb2dFbnRyaWVzID0gc3lzdGVtQ2F0YWxvZy5nZXROZXh0Q2F0YWxvZ3MoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXh0Q2F0YWxvZ0VudHJpZXMubGVuZ3RoOyBpKyspCi0JCXsKLQkJCUlOZXh0Q2F0YWxvZyBuZXh0Q2F0YWxvZ0VudHJ5ID0gKElOZXh0Q2F0YWxvZykgbmV4dENhdGFsb2dFbnRyaWVzW2ldOwotCQkJaWYoInRlc3ROZXN0ZWRDYXRhbG9nIi5lcXVhbHMobmV4dENhdGFsb2dFbnRyeS5nZXRJZCgpKSkKLQkJCXsKLQkJCQlTdHJpbmcgcmVzb2x2ZWRVUkkgPSByZXNvbHZlUGF0aChwbHVnaW5JZCwgImRhdGEvY2F0YWxvZzEueG1sIik7Ci0JCQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCBuZXh0Q2F0YWxvZ0VudHJ5LmdldENhdGFsb2dMb2NhdGlvbigpKTsKLQkJCQlJQ2F0YWxvZyBuZXh0Q2F0YWxvZyA9IG5leHRDYXRhbG9nRW50cnkuZ2V0UmVmZXJlbmNlZENhdGFsb2coKTsKLQkJCQlhc3NlcnROb3ROdWxsKG5leHRDYXRhbG9nKTsKLQkJCQlhc3NlcnRFcXVhbHMoMywgbmV4dENhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCQkJCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csCi0JCQkJCQlJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQkJCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSkgZW50cmllcy5nZXQoMCk7Ci0JCQkJLy9VUkkgdXJpID0gVVJJSGVscGVyLmdldFVSSUZvckZpbGVQYXRoKHJlc29sdmVkVVJJKTsKLQkJCQkvL3Jlc29sdmVkVVJJID0gVVJJSGVscGVyLm1ha2VBYnNvbHV0ZSh1cmkudG9VUkwoKSwgIi4vSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQkJCWFzc2VydEVxdWFscygiLi9JbnZvaWNlL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0VVJJKCkpOwotCQkJCWFzc2VydEVxdWFscygiSW52b2ljZUlkX3Rlc3QiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQkJLy8gdGVzdCBzeXN0ZW0gZW50cmllcwotCQkJCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhuZXh0Q2F0YWxvZywKLQkJCQkJCUlDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQkJCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSkgZW50cmllcy5nZXQoMCk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCIuL0ludm9pY2UvSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlLmR0ZCIsIGVudHJ5LmdldEtleSgpKTsKLQkJCQkvLyB0ZXN0IHVyaSBlbnRyaWVzCi0JCQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKG5leHRDYXRhbG9nLAotCQkJCQkJSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1VSSSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQkJCQlhc3NlcnRFcXVhbHMoIi4vSW52b2ljZS9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cudGVzdC5jb20vSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQl9Ci0JCX0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nUmVhZGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1JlYWRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc5MzU1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nUmVhZGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci0KLQotcHVibGljIGNsYXNzIENhdGFsb2dSZWFkZXJUZXN0IGV4dGVuZHMgQWJzdHJhY3RDYXRhbG9nVGVzdCB7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIENhdGFsb2dSZWFkZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCi0JLyoKLQkgKiBDbGFzcyB1bmRlciB0ZXN0IGZvciB2b2lkIHJlYWQoSUNhdGFsb2csIFN0cmluZykKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UmVhZENhdGFsb2coKXRocm93cyBFeGNlcHRpb24gewotCi0JCS8vcmVhZCBjYXRhbG9nCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9jYXRhbG9nMS54bWwiOwotCQlVUkwgY2F0YWxvZ1VybCA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGNhdGFsb2dGaWxlKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nVXJsKTsKLQkJVVJMIGJhc2UgPSBQbGF0Zm9ybS5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0JCUNhdGFsb2cgY2F0YWxvZyA9IChDYXRhbG9nKWdldENhdGFsb2coImNhdGFsb2cxIiwgYmFzZS50b1N0cmluZygpKTsKLQkJLy9DYXRhbG9nUmVhZGVyLnJlYWQoY2F0YWxvZywgY2F0YWxvZ0ZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nKTsKLQkJCi0JCS8vIHRlc3QgbWFpbiBjYXRhbG9nIC0gY2F0YWxvZzEueG1sCi0JCS8vYXNzZXJ0RXF1YWxzKCJjYXQxIiwgY2F0YWxvZy5nZXRJZCgpKTsKLQkJYXNzZXJ0RXF1YWxzKDMsIGNhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCQkJCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJTGlzdCBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLQkJLy9TdHJpbmcgcmVzb2x2ZWRVUkkgPSBVUklIZWxwZXIubWFrZUFic29sdXRlKGJhc2UsICIuL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJCi0JCWFzc2VydEVxdWFscygiLi9JbnZvaWNlL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoIkludm9pY2VJZF90ZXN0IiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93ZWJVUkwiLCBlbnRyeS5nZXRBdHRyaWJ1dGVWYWx1ZSgid2ViVVJMIikpOwotCi0JCQotCQkvLyAgdGVzdCBzeXN0ZW0gZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1NZU1RFTSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscygiLi9JbnZvaWNlL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0VVJJKCkpOwotCQlhc3NlcnRFcXVhbHMoIkludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoInllcyIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJjaGFjaGVkIikpOwotCQlhc3NlcnRFcXVhbHMoInZhbHVlMSIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJwcm9wZXJ0eSIpKTsKLQotCi0JCS8vICB0ZXN0IHVyaSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLCBJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfVVJJKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCIuL0ludm9pY2UvSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy50ZXN0LmNvbS9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldEtleSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJubyIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJjaGFjaGVkIikpOwotCQlhc3NlcnRFcXVhbHMoInZhbHVlMiIsIGVudHJ5LmdldEF0dHJpYnV0ZVZhbHVlKCJwcm9wZXJ0eSIpKTsKLQkJCi0JCS8vICB0ZXN0IG5leHQgY2F0YWxvZyAtIGNhdGFsb2cyLnhtbAotCQlJTmV4dENhdGFsb2dbXSBuZXh0Q2F0YWxvZ0VudHJpZXMgPSBjYXRhbG9nLmdldE5leHRDYXRhbG9ncygpOwotCQlhc3NlcnRFcXVhbHMoMSwgbmV4dENhdGFsb2dFbnRyaWVzLmxlbmd0aCk7Ci0JCi0JCUlOZXh0Q2F0YWxvZyBuZXh0Q2F0YWxvZ0VudHJ5ID0gKElOZXh0Q2F0YWxvZyluZXh0Q2F0YWxvZ0VudHJpZXNbMF07Ci0JCWFzc2VydE5vdE51bGwobmV4dENhdGFsb2dFbnRyeSk7Ci0JCQotLy8JCVN0cmluZyBjYXRhbG9nUmVmSWQgPSBuZXh0Q2F0YWxvZ0VudHJ5LmdldENhdGFsb2dSZWZJZCgpOwotLy8JCWFzc2VydEVxdWFscygibmV4dENhdGFsb2cxIiwgY2F0YWxvZ1JlZklkKTsKLQkJLy9yZXNvbHZlZFVSSSA9IFVSSUhlbHBlci5tYWtlQWJzb2x1dGUoYmFzZSwgImNhdGFsb2cyLnhtbCIpOwotCQlhc3NlcnRFcXVhbHMoImNhdGFsb2cyLnhtbCIsIG5leHRDYXRhbG9nRW50cnkuZ2V0Q2F0YWxvZ0xvY2F0aW9uKCkpOwotCi0JCUlDYXRhbG9nIG5leHRDYXRhbG9nID0gbmV4dENhdGFsb2dFbnRyeS5nZXRSZWZlcmVuY2VkQ2F0YWxvZygpOwotCi0JCWFzc2VydE5vdE51bGwobmV4dENhdGFsb2cpOwotCQlhc3NlcnRFcXVhbHMoNCwgbmV4dENhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCQkKLQkJLy8gdGVzdCBwdWJsaWMgZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOwotCQlhc3NlcnRFcXVhbHMoMiwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQkvL3Jlc29sdmVkVVJJID0gVVJJSGVscGVyLm1ha2VBYnNvbHV0ZShuZXh0Q2F0YWxvZy5nZXRCYXNlKCksICIuL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIik7Ci0JCWFzc2VydEVxdWFscygiLi9QdWJsaWNhdGlvbkNhdGFsb2cvQ2F0YWxvZ3VlLnhzZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDEiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCQotCQkvLyB0ZXN0IHB1YmxpYyBlbnRyeSBmcm9tIGEgZ3JvdXAKLQkJZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgxKTsKLQkJLy9yZXNvbHZlZFVSSSA9IFVSSUhlbHBlci5tYWtlQWJzb2x1dGUobmV4dENhdGFsb2cuZ2V0QmFzZSgpLCAiLi9QdWJsaWNhdGlvbkNhdGFsb2cvQ2F0YWxvZ3VlLnhzZCIpOwotCQlhc3NlcnRFcXVhbHMoIi4vUHVibGljYXRpb25DYXRhbG9nL0NhdGFsb2d1ZS54c2QiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWVfMDAyIiwgZW50cnkuZ2V0S2V5KCkpOwotCi0JCS8vICB0ZXN0IHN5c3RlbSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhuZXh0Q2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1NZU1RFTSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpZW50cmllcy5nZXQoMCk7Ci0JCWFzc2VydEVxdWFscygiLi9QdWJsaWNhdGlvbkNhdGFsb2cvQ2F0YWxvZ3VlLnhzZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJDYXRhbG9ndWUueHNkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkvLyAgdGVzdCB1cmkgZW50cmllcwotCQllbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMobmV4dENhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9VUkkpOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUueHNkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQkKLQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q29tcGF0YWJpbGl0eVJlYWRlcigpIHRocm93cyBFeGNlcHRpb24gewotCQkvLwlyZWFkIGNhdGFsb2cKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2NvbXBhdGFiaWxpdHlUZXN0LnhtbGNhdGFsb2ciOwotCQlVUkwgY2F0YWxvZ1VybCA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KGNhdGFsb2dGaWxlKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nVXJsKTsKLQkJVVJMIGJhc2UgPSBQbGF0Zm9ybS5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0JCUNhdGFsb2cgY2F0YWxvZyA9IChDYXRhbG9nKWdldENhdGFsb2coImNvbXBhdGFiaWxpdHlDYXRhbG9nIiwgYmFzZS50b1N0cmluZygpKTsKLQkJLy9DYXRhbG9nUmVhZGVyLnJlYWQoY2F0YWxvZywgY2F0YWxvZ0ZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nKTsKLQkJTGlzdCBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywgSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCUlDYXRhbG9nRW50cnkgZW50cnkgPSAoSUNhdGFsb2dFbnRyeSllbnRyaWVzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCJwbGF0Zm9ybTovcmVzb3VyY2UvWE1MRXhhbXBsZXMvSW52b2ljZTIvSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiSW52b2ljZUlkIiwgZW50cnkuZ2V0S2V5KCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dSZXNvbHZlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dSZXNvbHZlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjIyY2JiNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nUmVzb2x2ZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3NCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotCi1wdWJsaWMgY2xhc3MgQ2F0YWxvZ1Jlc29sdmVyVGVzdCBleHRlbmRzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QgewotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyBDYXRhbG9nUmVzb2x2ZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBmaW5hbCB2b2lkIHRlc3RSZXNvbHZlUmVzb2x2ZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkKLQkKLQkJLy8gZnJvbSBwbHVnaW4ueG1sIGZpbGUKLQkJU3RyaW5nIHBsdWdpbkJhc2UgPSByZXNvbHZlUGx1Z2luTG9jYXRpb24oVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpLnRvU3RyaW5nKCk7Ci0KLQkJU3RyaW5nIHJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVB1YmxpYygiSW52b2ljZUlkX3Rlc3QiLCBudWxsKTsKLQkJU3RyaW5nIHJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZEFjdHVhbCk7Ci0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVN5c3RlbSgiaHR0cDovL3BlcnNvbmFsL3BlcnNvbmFsLmR0ZCIpOwotCQlyZXNvbHZlZFVSSSA9IG1ha2VBYnNvbHV0ZShwbHVnaW5CYXNlLCAiZGF0YS9QZXJzb25hbC9wZXJzb25hbC5kdGQiKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZEFjdHVhbCk7Ci0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVVSSSgiaHR0cDovL2FwYWNoZS5vcmcveG1sL3hjYXRhbG9nL2V4YW1wbGUiKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvZXhhbXBsZS9leGFtcGxlLnhzZCIpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlVVJJKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOwotCQlyZXNvbHZlZFVSSSA9IHJlc29sdmVQYXRoKCIiLCAicGxhdGZvcm06L3BsdWdpbi9vcmcuZWNsaXBzZS54c2QvY2FjaGUvd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS54c2QiKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgcmVzb2x2ZWRVUkkpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQkJCi0JCS8vIGZyb20gY2F0YWxvZzEueG1sCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVB1YmxpYygiSW52b2ljZUlkX3Rlc3QiLCBudWxsKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvSW52b2ljZS9JbnZvaWNlLmR0ZCIpOwotCQlhc3NlcnRFcXVhbHMocmVzb2x2ZWRVUkksIHJlc29sdmVkQWN0dWFsKTsKLQotCQlyZXNvbHZlZEFjdHVhbCA9IGRlZmF1bHRDYXRhbG9nLnJlc29sdmVTeXN0ZW0oIkludm9pY2UuZHRkIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZEFjdHVhbCk7Ci0KLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlVVJJKCJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL0ludm9pY2UvSW52b2ljZS5kdGQiKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZEFjdHVhbCk7Ci0KLQkJCi0JCS8vIGZyb20gY2F0YWxvZzIueG1sCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVB1YmxpYygiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWVfMDAxIiwgbnVsbCk7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCQkKLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlUHVibGljKCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZV8wMDIiLCBudWxsKTsKLQkJcmVzb2x2ZWRVUkkgPSBtYWtlQWJzb2x1dGUocGx1Z2luQmFzZSwgImRhdGEvUHVibGljYXRpb25DYXRhbG9nL0NhdGFsb2d1ZS54c2QiKTsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZEFjdHVhbCk7Ci0KLQkJcmVzb2x2ZWRBY3R1YWwgPSBkZWZhdWx0Q2F0YWxvZy5yZXNvbHZlU3lzdGVtKCJDYXRhbG9ndWUueHNkIik7Ci0JCXJlc29sdmVkVVJJID0gbWFrZUFic29sdXRlKHBsdWdpbkJhc2UsICJkYXRhL1B1YmxpY2F0aW9uQ2F0YWxvZy9DYXRhbG9ndWUueHNkIik7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFVSSSwgcmVzb2x2ZWRBY3R1YWwpOwotCi0JCXJlc29sdmVkQWN0dWFsID0gZGVmYXVsdENhdGFsb2cucmVzb2x2ZVVSSSgiaHR0cDovL0NhdGFsb2d1ZS54c2QiKTsKLQkJcmVzb2x2ZWRVUkkgPSAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUueHNkIjsKLQkJYXNzZXJ0RXF1YWxzKHJlc29sdmVkVVJJLCByZXNvbHZlZFVSSSk7Ci0KLQotCX0KLQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1N2VjMzQzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL0NhdGFsb2dUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cuQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZ0VudHJ5OwotCi0KLQotcHVibGljIGNsYXNzIENhdGFsb2dUZXN0IGV4dGVuZHMgQWJzdHJhY3RDYXRhbG9nVGVzdCB7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIENhdGFsb2dUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLSAgICAKLSAgICBwdWJsaWMgdm9pZCB0ZXN0Q2F0YWxvZygpIHRocm93cyBFeGNlcHRpb24KLSAgICB7Ci0gICAgICAgQ2F0YWxvZyB3b3JraW5nVXNlckNhdGFsb2cgPSBuZXcgQ2F0YWxvZyhudWxsLCAid29ya2luZyIsIG51bGwpOwotICAgICAgIGFzc2VydE5vdE51bGwodXNlckNhdGFsb2cpOwotICAgICAgIHdvcmtpbmdVc2VyQ2F0YWxvZy5hZGRFbnRyaWVzRnJvbUNhdGFsb2codXNlckNhdGFsb2cpOwotICAgICAgIAotICAgICAgIElDYXRhbG9nRW50cnkgY2F0YWxvZ0VudHJ5ID0gKElDYXRhbG9nRW50cnkpdXNlckNhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0gICAgICAgY2F0YWxvZ0VudHJ5LnNldEtleSgidGVzdEtleSIpOwotICAgICAgIGNhdGFsb2dFbnRyeS5zZXRVUkkoImh0dHA6Ly90ZXN0dXJpIik7Ci0gICAgICAgd29ya2luZ1VzZXJDYXRhbG9nLmFkZENhdGFsb2dFbGVtZW50KGNhdGFsb2dFbnRyeSk7Ci0gICAgIAotICAgICAgIHVzZXJDYXRhbG9nLmFkZEVudHJpZXNGcm9tQ2F0YWxvZyh3b3JraW5nVXNlckNhdGFsb2cpOwotCSAgIFN0cmluZyB1c2VyQ2F0YWxvZ0xvY2F0aW9uID0gdXNlckNhdGFsb2cuZ2V0TG9jYXRpb24oKTsKLQkgIAotICAgICAgIHVzZXJDYXRhbG9nLnNhdmUoKTsKLSAgICAgICB1c2VyQ2F0YWxvZy5jbGVhcigpOwotICAgICAgIAotICAgICAgIHVzZXJDYXRhbG9nID0gZ2V0Q2F0YWxvZyhYTUxDb3JlUGx1Z2luLlVTRVJfQ0FUQUxPR19JRCwgdXNlckNhdGFsb2dMb2NhdGlvbik7Ci0gICAgICAgCi0gICAgICAgTGlzdCBlbnRyaWVzID0gZ2V0Q2F0YWxvZ0VudHJpZXModXNlckNhdGFsb2csIElDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9QVUJMSUMpOwotICAgICAgIGFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0gICAgICAgSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KWVudHJpZXMuZ2V0KDApOwotICAgICAKLSAgICAgICBhc3NlcnRFcXVhbHMoImh0dHA6Ly90ZXN0dXJpIiwgZW50cnkuZ2V0VVJJKCkpOwotICAgICAgIGFzc2VydEVxdWFscygidGVzdEtleSIsIGVudHJ5LmdldEtleSgpKTsKLQotICAgCi0gICAgfQotCi0KLSAgIAotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nV3JpdGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvQ2F0YWxvZ1dyaXRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZkYWI0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9DYXRhbG9nV3JpdGVyVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jYXRhbG9nLkNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci0KLXB1YmxpYyBjbGFzcyBDYXRhbG9nV3JpdGVyVGVzdCBleHRlbmRzIEFic3RyYWN0Q2F0YWxvZ1Rlc3QgewotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCX0KLQotCXB1YmxpYyBDYXRhbG9nV3JpdGVyVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgZmluYWwgdm9pZCB0ZXN0V3JpdGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyByZWFkIGNhdGFsb2cKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2NhdGFsb2cxLnhtbCI7Ci0JCVVSTCBjYXRhbG9nVXJsID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0RW50cnkoCi0JCQkJY2F0YWxvZ0ZpbGUpOwotCQlhc3NlcnROb3ROdWxsKGNhdGFsb2dVcmwpOwotCQlVUkwgcmVzb2x2ZWRVUkwgPSBQbGF0Zm9ybS5yZXNvbHZlKGNhdGFsb2dVcmwpOwotCi0JCUNhdGFsb2cgdGVzdENhdGFsb2cgPSAoQ2F0YWxvZykgZ2V0Q2F0YWxvZygiY2F0YWxvZzEiLCByZXNvbHZlZFVSTAotCQkJCS50b1N0cmluZygpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZXN0Q2F0YWxvZyk7Ci0JCXRlc3RDYXRhbG9nLnNldEJhc2UocmVzb2x2ZWRVUkwudG9TdHJpbmcoKSk7Ci0JCS8vIENhdGFsb2dSZWFkZXIucmVhZCh0ZXN0Q2F0YWxvZywgcmVzb2x2ZWRVUkwuZ2V0RmlsZSgpKTsKLQkJYXNzZXJ0Tm90TnVsbCh0ZXN0Q2F0YWxvZyk7Ci0KLQkJLy8gd3JpdGUgY2F0YWxvZwotCQlVUkwgcmVzdWx0c0ZvbGRlciA9IFRlc3RQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldEVudHJ5KAotCQkJCSIvIik7Ci0JCUlQYXRoIHBhdGggPSBuZXcgUGF0aChQbGF0Zm9ybS5yZXNvbHZlKHJlc3VsdHNGb2xkZXIpLmdldEZpbGUoKSk7Ci0JCVN0cmluZyByZXN1bHRDYXRhbG9nRmlsZSA9IHBhdGguYXBwZW5kKCJhY3R1YWxfcmVzdWx0cy9jYXRhbG9nMS54bWwiKS50b0ZpbGUoKS50b1VSSSgpLnRvU3RyaW5nKCk7Ci0JCXRlc3RDYXRhbG9nLnNldExvY2F0aW9uKHJlc3VsdENhdGFsb2dGaWxlKTsKLQkJLy8gd3JpdGUgY2F0YWxvZwotCQl0ZXN0Q2F0YWxvZy5zYXZlKCk7Ci0JCQotCQkvLyByZWFkIGNhdGFsb2cgZmlsZSBmcm9tIHRoZSBzYXZlZCBsb2NhdGlvbiBhbmQgdGVzdCBpdHMgY29udGVudAotCQlDYXRhbG9nIGNhdGFsb2cgPSAoQ2F0YWxvZykgZ2V0Q2F0YWxvZygiY2F0YWxvZzIiLCB0ZXN0Q2F0YWxvZy5nZXRMb2NhdGlvbigpKTsKLQkJYXNzZXJ0Tm90TnVsbChjYXRhbG9nKTsKLQotCQkvLyB0ZXN0IHNhdmVkIGNhdGFsb2cgLSBjYXRhbG9nMS54bWwKLQkJYXNzZXJ0RXF1YWxzKDMsIGNhdGFsb2cuZ2V0Q2F0YWxvZ0VudHJpZXMoKS5sZW5ndGgpOwotCi0JCS8vIHRlc3QgcHVibGljIGVudHJpZXMKLQkJTGlzdCBlbnRyaWVzID0gQ2F0YWxvZ1Rlc3QuZ2V0Q2F0YWxvZ0VudHJpZXMoY2F0YWxvZywKLQkJCQlJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJYXNzZXJ0RXF1YWxzKDEsIGVudHJpZXMuc2l6ZSgpKTsKLQkJSUNhdGFsb2dFbnRyeSBlbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQotCQlhc3NlcnRFcXVhbHMoIi4vSW52b2ljZS9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJJbnZvaWNlSWRfdGVzdCIsIGVudHJ5LmdldEtleSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd2ViVVJMIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoIndlYlVSTCIpKTsKLQotCQkvLyB0ZXN0IHN5c3RlbSBlbnRyaWVzCi0JCWVudHJpZXMgPSBDYXRhbG9nVGVzdC5nZXRDYXRhbG9nRW50cmllcyhjYXRhbG9nLAotCQkJCUlDYXRhbG9nRW50cnkuRU5UUllfVFlQRV9TWVNURU0pOwotCQlhc3NlcnRFcXVhbHMoMSwgZW50cmllcy5zaXplKCkpOwotCQllbnRyeSA9IChJQ2F0YWxvZ0VudHJ5KSBlbnRyaWVzLmdldCgwKTsKLQkJYXNzZXJ0RXF1YWxzKCIuL0ludm9pY2UvSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRVUkkoKSk7Ci0JCWFzc2VydEVxdWFscygiSW52b2ljZS5kdGQiLCBlbnRyeS5nZXRLZXkoKSk7Ci0JCWFzc2VydEVxdWFscygieWVzIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoImNoYWNoZWQiKSk7Ci0JCWFzc2VydEVxdWFscygidmFsdWUxIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoInByb3BlcnR5IikpOwotCi0JCS8vIHRlc3QgdXJpIGVudHJpZXMKLQkJZW50cmllcyA9IENhdGFsb2dUZXN0LmdldENhdGFsb2dFbnRyaWVzKGNhdGFsb2csCi0JCQkJSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1VSSSk7Ci0JCWFzc2VydEVxdWFscygxLCBlbnRyaWVzLnNpemUoKSk7Ci0JCWVudHJ5ID0gKElDYXRhbG9nRW50cnkpIGVudHJpZXMuZ2V0KDApOwotCQlhc3NlcnRFcXVhbHMoIi4vSW52b2ljZS9JbnZvaWNlLmR0ZCIsIGVudHJ5LmdldFVSSSgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJodHRwOi8vd3d3LnRlc3QuY29tL0ludm9pY2UuZHRkIiwgZW50cnkuZ2V0S2V5KCkpOwotCQlhc3NlcnRFcXVhbHMoIm5vIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoImNoYWNoZWQiKSk7Ci0JCWFzc2VydEVxdWFscygidmFsdWUyIiwgZW50cnkuZ2V0QXR0cmlidXRlVmFsdWUoInByb3BlcnR5IikpOwotCi0JCS8vIHRlc3QgbmV4dCBjYXRhbG9nIC0gY2F0YWxvZzIueG1sCi0JCUlOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9nRW50cmllcyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0JCWFzc2VydEVxdWFscygxLCBuZXh0Q2F0YWxvZ0VudHJpZXMubGVuZ3RoKTsKLQotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2dFbnRyeSA9IChJTmV4dENhdGFsb2cpIG5leHRDYXRhbG9nRW50cmllc1swXTsKLQkJYXNzZXJ0Tm90TnVsbChuZXh0Q2F0YWxvZ0VudHJ5KTsKLQotCQlhc3NlcnRFcXVhbHMoImNhdGFsb2cyLnhtbCIsIG5leHRDYXRhbG9nRW50cnkuZ2V0Q2F0YWxvZ0xvY2F0aW9uKCkpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvVGVzdFBsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvVGVzdFBsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTQyMjE5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1Rlc3RQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQ7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLWltcG9ydCBqYXZhLnV0aWwuKjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBUZXN0UGx1Z2luIHBsdWdpbjsKLQkvL1Jlc291cmNlIGJ1bmRsZS4KLQlwcml2YXRlIFJlc291cmNlQnVuZGxlIHJlc291cmNlQnVuZGxlOwotCQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgVGVzdFBsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdXBvbiBwbHVnLWluIGFjdGl2YXRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdGFydChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgcGx1Zy1pbiBpcyBzdG9wcGVkCi0JICovCi0JcHVibGljIHZvaWQgc3RvcChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zdG9wKGNvbnRleHQpOwotCQlwbHVnaW4gPSBudWxsOwotCQlyZXNvdXJjZUJ1bmRsZSA9IG51bGw7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc2hhcmVkIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgVGVzdFBsdWdpbiBnZXREZWZhdWx0KCkgewotCQlyZXR1cm4gcGx1Z2luOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHN0cmluZyBmcm9tIHRoZSBwbHVnaW4ncyByZXNvdXJjZSBidW5kbGUsCi0JICogb3IgJ2tleScgaWYgbm90IGZvdW5kLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFJlc291cmNlU3RyaW5nKFN0cmluZyBrZXkpIHsKLQkJUmVzb3VyY2VCdW5kbGUgYnVuZGxlID0gVGVzdFBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UmVzb3VyY2VCdW5kbGUoKTsKLQkJdHJ5IHsKLQkJCXJldHVybiAoYnVuZGxlICE9IG51bGwpID8gYnVuZGxlLmdldFN0cmluZyhrZXkpIDoga2V5OwotCQl9IGNhdGNoIChNaXNzaW5nUmVzb3VyY2VFeGNlcHRpb24gZSkgewotCQkJcmV0dXJuIGtleTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXRyeSB7Ci0JCQlpZiAocmVzb3VyY2VCdW5kbGUgPT0gbnVsbCkKLQkJCQlyZXNvdXJjZUJ1bmRsZSA9IFJlc291cmNlQnVuZGxlLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LndzdC54bWwuY2F0YWxvZy50ZXN0LlRlc3RQbHVnaW5SZXNvdXJjZXMiKTsKLQkJfSBjYXRjaCAoTWlzc2luZ1Jlc291cmNlRXhjZXB0aW9uIHgpIHsKLQkJCXJlc291cmNlQnVuZGxlID0gbnVsbDsKLQkJfQotCQlyZXR1cm4gcmVzb3VyY2VCdW5kbGU7Ci0JfQotCQotCQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIHJlc29sdmVQbHVnaW5Mb2NhdGlvbihTdHJpbmcgcGF0aCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJVVJMIHVybCA9IGdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRFbnRyeShwYXRoKTsKLQkJdXJsID0gUGxhdGZvcm0ucmVzb2x2ZSh1cmwpOwotCQlyZXR1cm4gdXJsLmdldEZpbGUoKTsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1hTRFNjaGVtYVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jYXRhbG9nL3Rlc3RzL2ludGVybmFsL1hTRFNjaGVtYVRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJiNTViOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9YU0RTY2hlbWFUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLnhzZC5pbXBsLlhTRFNjaGVtYUltcGw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLXB1YmxpYyBjbGFzcyBYU0RTY2hlbWFUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U2NoZW1hRm9yU2NoZW1hKCl7Ci0JCQotCQkgIFhTRFNjaGVtYUltcGwuZ2V0U2NoZW1hRm9yU2NoZW1hKCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOyAgCi0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9aaXBUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY2F0YWxvZy90ZXN0cy9pbnRlcm5hbC9aaXBUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjYTg3MzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NhdGFsb2cvdGVzdHMvaW50ZXJuYWwvWmlwVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubmV0LlVSTDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotcHVibGljIGNsYXNzIFppcFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkgcHVibGljIHZvaWQgdGVzdFppcCgpIHRocm93cyBFeGNlcHRpb257Ci0JCSAgCi0JCSAgVVJMIHVybCA9IG5ldyBVUkwoImphcjpmaWxlOi9EOi90Y3MvY2F0YWxvZ0phclRlc3Qvc2NoZW1hcy5qYXIhL2RhdGEvY2F0YWxvZy54c2QiKTsKLQkJICBJbnB1dFN0cmVhbSBpcyA9IHVybC5vcGVuU3RyZWFtKCk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL0ZpbGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvRmlsZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVlZjhkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDkzICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5yZXNvbHZlci50b29scy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOwotCi1wdWJsaWMgY2xhc3MgRmlsZVV0aWwgewotCi0JcHVibGljIEZpbGVVdGlsKCkgewotCQlzdXBlcigpOwotCX0KLQkKLQlwdWJsaWMgc3RhdGljIHZvaWQgY29weUZpbGUoU3RyaW5nIHNyYywgU3RyaW5nIGRlc3QpIHsKLQkJSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCQlGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlpcyA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oc3JjKTsKLQkJCWZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRlc3QpOwotCQkJaW50IGMgPSAwOwotCQkJYnl0ZVtdIGFycmF5ID0gbmV3IGJ5dGVbMTAyNF07Ci0JCQl3aGlsZSAoKGMgPSBpcy5yZWFkKGFycmF5KSkgPj0gMCkgewotCQkJCWZvcy53cml0ZShhcnJheSwgMCwgYyk7Ci0JCQl9Ci0JCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCX0gZmluYWxseSB7Ci0JCQl0cnkgewotCQkJCWZvcy5jbG9zZSgpOwotCQkJCWlzLmNsb3NlKCk7Ci0JCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJfQotCQl9Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgRmlsZSBjcmVhdGVGaWxlQW5kUGFyZW50RGlyZWN0b3JpZXMoU3RyaW5nIGZpbGVOYW1lKQotCQl0aHJvd3MgRXhjZXB0aW9uIHsKLQkJRmlsZSBmaWxlID0gbmV3IEZpbGUoZmlsZU5hbWUpOwotCQlGaWxlIHBhcmVudCA9IGZpbGUuZ2V0UGFyZW50RmlsZSgpOwotCQlpZiAoIXBhcmVudC5leGlzdHMoKSkgewotCQkJcGFyZW50Lm1rZGlycygpOwotCQl9Ci0JCWZpbGUuY3JlYXRlTmV3RmlsZSgpOwotCQlyZXR1cm4gZmlsZTsKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyB2b2lkIGRlbGV0ZURpcmVjdG9yaWVzKEZpbGUgZGlyKQotCQl0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlGaWxlW10gY2hpbGRyZW4gPSBkaXIubGlzdEZpbGVzKCk7Ci0JCWZvcihpbnQgaT0wOyBpPCBjaGlsZHJlbi5sZW5ndGg7IGkrKyl7Ci0JCQlpZihjaGlsZHJlbltpXS5saXN0KCkgIT0gbnVsbCAmJiBjaGlsZHJlbltpXS5saXN0KCkubGVuZ3RoID4gMCl7Ci0JCQkJZGVsZXRlRGlyZWN0b3JpZXMoY2hpbGRyZW5baV0pOwotCQkJfQotCQkJZWxzZXsKLQkJCQljaGlsZHJlbltpXS5kZWxldGUoKTsKLQkJCX0KLQkJfQotCQlkaXIuZGVsZXRlKCk7Ci0JCQkKLQl9Ci0JCi0JcHVibGljIHN0YXRpYyBib29sZWFuIHRleHR1YWxDb21wYXJlKGZpbmFsIEZpbGUgZmlyc3QsIGZpbmFsIEZpbGUgc2Vjb25kLCBGaWxlIGRpZmYpIHRocm93cyBqYXZhLmlvLklPRXhjZXB0aW9uIHsKLSAgICAgICAgQnVmZmVyZWRSZWFkZXIgcjEgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoZmlyc3QpKTsKLSAgICAgICAgQnVmZmVyZWRSZWFkZXIgcjIgPSBuZXcgQnVmZmVyZWRSZWFkZXIobmV3IEZpbGVSZWFkZXIoc2Vjb25kKSk7Ci0gICAgICAgIFByaW50V3JpdGVyIHByaW50V3JpdGVyID0gbmV3IFByaW50V3JpdGVyKG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRpZmYpKTsgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICBib29sZWFuIGRpZmZGb3VuZCA9IGZhbHNlOwotICAgICAgICB3aGlsZSAocjEucmVhZHkoKSkgewotICAgICAgICAgICAgU3RyaW5nIHMxID0gcjEucmVhZExpbmUoKTsKLSAgICAgICAgICAgIFN0cmluZyBzMiA9IHIyLnJlYWRMaW5lKCk7Ci0gICAgICAgICAgICBpZiAoczEgPT0gbnVsbCkgewotICAgICAgICAgICAgICAgIGlmIChzMiA9PSBudWxsKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGlmZkZvdW5kOyAgIC8vIGZpbGVzIGVxdWFsCi0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkaWZmRm91bmQgPSB0cnVlOyAgLy8gZmlsZXMgZGlmZmVyIGluIGxlbmd0aAotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFzMS5lcXVhbHMoczIpKSB7Ci0gICAgICAgICAgICAJcHJpbnRXcml0ZXIucHJpbnRsbigiPDw8PCAiICsgczEpOwotICAgICAgICAgICAgCXByaW50V3JpdGVyLnByaW50bG4oIjw8PDwgIiArIHMyKTsKLSAgICAgICAgICAgICAgICBkaWZmRm91bmQgPSB0cnVlOyAgICAvLyBmaWxlcyBkaWZmZXIKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSAKLSAgICAgICAgCi0gICAgICAgIHByaW50V3JpdGVyLmZsdXNoKCk7IAotICAgICAgICAKLSAgICAgICAgcmV0dXJuICBkaWZmRm91bmQ7Ci0gICAgIAotICAgIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1Jlc29sdmluZ1hNTFBhcnNlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1Jlc29sdmluZ1hNTFBhcnNlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODlkMDAxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9SZXNvbHZpbmdYTUxQYXJzZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwucmVzb2x2ZXIudG9vbHMudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmV0Lk1hbGZvcm1lZFVSTEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuVmVjdG9yOwotCi1pbXBvcnQgb3JnLmFwYWNoZS54bWwucmVzb2x2ZXIuQ2F0YWxvZ01hbmFnZXI7Ci1pbXBvcnQgb3JnLmFwYWNoZS54bWwucmVzb2x2ZXIuYXBwcy5YUGFyc2VFcnJvcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhtbC5yZXNvbHZlci50b29scy5SZXNvbHZpbmdYTUxSZWFkZXI7Ci0KLWltcG9ydCBvcmcueG1sLnNheC5TQVhOb3RSZWNvZ25pemVkRXhjZXB0aW9uOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbjsKLQotcHVibGljIGNsYXNzIFJlc29sdmluZ1hNTFBhcnNlciB7Ci0JCi0JcHVibGljIGJvb2xlYW4gdmFsaWRhdGlvbkVycm9yID0gZmFsc2U7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGludCBtYXhFcnJzID0gMTA7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gbnNBd2FyZSA9IHRydWU7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gdmFsaWRhdGluZyA9IHRydWU7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gc2hvd0Vycm9ycyA9IHRydWU7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIGJvb2xlYW4gc2hvd1dhcm5pbmdzID0gdHJ1ZTsKLQotCXByb3RlY3RlZCBzdGF0aWMgVmVjdG9yIGNhdGFsb2dGaWxlcyA9IG5ldyBWZWN0b3IoKTsKLQotCXByb3RlY3RlZCAgdm9pZCBwYXJzZUFuZFZhbGlkYXRlKFN0cmluZyB4bWxGaWxlLCBTdHJpbmdbXSBjYXRhbG9ncykKLQkJCXRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCi0JCQlDYXRhbG9nTWFuYWdlciBteU1hbmFnZXIgPSBuZXcgQ2F0YWxvZ01hbmFnZXIoKTsKLQkJCVN0cmluZ0J1ZmZlciBjYXRhbG9nRmlsZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJCWZvcihpbnQgaT0wOyBpPGNhdGFsb2dzLmxlbmd0aDsgaSsrKXsKLQkJCQljYXRhbG9nRmlsZSA9IGNhdGFsb2dGaWxlLmFwcGVuZChjYXRhbG9nc1tpXSArICI7Iik7Ci0JCQl9Ci0JCQlteU1hbmFnZXIuc2V0Q2F0YWxvZ0ZpbGVzKGNhdGFsb2dGaWxlLnRvU3RyaW5nKCkpOwotCQkgICAgbXlNYW5hZ2VyLnNldElnbm9yZU1pc3NpbmdQcm9wZXJ0aWVzKHRydWUpOwotCQkgICAgbXlNYW5hZ2VyLnNldFZlcmJvc2l0eSgyKTsKLQkJICAgIFJlc29sdmluZ1hNTFJlYWRlciByZWFkZXIgPSBuZXcgUmVzb2x2aW5nWE1MUmVhZGVyKG15TWFuYWdlcik7Ci0JCQl0cnkgewotCQkJCXJlYWRlci5zZXRGZWF0dXJlKCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvbmFtZXNwYWNlcyIsCi0JCQkJCQkJCW5zQXdhcmUpOwotCQkJCXJlYWRlci5zZXRGZWF0dXJlKCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvdmFsaWRhdGlvbiIsCi0JCQkJCQl2YWxpZGF0aW5nKTsKLQkJCQlyZWFkZXIuc2V0RmVhdHVyZSgKLQkJCQkJCSJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9zY2hlbWEiLCB0cnVlKTsKLQkJCX0gY2F0Y2ggKFNBWE5vdFJlY29nbml6ZWRFeGNlcHRpb24gZTEpIHsKLQkJCQllMS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0gY2F0Y2ggKFNBWE5vdFN1cHBvcnRlZEV4Y2VwdGlvbiBlMSkgewotCQkJCWUxLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCi0JCVhQYXJzZUVycm9yIHhwZSA9IG5ldyBYUGFyc2VFcnJvcihzaG93RXJyb3JzLCBzaG93V2FybmluZ3MpOwotCQl4cGUuc2V0TWF4TWVzc2FnZXMobWF4RXJycyk7Ci0JCXJlYWRlci5zZXRFcnJvckhhbmRsZXIoeHBlKTsKLQotCQlTdHJpbmcgcGFyc2VUeXBlID0gdmFsaWRhdGluZyA/ICJ2YWxpZGF0aW5nIiA6ICJ3ZWxsLWZvcm1lZCI7Ci0JCVN0cmluZyBuc1R5cGUgPSBuc0F3YXJlID8gIm5hbWVzcGFjZS1hd2FyZSIgOiAibmFtZXNwYWNlLWlnbm9yYW50IjsKLQkJaWYgKG1heEVycnMgPiAwKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIkF0dGVtcHRpbmcgIiArIHBhcnNlVHlwZSArICIsICIgKyBuc1R5cGUKLQkJCQkJKyAiIHBhcnNlIik7Ci0JCX0KLQotCQl0cnkgewotCQkJcmVhZGVyLnBhcnNlKHhtbEZpbGUpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJdmFsaWRhdGlvbkVycm9yID0gdHJ1ZTsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQotCQlpZiAobWF4RXJycyA+IDApIHsKLQkJCVN5c3RlbS5vdXQucHJpbnQoIlBhcnNlICIpOwotCQkJaWYgKHhwZS5nZXRGYXRhbENvdW50KCkgPiAwKSB7Ci0JCQkJdmFsaWRhdGlvbkVycm9yID0gdHJ1ZTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KCJmYWlsZWQgIik7Ci0JCQl9IGVsc2UgewotCQkJCVN5c3RlbS5vdXQucHJpbnQoInN1Y2NlZWRlZCAiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KCIoIik7Ci0JCQl9Ci0JCQlTeXN0ZW0ub3V0LnByaW50KCJ3aXRoICIpOwotCi0JCQlpbnQgZXJyQ291bnQgPSB4cGUuZ2V0RXJyb3JDb3VudCgpOwotCQkJaW50IHdhcm5Db3VudCA9IHhwZS5nZXRXYXJuaW5nQ291bnQoKTsKLQotCQkJaWYgKGVyckNvdW50ID4gMCkgewotCQkJCXZhbGlkYXRpb25FcnJvciA9IHRydWU7Ci0JCQkJU3lzdGVtLm91dC5wcmludChlcnJDb3VudCArICIgZXJyb3IiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KGVyckNvdW50ID4gMSA/ICJzIiA6ICIiKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KCIgYW5kICIpOwotCQkJfSBlbHNlIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KCJubyBlcnJvcnMgYW5kICIpOwotCQkJfQotCi0JCQlpZiAod2FybkNvdW50ID4gMCkgewotCQkJCXZhbGlkYXRpb25FcnJvciA9IHRydWU7Ci0JCQkJU3lzdGVtLm91dC5wcmludCh3YXJuQ291bnQgKyAiIHdhcm5pbmciKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KHdhcm5Db3VudCA+IDEgPyAicyIgOiAiIik7Ci0JCQkJU3lzdGVtLm91dC5wcmludCgiLiIpOwotCQkJfSBlbHNlIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KCJubyB3YXJuaW5ncy4iKTsKLQkJCX0KLQotCQkJU3lzdGVtLm91dC5wcmludGxuKCIiKTsKLQkJfQotCX0KLQkKLQkKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9UcmFYTGlhaXNvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1RyYVhMaWFpc29uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2ODYxYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1RyYVhMaWFpc29uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotLyoKLSAqIFRoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwMiBUaGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBBbGwgcmlnaHRzCi0gKiByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwgaWYKLSAqICAgIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgYWNrbm93bGVnZW1lbnQ6Ci0gKiAgICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKLSAqICAgICAgICBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiAoaHR0cDovL3d3dy5hcGFjaGUub3JnLykuIgotICogICAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVnZW1lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLAotICogICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVnZW1lbnRzIG5vcm1hbGx5IGFwcGVhci4KLSAqCi0gKiA0LiBUaGUgbmFtZXMgIlRoZSBKYWthcnRhIFByb2plY3QiLCAiQW50IiwgYW5kICJBcGFjaGUgU29mdHdhcmUKLSAqICAgIEZvdW5kYXRpb24iIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4KLSAqICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGFwYWNoZUBhcGFjaGUub3JnLgotICoKLSAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJBcGFjaGUiCi0gKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KLSAqICAgIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBHcm91cC4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUwotICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVBBQ0hFIFNPRlRXQVJFIEZPVU5EQVRJT04gT1IKLSAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQotICogaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEZvciBtb3JlCi0gKiBpbmZvcm1hdGlvbiBvbiB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHBsZWFzZSBzZWUKLSAqIDxodHRwOi8vd3d3LmFwYWNoZS5vcmcvPi4KLSAqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwucmVzb2x2ZXIudG9vbHMudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcueG1sLnNheC5JbnB1dFNvdXJjZTsKLWltcG9ydCBvcmcueG1sLnNheC5FbnRpdHlSZXNvbHZlcjsKLWltcG9ydCBvcmcueG1sLnNheC5YTUxSZWFkZXI7Ci0KLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5TQVhQYXJzZXJGYWN0b3J5OwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRXhjZXB0aW9uOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVGVtcGxhdGVzOwotCi1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5FcnJvckxpc3RlbmVyOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc3RyZWFtLlN0cmVhbVJlc3VsdDsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLnN0cmVhbS5TdHJlYW1Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5VUklSZXNvbHZlcjsKLQotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uc2F4LlNBWFNvdXJjZTsKLQotLyoqCi0gKiBDb25jcmV0ZSBsaWFpc29uIGZvciBYU0xUIHByb2Nlc3NvciBpbXBsZW1lbnRpbmcgVHJhWC4gKGllIEpBWFAgMS4xKQotICoKLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnJ1YnlzQHVzLmlibS5jb20iPlNhbSBSdWJ5PC9hPgotICogQGF1dGhvciA8YSBocmVmPSJtYWlsdG86ZGltc0B5YWhvby5jb20iPkRhdmFudW0gU3Jpbml2YXM8L2E+Ci0gKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpzYmFpbGxpZXpAYXBhY2hlLm9yZyI+U3RlcGhhbmUgQmFpbGxpZXo8L2E+Ci0gKiBAc2luY2UgQW50IDEuMwotICovCi1wdWJsaWMgY2xhc3MgVHJhWExpYWlzb24gaW1wbGVtZW50cyBYU0xUTGlhaXNvbiwgRXJyb3JMaXN0ZW5lciB7Ci0KLQkvKiogVGhlIHRyYXggVHJhbnNmb3JtZXJGYWN0b3J5ICovCi0JcHJpdmF0ZSBUcmFuc2Zvcm1lckZhY3RvcnkgdGZhY3RvcnkgPSBudWxsOwotCi0JLyoqIHN0eWxlc2hlZXQgc3RyZWFtLCBjbG9zZSBpdCBhc2FwICovCi0JcHJpdmF0ZSBGaWxlSW5wdXRTdHJlYW0geHNsU3RyZWFtID0gbnVsbDsKLQotCS8qKiBTdHlsZXNoZWV0IHRlbXBsYXRlICovCi0JcHJpdmF0ZSBUZW1wbGF0ZXMgdGVtcGxhdGVzID0gbnVsbDsKLQotCS8qKiB0cmFuc2Zvcm1lciAqLwotCXByaXZhdGUgVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPSBudWxsOwotCi0JLyoqIHBvc3NpYmxlIHJlc29sdmVyIGZvciBwdWJsaWNJZHMgKi8KLQlwcml2YXRlIEVudGl0eVJlc29sdmVyIGVudGl0eVJlc29sdmVyOwotCi0JLyoqIHBvc3NpYmxlIHJlc29sdmVyIGZvciBVUklzICovCi0JcHJpdmF0ZSBVUklSZXNvbHZlciB1cmlSZXNvbHZlcjsKLQotCXB1YmxpYyBUcmFYTGlhaXNvbigpIHRocm93cyBFeGNlcHRpb24gewotCQl0ZmFjdG9yeSA9IFRyYW5zZm9ybWVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpOwotCQl0ZmFjdG9yeS5zZXRFcnJvckxpc3RlbmVyKHRoaXMpOwotCX0KLQotCS8qKgotCSAqIFNldCB0aGUgb3V0cHV0IHByb3BlcnR5IGZvciB0aGUgY3VycmVudCB0cmFuc2Zvcm1lci4KLQkgKiBOb3RlIHRoYXQgdGhlIHN0eWxlc2hlZXQgbXVzdCBiZSBzZXQgcHJpb3IgdG8gY2FsbGluZwotCSAqIHRoaXMgbWV0aG9kLgotCSAqIEBwYXJhbSBuYW1lIHRoZSBvdXRwdXQgcHJvcGVydHkgbmFtZS4KLQkgKiBAcGFyYW0gdmFsdWUgdGhlIG91dHB1dCBwcm9wZXJ0eSB2YWx1ZS4KLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRPdXRwdXRQcm9wZXJ0eShTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7Ci0JCWlmICh0cmFuc2Zvcm1lciA9PSBudWxsKSB7Ci0JCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKCJzdHlsZXNoZWV0IG11c3QgYmUgc2V0IHByaW9yIHRvIHNldHRpbmcgdGhlIG91dHB1dCBwcm9wZXJ0aWVzIik7Ci0JCX0KLQkJdHJhbnNmb3JtZXIuc2V0T3V0cHV0UHJvcGVydHkobmFtZSwgdmFsdWUpOwotCX0KLQotCS8vLS0tLS0tLS0tLS0tLS0tLS0tLSBJTVBPUlRBTlQKLQkvLyAxKSBEb24ndCB1c2UgdGhlIFN0cmVhbVNvdXJjZShGaWxlKSBjdG9yLiBJdCB3b24ndCB3b3JrIHdpdGgKLQkvLyB4YWxhbiBwcmlvciB0byAyLjIgYmVjYXVzZSBvZiBzeXN0ZW1pZCBidWdzLgotCi0JLy8gMikgVXNlIGEgc3RyZWFtIHNvIHRoYXQgeW91IGNhbiBjbG9zZSBpdCB5b3Vyc2VsZiBxdWlja2x5Ci0JLy8gYW5kIGF2b2lkIGtlZXBpbmcgdGhlIGhhbmRsZSB1bnRpbCB0aGUgb2JqZWN0IGlzIGdhcmJhZ2VkLgotCS8vIChhbHdheXMga2VlcCBjb250cm9sKSwgb3RoZXJ3aXNlIHlvdSB3b24ndCBiZSBhYmxlIHRvIGRlbGV0ZQotCS8vIHRoZSBmaWxlIHF1aWNrbHkgb24gd2luZG93cy4KLQotCS8vIDMpIEFsd2F5cyBzZXQgdGhlIHN5c3RlbWlkIHRvIHRoZSBzb3VyY2UgZm9yIGltcG9ydHMsIGluY2x1ZGVzLi4uCi0JLy8gaW4geHNsIGFuZCB4bWwuLi4KLQotCXB1YmxpYyB2b2lkIHNldFN0eWxlc2hlZXQoRmlsZSBzdHlsZXNoZWV0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJeHNsU3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShzdHlsZXNoZWV0KTsKLQkJU3RyZWFtU291cmNlIHNyYyA9IG5ldyBTdHJlYW1Tb3VyY2UoeHNsU3RyZWFtKTsKLQkJc3JjLnNldFN5c3RlbUlkKGdldFN5c3RlbUlkKHN0eWxlc2hlZXQpKTsKLQkJdGVtcGxhdGVzID0gdGZhY3RvcnkubmV3VGVtcGxhdGVzKHNyYyk7Ci0JCXRyYW5zZm9ybWVyID0gdGVtcGxhdGVzLm5ld1RyYW5zZm9ybWVyKCk7Ci0JCXRyYW5zZm9ybWVyLnNldEVycm9yTGlzdGVuZXIodGhpcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdHJhbnNmb3JtKEZpbGUgaW5maWxlLCBGaWxlIG91dGZpbGUpIHRocm93cyBFeGNlcHRpb24gewotCQlGaWxlSW5wdXRTdHJlYW0gZmlzID0gbnVsbDsKLQkJRmlsZU91dHB1dFN0cmVhbSBmb3MgPSBudWxsOwotCQl0cnkgewotCQkJZmlzID0gbmV3IEZpbGVJbnB1dFN0cmVhbShpbmZpbGUpOwotCQkJZm9zID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0ZmlsZSk7Ci0JCQkvLyBGSVhNRTogbmVlZCB0byB1c2UgYSBTQVhTb3VyY2UgYXMgdGhlIHNvdXJjZSBmb3IgdGhlIHRyYW5zZm9ybQotCQkJLy8gc28gd2UgY2FuIHBsdWcgaW4gb3VyIG93biBlbnRpdHkgcmVzb2x2ZXIKLQkJCVNvdXJjZSBzcmMgPSBudWxsOwotCQkJaWYgKGVudGl0eVJlc29sdmVyICE9IG51bGwpIHsKLQkJCQlpZiAodGZhY3RvcnkuZ2V0RmVhdHVyZShTQVhTb3VyY2UuRkVBVFVSRSkpIHsKLQkJCQkJU0FYUGFyc2VyRmFjdG9yeSBzcEZhY3RvcnkgPSBTQVhQYXJzZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCQkJCXNwRmFjdG9yeS5zZXROYW1lc3BhY2VBd2FyZSh0cnVlKTsKLQkJCQkJWE1MUmVhZGVyIHJlYWRlciA9IHNwRmFjdG9yeS5uZXdTQVhQYXJzZXIoKS5nZXRYTUxSZWFkZXIoKTsKLQkJCQkJcmVhZGVyLnNldEVudGl0eVJlc29sdmVyKGVudGl0eVJlc29sdmVyKTsKLQkJCQkJc3JjID0gbmV3IFNBWFNvdXJjZShyZWFkZXIsIG5ldyBJbnB1dFNvdXJjZShmaXMpKTsKLQkJCQl9IGVsc2UgewotCQkJCQl0aHJvdyBuZXcgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKAotCQkJCQkJInhjYXRhbG9nIHNwZWNpZmllZCwgYnV0ICIKLQkJCQkJCQkrICJwYXJzZXIgZG9lc24ndCBzdXBwb3J0IFNBWCIpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJc3JjID0gbmV3IFN0cmVhbVNvdXJjZShmaXMpOwotCQkJfQotCQkJc3JjLnNldFN5c3RlbUlkKGdldFN5c3RlbUlkKGluZmlsZSkpOwotCQkJU3RyZWFtUmVzdWx0IHJlcyA9IG5ldyBTdHJlYW1SZXN1bHQoZm9zKTsKLQkJCS8vIG5vdCBzdXJlIHdoYXQgY291bGQgYmUgdGhlIG5lZWQgb2YgdGhpcy4uLgotCQkJcmVzLnNldFN5c3RlbUlkKGdldFN5c3RlbUlkKG91dGZpbGUpKTsKLQotCQkJaWYgKHVyaVJlc29sdmVyICE9IG51bGwpCi0JCQkJdHJhbnNmb3JtZXIuc2V0VVJJUmVzb2x2ZXIodXJpUmVzb2x2ZXIpOwotCi0JCQl0cmFuc2Zvcm1lci50cmFuc2Zvcm0oc3JjLCByZXMpOwotCQl9IGZpbmFsbHkgewotCQkJLy8gbWFrZSBzdXJlIHRvIGNsb3NlIGFsbCBoYW5kbGVzLCBvdGhlcndpc2UgdGhlIGdhcmJhZ2UKLQkJCS8vIGNvbGxlY3RvciB3aWxsIGNsb3NlIHRoZW0uLi53aGVuZXZlciBwb3NzaWJsZSBhbmQKLQkJCS8vIFdpbmRvd3MgbWF5IGNvbXBsYWluIGFib3V0IG5vdCBiZWluZyBhYmxlIHRvIGRlbGV0ZSBmaWxlcy4KLQkJCXRyeSB7Ci0JCQkJaWYgKHhzbFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJCXhzbFN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlnbm9yZWQpIHsKLQkJCX0KLQkJCXRyeSB7Ci0JCQkJaWYgKGZpcyAhPSBudWxsKSB7Ci0JCQkJCWZpcy5jbG9zZSgpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlnbm9yZWQpIHsKLQkJCX0KLQkJCXRyeSB7Ci0JCQkJaWYgKGZvcyAhPSBudWxsKSB7Ci0JCQkJCWZvcy5jbG9zZSgpOwotCQkJCX0KLQkJCX0gY2F0Y2ggKElPRXhjZXB0aW9uIGlnbm9yZWQpIHsKLQkJCX0KLQkJfQotCX0KLQotCS8vIG1ha2Ugc3VyZSB0aGF0IHRoZSBzeXN0ZW1pZCBpcyBtYWRlIG9mICcvJyBhbmQgbm90ICdcJyBvdGhlcndpc2UKLQkvLyBjcmltc29uIHdpbGwgY29tcGxhaW4gdGhhdCBpdCBjYW5ub3QgcmVzb2x2ZSByZWxhdGl2ZSBlbnRpdGllcwotCS8vIGJlY2F1c2UgaXQgZ3JhYnMgdGhlIGJhc2UgdXJpIHZpYSBsYXN0SW5kZXhPZignLycpIHdpdGhvdXQKLQkvLyBtYWtpbmcgc3VyZSBpdCBpcyByZWFsbHkgYSAvJ2VkIHBhdGgKLQlwcm90ZWN0ZWQgU3RyaW5nIGdldFN5c3RlbUlkKEZpbGUgZmlsZSkgewotCQlTdHJpbmcgcGF0aCA9IGZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7Ci0JCXBhdGggPSBwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKTsKLQotCQkvLyBvbiBXaW5kb3dzLCB1c2UgJ2ZpbGU6Ly8vJwotCQlpZiAoRmlsZS5zZXBhcmF0b3JDaGFyID09ICdcXCcpIHsKLQkJCXJldHVybiBGSUxFX1BST1RPQ09MX1BSRUZJWCArICIvIiArIHBhdGg7Ci0JCX0KLQkJLy8gVW5peCwgdXNlICdmaWxlOi8vJwotCQlyZXR1cm4gRklMRV9QUk9UT0NPTF9QUkVGSVggKyBwYXRoOwotCX0KLQotCXB1YmxpYyB2b2lkIGFkZFBhcmFtKFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpIHsKLQkJdHJhbnNmb3JtZXIuc2V0UGFyYW1ldGVyKG5hbWUsIHZhbHVlKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBlcnJvcihUcmFuc2Zvcm1lckV4Y2VwdGlvbiBlKSB7Ci0JCWxvZ0Vycm9yKGUsICJFcnJvciIpOwotCX0KLQotCXB1YmxpYyB2b2lkIGZhdGFsRXJyb3IoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotCQlsb2dFcnJvcihlLCAiRmF0YWwgRXJyb3IiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB3YXJuaW5nKFRyYW5zZm9ybWVyRXhjZXB0aW9uIGUpIHsKLQkJbG9nRXJyb3IoZSwgIldhcm5pbmciKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgbG9nRXJyb3IoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSwgU3RyaW5nIHR5cGUpIHsKLQotCQlTdHJpbmdCdWZmZXIgbXNnID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpZiAoZS5nZXRMb2NhdG9yKCkgIT0gbnVsbCkgewotCQkJaWYgKGUuZ2V0TG9jYXRvcigpLmdldFN5c3RlbUlkKCkgIT0gbnVsbCkgewotCQkJCVN0cmluZyB1cmwgPSBlLmdldExvY2F0b3IoKS5nZXRTeXN0ZW1JZCgpOwotCQkJCWlmICh1cmwuc3RhcnRzV2l0aCgiZmlsZTovLy8iKSkgewotCQkJCQl1cmwgPSB1cmwuc3Vic3RyaW5nKDgpOwotCQkJCX0KLQkJCQltc2cuYXBwZW5kKHVybCk7Ci0JCQl9IGVsc2UgewotCQkJCW1zZy5hcHBlbmQoIlVua25vd24gZmlsZSIpOwotCQkJfQotCQkJaWYgKGUuZ2V0TG9jYXRvcigpLmdldExpbmVOdW1iZXIoKSAhPSAtMSkgewotCQkJCW1zZy5hcHBlbmQoIjoiICsgZS5nZXRMb2NhdG9yKCkuZ2V0TGluZU51bWJlcigpKTsKLQkJCQlpZiAoZS5nZXRMb2NhdG9yKCkuZ2V0Q29sdW1uTnVtYmVyKCkgIT0gLTEpIHsKLQkJCQkJbXNnLmFwcGVuZCgiOiIgKyBlLmdldExvY2F0b3IoKS5nZXRDb2x1bW5OdW1iZXIoKSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCW1zZy5hcHBlbmQoIjogIiArIHR5cGUgKyAiISAiKTsKLQkJbXNnLmFwcGVuZChlLmdldE1lc3NhZ2UoKSk7Ci0JCWlmIChlLmdldENhdXNlKCkgIT0gbnVsbCkgewotCQkJbXNnLmFwcGVuZCgiIENhdXNlOiAiICsgZS5nZXRDYXVzZSgpKTsKLQkJfQotCi0JCVN5c3RlbS5vdXQucHJpbnRsbihtc2cudG9TdHJpbmcoKSk7Ci0JfQotCi0JLyoqIFNldCB0aGUgY2xhc3MgdG8gcmVzb2x2ZSBlbnRpdGllcyBkdXJpbmcgdGhlIHRyYW5zZm9ybWF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc2V0RW50aXR5UmVzb2x2ZXIoRW50aXR5UmVzb2x2ZXIgYVJlc29sdmVyKSB7Ci0JCWVudGl0eVJlc29sdmVyID0gYVJlc29sdmVyOwotCX0KLQotCS8qKiBTZXQgdGhlIGNsYXNzIHRvIHJlc29sdmUgVVJJcyBkdXJpbmcgdGhlIHRyYW5zZm9ybWF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc2V0VVJJUmVzb2x2ZXIoVVJJUmVzb2x2ZXIgYVJlc29sdmVyKSB7Ci0JCXVyaVJlc29sdmVyID0gYVJlc29sdmVyOwotCQl0ZmFjdG9yeS5zZXRVUklSZXNvbHZlcihhUmVzb2x2ZXIpOwotCX0KLQotfSAvLy0tIFRyYVhMaWFpc29uCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvVmFsaWRhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1ZhbGlkYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDVlN2FjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTEgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnJlc29sdmVyLnRvb2xzLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbC5UZXN0UGx1Z2luOwotCi0KLS8qKgotICogVG8gcnVuIHRoaXMgdGVzdCBuZWVkIHRvIGFkZCByZXNvbHZlci5qYXIgdG8gdGhlIGNsYXNzcGF0aC4KLSAqIFJ1biBhcyBKVW5pdCBQbHVnaW4gdGVzdDoKLSAqIC0gcHV0IHJlc29sdmVyLmphciBvbiB0aGUgYm9vdCBjbGFzcyBwYXRoCi0gKiAtIGFkZCBWTSBhcmd1bWVudDoKLSAqIAotICogLVhib290Y2xhc3NwYXRoL3A6PGluc3RhbGwgbG9jYXRpb24+XGpyZVxsaWJcZXh0XHJlc29sdmVyLmphcgotICoKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgewotCQotCQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQlwdWJsaWMgVmFsaWRhdG9yVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRpbmdQYXJzZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgeG1sRmlsZSA9ICIvZGF0YS9QZXJzb25hbC9wZXJzb25hbC1zY2hlbWEueG1sIjsKLQkJeG1sRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKHhtbEZpbGUpOwotCQkKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2NhdGFsb2cyLnhtbCI7Ci0JCWNhdGFsb2dGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oY2F0YWxvZ0ZpbGUpOwotCQkJCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLSIgKyB0aGlzLmdldE5hbWUoKSArICItLS0tLS0tLS0iKTsKLQkJUmVzb2x2aW5nWE1MUGFyc2VyIHBhcnNlciA9IG5ldyBSZXNvbHZpbmdYTUxQYXJzZXIoKTsKLQkJcGFyc2VyLnBhcnNlQW5kVmFsaWRhdGUoeG1sRmlsZSwgbmV3IFN0cmluZ1tde2NhdGFsb2dGaWxlfSk7Ci0JCWFzc2VydEZhbHNlKHBhcnNlci52YWxpZGF0aW9uRXJyb3IpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Jlc29sdmVyL3Rvb2xzL3Rlc3RzL2ludGVybmFsL1hTTFRMaWFpc29uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvWFNMVExpYWlzb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JmMzZhOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvWFNMVExpYWlzb24uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKgotICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKLSAqIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLCBpZgotICogICAgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWdlbWVudDoKLSAqICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQotICogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCi0gKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWdlbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCi0gKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWdlbWVudHMgbm9ybWFsbHkgYXBwZWFyLgotICoKLSAqIDQuIFRoZSBuYW1lcyAiVGhlIEpha2FydGEgUHJvamVjdCIsICJBbnQiLCBhbmQgIkFwYWNoZSBTb2Z0d2FyZQotICogICAgRm91bmRhdGlvbiIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCi0gKgotICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIKLSAqICAgIG5vciBtYXkgIkFwYWNoZSIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgotICogICAgcGVybWlzc2lvbiBvZiB0aGUgQXBhY2hlIEdyb3VwLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCi0gKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgotICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCi0gKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICoKLSAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55Ci0gKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgRm9yIG1vcmUKLSAqIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQotICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgotICovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5yZXNvbHZlci50b29scy50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLQotLyoqCi0gKiBQcm94eSBpbnRlcmZhY2UgZm9yIFhTTFQgcHJvY2Vzc29ycy4KLSAqCi0gKiBAYXV0aG9yIDxhIGhyZWY9Im1haWx0bzpydWJ5c0B1cy5pYm0uY29tIj5TYW0gUnVieTwvYT4KLSAqIEBhdXRob3IgPGEgaHJlZj0ibWFpbHRvOnNiYWlsbGllekBhcGFjaGUub3JnIj5TdGVwaGFuZSBCYWlsbGllejwvYT4KLSAqIEBzZWUgWFNMVFByb2Nlc3MKLSAqIEBzaW5jZSBBbnQgMS4xCi0gKi8KLXB1YmxpYyBpbnRlcmZhY2UgWFNMVExpYWlzb24gewotCi0gICAgLyoqCi0gICAgICogdGhlIGZpbGUgcHJvdG9jb2wgcHJlZml4IGZvciBzeXN0ZW1pZC4KLSAgICAgKiBUaGlzIGZpbGUgcHJvdG9jb2wgbXVzdCBiZSBhcHBlbmRlZCB0byBhbiBhYnNvbHV0ZSBwYXRoLgotICAgICAqIFR5cGljYWxseTogPHR0PkZJTEVfUFJPVE9DT0xfUFJFRklYICsgZmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTwvdHQ+Ci0gICAgICogTm90ZSB0aGF0IG9uIFdpbmRvd3MsIGFuIGV4dHJhICcvJyBtdXN0IGJlIGFwcGVuZGVkIHRvIHRoZQotICAgICAqIHByb3RvY29sIHByZWZpeCBzbyB0aGF0IHRoZXJlIGlzIGFsd2F5cyAzIGNvbnNlY3V0aXZlIHNsYXNoZXMuCi0gICAgICogQHNpbmNlIEFudCAxLjQKLSAgICAgKi8KLSAgICBTdHJpbmcgRklMRV9QUk9UT0NPTF9QUkVGSVggPSAiZmlsZTovLyI7Ci0KLSAgICAvKioKLSAgICAgKiBzZXQgdGhlIHN0eWxlc2hlZXQgdG8gdXNlIGZvciB0aGUgdHJhbnNmb3JtYXRpb24uCi0gICAgICogQHBhcmFtIHN0eWxlc2hlZXQgdGhlIHN0eWxlc2hlZXQgdG8gYmUgdXNlZCBmb3IgdHJhbnNmb3JtYXRpb24uCi0gICAgICogQHNpbmNlIEFudCAxLjQKLSAgICAgKi8KLSAgICB2b2lkIHNldFN0eWxlc2hlZXQoRmlsZSBzdHlsZXNoZWV0KSB0aHJvd3MgRXhjZXB0aW9uOwotCi0gICAgLyoqCi0gICAgICogQWRkIGEgcGFyYW1ldGVyIHRvIGJlIHNldCBkdXJpbmcgdGhlIFhTTCB0cmFuc2Zvcm1hdGlvbi4KLSAgICAgKiBAcGFyYW0gbmFtZSB0aGUgcGFyYW1ldGVyIG5hbWUuCi0gICAgICogQHBhcmFtIGV4cHJlc3Npb24gdGhlIHBhcmFtZXRlciB2YWx1ZSBhcyBhbiBleHByZXNzaW9uIHN0cmluZy4KLSAgICAgKiBAdGhyb3dzIEV4Y2VwdGlvbiB0aHJvd24gaWYgYW55IHByb2JsZW1zIGhhcHBlbnMuCi0gICAgICogQHNpbmNlIEFudCAxLjMKLSAgICAgKi8KLSAgICB2b2lkIGFkZFBhcmFtKFN0cmluZyBuYW1lLCBTdHJpbmcgZXhwcmVzc2lvbikgdGhyb3dzIEV4Y2VwdGlvbjsKLQotICAgIC8qKgotICAgICAqIFBlcmZvcm0gdGhlIHRyYW5zZm9ybWF0aW9uIG9mIGEgZmlsZSBpbnRvIGFub3RoZXIuCi0gICAgICogQHBhcmFtIGluZmlsZSB0aGUgaW5wdXQgZmlsZSwgcHJvYmFibHkgYW4gWE1MIG9uZS4gOi0pCi0gICAgICogQHBhcmFtIG91dGZpbGUgdGhlIG91dHB1dCBmaWxlIHJlc3VsdGluZyBmcm9tIHRoZSB0cmFuc2Zvcm1hdGlvbgotICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uIHRocm93biBpZiBhbnkgcHJvYmxlbXMgaGFwcGVucy4KLSAgICAgKiBAc2VlICNzZXRTdHlsZXNoZWV0KEZpbGUpCi0gICAgICogQHNpbmNlIEFudCAxLjQKLSAgICAgKi8KLSAgICB2b2lkIHRyYW5zZm9ybShGaWxlIGluZmlsZSwgRmlsZSBvdXRmaWxlKSB0aHJvd3MgRXhjZXB0aW9uOwotCi19IC8vLS0gWFNMVExpYWlzb24KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9YU0xUV2l0aENhdGFsb2dSZXNvbHZlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9yZXNvbHZlci90b29scy90ZXN0cy9pbnRlcm5hbC9YU0xUV2l0aENhdGFsb2dSZXNvbHZlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGNmYjNhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvcmVzb2x2ZXIvdG9vbHMvdGVzdHMvaW50ZXJuYWwvWFNMVFdpdGhDYXRhbG9nUmVzb2x2ZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwucmVzb2x2ZXIudG9vbHMudGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhtbC5yZXNvbHZlci50b29scy5DYXRhbG9nUmVzb2x2ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzLmludGVybmFsLlRlc3RQbHVnaW47Ci0KLQotLyoqCi0gKiBUZXN0IGZyb20gaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2J1Z3ppbGxhL3Nob3dfYnVnLmNnaT9pZD0xNjMzNgotICogCi0gKiBUbyBydW4gdGhpcyB0ZXN0IG5lZWQgdG8gYWRkIHJlc29sdmVyLmphciB0byB0aGUgY2xhc3NwYXRoLgotICogUnVuIGFzIEpVbml0IFBsdWdpbiB0ZXN0OgotICogLSBwdXQgcmVzb2x2ZXIuamFyIG9uIHRoZSBib290IGNsYXNzIHBhdGgKLSAqIC0gYWRkIFZNIGFyZ3VtZW50OgotICogCi0gKiAtWGJvb3RjbGFzc3BhdGgvcDo8aW5zdGFsbCBsb2NhdGlvbj5canJlXGxpYlxleHRccmVzb2x2ZXIuamFyCi0gKgotICoKLSAqLwotcHVibGljIGNsYXNzIFhTTFRXaXRoQ2F0YWxvZ1Jlc29sdmVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCUNhdGFsb2dSZXNvbHZlciBjYXRhbG9nUmVzb2x2ZXIgPSBudWxsOwotCVRyYVhMaWFpc29uIHhzbHRMaWFzb24gPSBudWxsOwotCXN0YXRpYyBTdHJpbmcgU0VQID0gRmlsZS5zZXBhcmF0b3I7Ci0KLQlwdWJsaWMgWFNMVFdpdGhDYXRhbG9nUmVzb2x2ZXJUZXN0KFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJanVuaXQudGV4dHVpLlRlc3RSdW5uZXIucnVuKFhTTFRXaXRoQ2F0YWxvZ1Jlc29sdmVyVGVzdC5jbGFzcyk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsJCi0JCWNhdGFsb2dSZXNvbHZlciA9IG5ldyBDYXRhbG9nUmVzb2x2ZXIoKTsKLQkJeHNsdExpYXNvbiA9IG5ldyBUcmFYTGlhaXNvbigpOwotCQl4c2x0TGlhc29uLnNldEVudGl0eVJlc29sdmVyKGNhdGFsb2dSZXNvbHZlcik7Ci0JCXhzbHRMaWFzb24uc2V0VVJJUmVzb2x2ZXIoY2F0YWxvZ1Jlc29sdmVyKTsKLQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhTTFR3aXRoQ2F0YWxvZ1Jlc29sdmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCQotCQlTdHJpbmcgdGVzdERpck5hbWUgPSAiZGF0YS90ZXN0WFNMVHdpdGhDYXRhbG9nUmVzb2x2ZXIiOwotCQl0ZXN0RGlyTmFtZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKHRlc3REaXJOYW1lKTsKLQkJCi0JCVN0cmluZyBjYXRhbG9nRmlsZU5hbWUgPSB0ZXN0RGlyTmFtZSArIFNFUCArICJjYXRhbG9nLnhtbCI7CQotCQlTdHJpbmcgeHNsRmlsZU5hbWUgPSB0ZXN0RGlyTmFtZSArIFNFUCArICJ4bWxjYXRhbG9nLnhzbCI7Ci0JCVN0cmluZyB4bWxGaWxlTmFtZSA9IHRlc3REaXJOYW1lICsgU0VQICsgInhtbGNhdGFsb2cyLnhtbCI7Ci0JCVN0cmluZyByZXN1bHRGaWxlTmFtZSA9IHhtbEZpbGVOYW1lICsgIi1vdXQiOwotCQlTdHJpbmcgaWRlYWxSZXN1bHRGaWxlTmFtZSA9IHhtbEZpbGVOYW1lICsgIi1yZXN1bHQiOwotCi0JCS8vc2V0dXAgY2F0YWxvZyAKLQotCQlGaWxlIGNhdGFsb2dGaWxlID0gbmV3IEZpbGUoY2F0YWxvZ0ZpbGVOYW1lKTsKLQkJCi0JCWFzc2VydFRydWUoIkNhdGFsb2cgZmlsZSAiICsgY2F0YWxvZ0ZpbGVOYW1lICsgIiBzaG91bGQgZXhpc3QgZm9yIHRoZSB0ZXN0IiwgY2F0YWxvZ0ZpbGUuZXhpc3RzKCkpOwotCQotCQljYXRhbG9nUmVzb2x2ZXIuZ2V0Q2F0YWxvZygpLnBhcnNlQ2F0YWxvZyhjYXRhbG9nRmlsZU5hbWUpOwotCQkKLQkJRmlsZSB4c2xGaWxlID0gbmV3IEZpbGUoeHNsRmlsZU5hbWUpOwotCQkKLQkJYXNzZXJ0VHJ1ZSgiWFNMIGZpbGUgIiArIHhzbEZpbGVOYW1lICsgIiBzaG91bGQgZXhpc3QgZm9yIHRoZSB0ZXN0IiwgeHNsRmlsZS5leGlzdHMoKSk7CQkKLQkJCQotCQlGaWxlIGluRmlsZSA9IG5ldyBGaWxlKHhtbEZpbGVOYW1lKTsKLQkJCi0JCWFzc2VydFRydWUoIlhNTCBmaWxlICIgKyB4c2xGaWxlTmFtZSArICIgc2hvdWxkIGV4aXN0IGZvciB0aGUgdGVzdCIsIHhzbEZpbGUuZXhpc3RzKCkpOwkJCi0JCQotCQlGaWxlIG91dEZpbGUgPSBGaWxlVXRpbC5jcmVhdGVGaWxlQW5kUGFyZW50RGlyZWN0b3JpZXMocmVzdWx0RmlsZU5hbWUpOwotCi0JCXhzbHRMaWFzb24uc2V0U3R5bGVzaGVldCh4c2xGaWxlKTsKLQkJeHNsdExpYXNvbi5hZGRQYXJhbSgib3V0cHJvcCIsICJ0ZXN0dmFsdWUiKTsKLQkKLQkJeHNsdExpYXNvbi50cmFuc2Zvcm0oaW5GaWxlLCBvdXRGaWxlKTsKLQkJCi0JCWJvb2xlYW4gZGlmZkZvdW5kID0KLQkJCQkJRmlsZVV0aWwudGV4dHVhbENvbXBhcmUoCi0JCQkJCQlvdXRGaWxlLAotCQkJCQkJbmV3IEZpbGUoaWRlYWxSZXN1bHRGaWxlTmFtZSksCi0JCQkJCQluZXcgRmlsZShyZXN1bHRGaWxlTmFtZSArICItZGlmZiIpKTsKLQkJCQotCSAgIGFzc2VydFRydWUoIk91dHB1dCBmaWxlIHNob3VsZCBtYXRjaCB0aGUgZXhwZWN0ZWQgcmVzdWx0cyIsICFkaWZmRm91bmQpOwotCi0JCQotCi0JfQotCi0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91cmlyZXNvbHZlci92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL015WE1MQ2F0YWxvZ1Jlc29sdmVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdXJpcmVzb2x2ZXIvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9NeVhNTENhdGFsb2dSZXNvbHZlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGYxMjNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91cmlyZXNvbHZlci92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL015WE1MQ2F0YWxvZ1Jlc29sdmVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudXJpcmVzb2x2ZXIudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy51dGlsLlhNTENhdGFsb2dSZXNvbHZlcjsKLWltcG9ydCBvcmcuYXBhY2hlLnhlcmNlcy54bmkuWE1MUmVzb3VyY2VJZGVudGlmaWVyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnhuaS5YTklFeGNlcHRpb247Ci0KLXB1YmxpYyBjbGFzcyBNeVhNTENhdGFsb2dSZXNvbHZlciBleHRlbmRzIFhNTENhdGFsb2dSZXNvbHZlciB7Ci0KLQkvKioKLQkgKiBAcGFyYW0gYXJncwotCSAqLwotCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKLQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCi0JfQotCi0JcHVibGljIFN0cmluZyByZXNvbHZlSWRlbnRpZmllcihYTUxSZXNvdXJjZUlkZW50aWZpZXIgcmVzb3VyY2VJZGVudGlmaWVyKSB0aHJvd3MgSU9FeGNlcHRpb24sIFhOSUV4Y2VwdGlvbiB7Ci0JICAgIFN0cmluZyByZXNvbHZlZElkID0gbnVsbDsKLQotICAgICAgICAvLyBUaGUgbmFtZXNwYWNlIGlzIHVzZWZ1bCBmb3IgcmVzb2x2aW5nIG5hbWVzcGFjZSBhd2FyZQotICAgICAgICAvLyBncmFtbWFycyBzdWNoIGFzIFhNTCBzY2hlbWEuIExldCBpdCB0YWtlIHByZWNlZGVuY2Ugb3ZlcgotICAgICAgICAvLyB0aGUgZXh0ZXJuYWwgaWRlbnRpZmllciBpZiBvbmUgZXhpc3RzLgotICAgICAgICBTdHJpbmcgbmFtZXNwYWNlID0gcmVzb3VyY2VJZGVudGlmaWVyLmdldE5hbWVzcGFjZSgpOwotICAgICAgICBpZiAobmFtZXNwYWNlICE9IG51bGwpIHsKLSAgICAgICAgICAgIHJlc29sdmVkSWQgPSByZXNvbHZlVVJJKG5hbWVzcGFjZSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8vIFJlc29sdmUgYWdhaW5zdCBhbiBleHRlcm5hbCBpZGVudGlmaWVyIGlmIG9uZSBleGlzdHMuIFRoaXMKLSAgICAgICAgLy8gaXMgdXNlZnVsIGZvciByZXNvbHZpbmcgRFREIGV4dGVybmFsIHN1YnNldHMgYW5kIG90aGVyIAotICAgICAgICAvLyBleHRlcm5hbCBlbnRpdGllcy4gRm9yIFhNTCBzY2hlbWFzIGlmIHRoZXJlIHdhcyBubyBuYW1lc3BhY2UgCi0gICAgICAgIC8vIG1hcHBpbmcgd2UgbWlnaHQgYmUgYWJsZSB0byByZXNvbHZlIGEgc3lzdGVtIGlkZW50aWZpZXIgCi0gICAgICAgIC8vIHNwZWNpZmllZCBhcyBhIGxvY2F0aW9uIGhpbnQuCi0gICAgICAgIGlmIChyZXNvbHZlZElkID09IG51bGwpIHsKLSAgICAgICAgICAgIFN0cmluZyBwdWJsaWNJZCA9IHJlc291cmNlSWRlbnRpZmllci5nZXRQdWJsaWNJZCgpOwotICAgICAgICAgICAgU3RyaW5nIHN5c3RlbUlkID0gZ2V0VXNlTGl0ZXJhbFN5c3RlbUlkKCkgCi0gICAgICAgICAgICAgICAgPyByZXNvdXJjZUlkZW50aWZpZXIuZ2V0TGl0ZXJhbFN5c3RlbUlkKCkKLSAgICAgICAgICAgICAgICA6IHJlc291cmNlSWRlbnRpZmllci5nZXRFeHBhbmRlZFN5c3RlbUlkKCk7Ci0gICAgICAgICAgICBpZiAocHVibGljSWQgIT0gbnVsbCAmJiBzeXN0ZW1JZCAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgcmVzb2x2ZWRJZCA9IHJlc29sdmVQdWJsaWMocHVibGljSWQsIHN5c3RlbUlkKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHN5c3RlbUlkICE9IG51bGwpIHsKLSAgICAgICAgICAgICAgICByZXNvbHZlZElkID0gcmVzb2x2ZVN5c3RlbShzeXN0ZW1JZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc29sdmVkSWQ7Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdXJpcmVzb2x2ZXIvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9WYWxpZGF0b3IuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91cmlyZXNvbHZlci92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1ZhbGlkYXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDY1MzkzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91cmlyZXNvbHZlci92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1ZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTYwICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51cmlyZXNvbHZlci52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRE9NUGFyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuU0FYUGFyc2VyOwotaW1wb3J0IG9yZy5hcGFjaGUueGVyY2VzLnV0aWwuWE1MQ2F0YWxvZ1Jlc29sdmVyOwotaW1wb3J0IG9yZy54bWwuc2F4LlNBWEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5TQVhQYXJzZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcueG1sLnNheC5oZWxwZXJzLkRlZmF1bHRIYW5kbGVyOwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yIHsKLQkKLQlwdWJsaWMgYm9vbGVhbiB2YWxpZGF0aW9uRXJyb3IgPSBmYWxzZTsKLQkKLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZVdpdGhTY2hlbWFfSkFYUChTdHJpbmcgeG1sRmlsZSwgU3RyaW5nW10gY2F0YWxvZ3MpIHsKLQkJdHJ5IHsKLQkJCVN5c3RlbS5zZXRQcm9wZXJ0eSgiamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyRmFjdG9yeSIsCi0JCQkJCSJvcmcuYXBhY2hlLnhlcmNlcy5qYXhwLkRvY3VtZW50QnVpbGRlckZhY3RvcnlJbXBsIik7Ci0JCQlEb2N1bWVudEJ1aWxkZXJGYWN0b3J5IGZhY3RvcnkgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCQlmYWN0b3J5LnNldE5hbWVzcGFjZUF3YXJlKHRydWUpOwotCQkJZmFjdG9yeS5zZXRWYWxpZGF0aW5nKHRydWUpOwotCQkJZmFjdG9yeS5zZXRBdHRyaWJ1dGUoCi0JCQkJCSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9qYXhwL3Byb3BlcnRpZXMvc2NoZW1hTGFuZ3VhZ2UiLAotCQkJCQkiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiKTsKLQkKLQkJCS8vIENyZWF0ZSBjYXRhbG9nIHJlc29sdmVyIGFuZCBzZXQgYSBjYXRhbG9nIGxpc3QuCi0JCQlYTUxDYXRhbG9nUmVzb2x2ZXIgcmVzb2x2ZXIgPSBuZXcgWE1MQ2F0YWxvZ1Jlc29sdmVyKCk7Ci0JCQlyZXNvbHZlci5zZXRQcmVmZXJQdWJsaWModHJ1ZSk7Ci0JCQlyZXNvbHZlci5zZXRDYXRhbG9nTGlzdChjYXRhbG9ncyk7Ci0JCQlmYWN0b3J5LnNldEF0dHJpYnV0ZSgKLQkJCQkJICAiaHR0cDovL2FwYWNoZS5vcmcveG1sL3Byb3BlcnRpZXMvaW50ZXJuYWwvZW50aXR5LXJlc29sdmVyIiwgCi0JCQkJCSAgcmVzb2x2ZXIpOwotCi0JCQlEb2N1bWVudEJ1aWxkZXIgYnVpbGRlciA9IGZhY3RvcnkubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCQlFcnJvckhhbmRsZXIgaGFuZGxlciA9IG5ldyBFcnJvckhhbmRsZXIodGhpcyk7Ci0JCQlidWlsZGVyLnNldEVycm9ySGFuZGxlcihoYW5kbGVyKTsKLQkJCWJ1aWxkZXIuc2V0RW50aXR5UmVzb2x2ZXIocmVzb2x2ZXIpOwotCQkJYnVpbGRlci5wYXJzZSh4bWxGaWxlKTsKLQkJCQotCQkJaWYgKHZhbGlkYXRpb25FcnJvciA9PSB0cnVlKQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiWE1MIERvY3VtZW50IGhhcyBFcnJvcjogIgotCQkJCQkJKyBoYW5kbGVyLnNheFBhcnNlRXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7Ci0JCQllbHNlCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJYTUwgRG9jdW1lbnQgaXMgdmFsaWQiKTsKLQkJfSBjYXRjaCAoamF2YS5pby5JT0V4Y2VwdGlvbiBpb2UpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSU9FeGNlcHRpb24gIiArIGlvZS5nZXRNZXNzYWdlKCkpOwotCQl9IGNhdGNoIChTQVhFeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJTQVhFeGNlcHRpb24gIiArIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfSBjYXRjaCAoUGFyc2VyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gICAgICAgICAgICAgICAgICAgICIKLQkJCQkJCQkrIGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQkKLQl9Ci0KLQkKLQlwdWJsaWMgdm9pZCB2YWxpZGF0ZVdpdGhTY2hlbWFfWGVyY2VzU0FYUGFyc2VyKFN0cmluZyBYbWxEb2N1bWVudFVybCwgU3RyaW5nIFtdIGNhdGFsb2dzKSB7Ci0JCVNBWFBhcnNlciBwYXJzZXIgPSBuZXcgU0FYUGFyc2VyKCk7Ci0JCXRyeSB7Ci0JCQlwYXJzZXIuc2V0RmVhdHVyZSgiaHR0cDovL3htbC5vcmcvc2F4L2ZlYXR1cmVzL3ZhbGlkYXRpb24iLCB0cnVlKTsKLQkJCXBhcnNlci5zZXRGZWF0dXJlKAotCQkJCQkiaHR0cDovL2FwYWNoZS5vcmcveG1sL2ZlYXR1cmVzL3ZhbGlkYXRpb24vc2NoZW1hIiwgdHJ1ZSk7Ci0JCQkKLQkJCS8vCUNyZWF0ZSBjYXRhbG9nIHJlc29sdmVyIGFuZCBzZXQgYSBjYXRhbG9nIGxpc3QuCi0JCQlYTUxDYXRhbG9nUmVzb2x2ZXIgcmVzb2x2ZXIgPSBuZXcgWE1MQ2F0YWxvZ1Jlc29sdmVyKCk7Ci0JCQlyZXNvbHZlci5zZXRVc2VMaXRlcmFsU3lzdGVtSWQodHJ1ZSk7Ci0JCQlyZXNvbHZlci5zZXRQcmVmZXJQdWJsaWModHJ1ZSk7Ci0JCQlyZXNvbHZlci5zZXRDYXRhbG9nTGlzdChjYXRhbG9ncyk7Ci0JCQkKLQkJCS8vCVNldCB0aGUgcmVzb2x2ZXIgb24gdGhlIHBhcnNlci4KLQkJCXBhcnNlci5zZXRQcm9wZXJ0eSgiaHR0cDovL2FwYWNoZS5vcmcveG1sL3Byb3BlcnRpZXMvaW50ZXJuYWwvZW50aXR5LXJlc29sdmVyIiwgCi0JCQkJCSAgcmVzb2x2ZXIpOwotCi0JCQlFcnJvckhhbmRsZXIgaGFuZGxlciA9IG5ldyBFcnJvckhhbmRsZXIodGhpcyk7Ci0JCQlwYXJzZXIuc2V0RXJyb3JIYW5kbGVyKGhhbmRsZXIpOwotCQkJCi0JCQlwYXJzZXIucGFyc2UoWG1sRG9jdW1lbnRVcmwpOwotCQkJaWYgKHZhbGlkYXRpb25FcnJvciA9PSB0cnVlKXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlhNTCBEb2N1bWVudCBoYXMgRXJyb3I6ICIKLQkJCQkJCSsgaGFuZGxlci5zYXhQYXJzZUV4Y2VwdGlvbi5nZXRNZXNzYWdlKCkpOwotCQkJCXRocm93ICBoYW5kbGVyLnNheFBhcnNlRXhjZXB0aW9uOwotCQkJfQotCQkJZWxzZXsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIlhNTCBEb2N1bWVudCBpcyB2YWxpZCIpOwotCQkJfQotCQkJCQotCQl9IGNhdGNoIChqYXZhLmlvLklPRXhjZXB0aW9uIGlvZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJJT0V4Y2VwdGlvbiAiICsgaW9lLmdldE1lc3NhZ2UoKSk7Ci0JCX0gY2F0Y2ggKFNBWEV4Y2VwdGlvbiBlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlNBWEV4Y2VwdGlvbiAiICsgZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHZhbGlkYXRlV2l0aFNjaGVtYV9YZXJjZXNET01QYXJzZXIoU3RyaW5nIFhtbERvY3VtZW50VXJsLCBTdHJpbmcgW10gY2F0YWxvZ3MpIHsKLQkJRE9NUGFyc2VyIHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTsKLQkJdHJ5IHsKLQkJCXBhcnNlci5zZXRGZWF0dXJlKCJodHRwOi8veG1sLm9yZy9zYXgvZmVhdHVyZXMvdmFsaWRhdGlvbiIsIHRydWUpOwotCQkJcGFyc2VyLnNldEZlYXR1cmUoCi0JCQkJCSJodHRwOi8vYXBhY2hlLm9yZy94bWwvZmVhdHVyZXMvdmFsaWRhdGlvbi9zY2hlbWEiLCB0cnVlKTsKLQkJCQotCQkJLy8JQ3JlYXRlIGNhdGFsb2cgcmVzb2x2ZXIgYW5kIHNldCBhIGNhdGFsb2cgbGlzdC4KLQkJCVhNTENhdGFsb2dSZXNvbHZlciByZXNvbHZlciA9IG5ldyBYTUxDYXRhbG9nUmVzb2x2ZXIoKTsKLQkJCXJlc29sdmVyLnNldFVzZUxpdGVyYWxTeXN0ZW1JZCh0cnVlKTsKLQkJCXJlc29sdmVyLnNldFByZWZlclB1YmxpYyh0cnVlKTsKLQkJCXJlc29sdmVyLnNldENhdGFsb2dMaXN0KGNhdGFsb2dzKTsKLQkJCQotCQkJLy8JU2V0IHRoZSByZXNvbHZlciBvbiB0aGUgcGFyc2VyLgotCQkJcGFyc2VyLnNldFByb3BlcnR5KCJodHRwOi8vYXBhY2hlLm9yZy94bWwvcHJvcGVydGllcy9pbnRlcm5hbC9lbnRpdHktcmVzb2x2ZXIiLCAKLQkJCQkJICByZXNvbHZlcik7Ci0KLQkJCUVycm9ySGFuZGxlciBoYW5kbGVyID0gbmV3IEVycm9ySGFuZGxlcih0aGlzKTsKLQkJCXBhcnNlci5zZXRFcnJvckhhbmRsZXIoaGFuZGxlcik7Ci0JCQkKLQkJCXBhcnNlci5wYXJzZShYbWxEb2N1bWVudFVybCk7Ci0JCQlpZiAodmFsaWRhdGlvbkVycm9yID09IHRydWUpewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiWE1MIERvY3VtZW50IGhhcyBFcnJvcjogIgotCQkJCQkJKyBoYW5kbGVyLnNheFBhcnNlRXhjZXB0aW9uLmdldE1lc3NhZ2UoKSk7Ci0JCQkJdGhyb3cgIGhhbmRsZXIuc2F4UGFyc2VFeGNlcHRpb247Ci0JCQl9Ci0JCQllbHNlewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiWE1MIERvY3VtZW50IGlzIHZhbGlkIik7Ci0JCQl9Ci0JCQkJCi0JCX0gY2F0Y2ggKGphdmEuaW8uSU9FeGNlcHRpb24gaW9lKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIklPRXhjZXB0aW9uICIgKyBpb2UuZ2V0TWVzc2FnZSgpKTsKLQkJfSBjYXRjaCAoU0FYRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiU0FYRXhjZXB0aW9uICIgKyBlLmdldE1lc3NhZ2UoKSk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIGNsYXNzIEVycm9ySGFuZGxlciBleHRlbmRzIERlZmF1bHRIYW5kbGVyIHsKLQotCQlWYWxpZGF0b3IgdmFsaWRhdG9yOwotCi0JCXB1YmxpYyBTQVhQYXJzZUV4Y2VwdGlvbiBzYXhQYXJzZUV4Y2VwdGlvbiA9IG51bGw7Ci0KLQkJcHVibGljIEVycm9ySGFuZGxlcihWYWxpZGF0b3IgdmFsaWRhdG9yKSB7Ci0JCQlzdXBlcigpOwotCQkJdGhpcy52YWxpZGF0b3IgPSB2YWxpZGF0b3I7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBlcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBTQVhFeGNlcHRpb24gewotCQkJdmFsaWRhdGlvbkVycm9yID0gdHJ1ZTsKLQkJCXNheFBhcnNlRXhjZXB0aW9uID0gZXhjZXB0aW9uOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgZmF0YWxFcnJvcihTQVhQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBTQVhFeGNlcHRpb24gewotCQkJdmFsaWRhdGlvbkVycm9yID0gdHJ1ZTsKLQkJCXNheFBhcnNlRXhjZXB0aW9uID0gZXhjZXB0aW9uOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgd2FybmluZyhTQVhQYXJzZUV4Y2VwdGlvbiBleGNlcHRpb24pIHRocm93cyBTQVhFeGNlcHRpb24gewotCQl9Ci0JfQotCi0JCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VyaXJlc29sdmVyL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvVmFsaWRhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VyaXJlc29sdmVyL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Yjg0Y2FmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91cmlyZXNvbHZlci92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1ZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudXJpcmVzb2x2ZXIudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMuaW50ZXJuYWwuVGVzdFBsdWdpbjsKLQotLyoqCi0gKiBUbyBydW4gdGhpcyB0ZXN0IG5lZWQgdG8gYWRkIHJlc29sdmVyLmphciB0byB0aGUgY2xhc3NwYXRoLgotICogUnVuIGFzIEpVbml0IFBsdWdpbiB0ZXN0OgotICogLSBwdXQgcmVzb2x2ZXIuamFyIG9uIHRoZSBib290IGNsYXNzIHBhdGgKLSAqIC0gYWRkIFZNIGFyZ3VtZW50OgotICogCi0gKiAtWGJvb3RjbGFzc3BhdGgvcDo8aW5zdGFsbCBsb2NhdGlvbj5canJlXGxpYlxleHRccmVzb2x2ZXIuamFyCi0gKgotICoKLSAqLwotcHVibGljIGNsYXNzIFZhbGlkYXRvclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JCi0JVmFsaWRhdG9yIHZhbGlkYXRvciA9IG51bGw7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQl2YWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yKCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIudGVhckRvd24oKTsKLQl9Ci0KLQlwdWJsaWMgVmFsaWRhdG9yVGVzdChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0JCi0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRpbmdYZXJjZXNTQVhQYXJzZXIxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHhtbEZpbGUgPSAiL2RhdGEvUGVyc29uYWwvcGVyc29uYWwtc2NoZW1hLnhtbCI7Ci0JCXhtbEZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbih4bWxGaWxlKTsKLQkJCi0JCVN0cmluZyBjYXRhbG9nRmlsZSA9ICIvZGF0YS9jYXRhbG9nMi54bWwiOwotCQljYXRhbG9nRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKGNhdGFsb2dGaWxlKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tIiArIHRoaXMuZ2V0TmFtZSgpICsgIi0tLS0tLS0tLSIpOwotCQl2YWxpZGF0b3IudmFsaWRhdGVXaXRoU2NoZW1hX1hlcmNlc1NBWFBhcnNlcih4bWxGaWxlLCBuZXcgU3RyaW5nW117Y2F0YWxvZ0ZpbGV9KTsKLQkJYXNzZXJ0RmFsc2UodmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvcik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0aW5nWGVyY2VzU0FYUGFyc2VyMigpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyB4bWxGaWxlID0gIi9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEueG1sIjsKLQkJeG1sRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKHhtbEZpbGUpOwotCQkKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2V4YW1wbGUtY2F0YWxvZy54bWwiOwotCQljYXRhbG9nRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKGNhdGFsb2dGaWxlKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tIiArIHRoaXMuZ2V0TmFtZSgpICsgIi0tLS0tLS0tLSIpOwotCQl2YWxpZGF0b3IudmFsaWRhdGVXaXRoU2NoZW1hX1hlcmNlc1NBWFBhcnNlcih4bWxGaWxlLCBuZXcgU3RyaW5nW117Y2F0YWxvZ0ZpbGV9KTsKLQkJYXNzZXJ0RmFsc2UodmFsaWRhdG9yLnZhbGlkYXRpb25FcnJvcik7Ci0JfQotCXB1YmxpYyB2b2lkIHRlc3RWYWxpYXRpbmdYZXJjZXNTQVhQYXJzZXIzKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHhtbEZpbGUgPSAiL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS1ub25hbWVzcGFjZS54bWwiOwotCQl4bWxGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oeG1sRmlsZSk7Ci0JCQotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvZXhhbXBsZS1jYXRhbG9nLnhtbCI7Ci0JCWNhdGFsb2dGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oY2F0YWxvZ0ZpbGUpOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0iICsgdGhpcy5nZXROYW1lKCkgKyAiLS0tLS0tLS0tIik7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZVdpdGhTY2hlbWFfWGVyY2VzU0FYUGFyc2VyKHhtbEZpbGUsIG5ldyBTdHJpbmdbXXtjYXRhbG9nRmlsZX0pOwotCQlhc3NlcnRGYWxzZSh2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRpbmdYZXJjZXNET01QYXJzZXIxKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIHhtbEZpbGUgPSAiL2RhdGEvZXhhbXBsZS9leGFtcGxlLXNjaGVtYS1ub25hbWVzcGFjZS54bWwiOwotCQl4bWxGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oeG1sRmlsZSk7Ci0JCQotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvZXhhbXBsZS1jYXRhbG9nLnhtbCI7Ci0JCWNhdGFsb2dGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oY2F0YWxvZ0ZpbGUpOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0iICsgdGhpcy5nZXROYW1lKCkgKyAiLS0tLS0tLS0tIik7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZVdpdGhTY2hlbWFfWGVyY2VzRE9NUGFyc2VyKHhtbEZpbGUsIG5ldyBTdHJpbmdbXXtjYXRhbG9nRmlsZX0pOwotCQlhc3NlcnRGYWxzZSh2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRpbmdKQVhQUGFyc2VyMSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyB4bWxGaWxlID0gIi9kYXRhL2V4YW1wbGUvZXhhbXBsZS1zY2hlbWEueG1sIjsKLQkJeG1sRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKHhtbEZpbGUpOwotCQkKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIi9kYXRhL2V4YW1wbGUtY2F0YWxvZy54bWwiOwotCQljYXRhbG9nRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKGNhdGFsb2dGaWxlKTsKLQkJCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiLS0tLS0tLS0tIiArIHRoaXMuZ2V0TmFtZSgpICsgIi0tLS0tLS0tLSIpOwotCQl2YWxpZGF0b3IudmFsaWRhdGVXaXRoU2NoZW1hX0pBWFAoeG1sRmlsZSwgbmV3IFN0cmluZ1tde2NhdGFsb2dGaWxlfSk7CQotCQlhc3NlcnRGYWxzZSh2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRpb25XaXRoSW1wb3J0ZWRBbmRJbmNsdWRlZFNjaGVtYTEoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgeG1sRmlsZSA9ICIvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54bWwiOwotCQl4bWxGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oeG1sRmlsZSk7Ci0JCQotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvcmVwb3J0LWNhdGFsb2dfc3lzdGVtLnhtbCI7Ci0JCWNhdGFsb2dGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oY2F0YWxvZ0ZpbGUpOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0iICsgdGhpcy5nZXROYW1lKCkgKyAiLS0tLS0tLS0tIik7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZVdpdGhTY2hlbWFfWGVyY2VzRE9NUGFyc2VyKHhtbEZpbGUsIG5ldyBTdHJpbmdbXXtjYXRhbG9nRmlsZX0pOwotCQkvLyBJbmNsdWRlZCBzY2hlbWEgd2lsbCBiZSByZXNvbHZlZAotCQlhc3NlcnRGYWxzZSh2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRpb25XaXRoSW1wb3J0ZWRBbmRJbmNsdWRlZFNjaGVtYTIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgeG1sRmlsZSA9ICIvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54bWwiOwotCQl4bWxGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oeG1sRmlsZSk7Ci0JCQotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvcmVwb3J0LWNhdGFsb2dfcHVibGljLnhtbCI7Ci0JCWNhdGFsb2dGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oY2F0YWxvZ0ZpbGUpOwotCQkKLQkJU3lzdGVtLm91dC5wcmludGxuKCItLS0tLS0tLS0iICsgdGhpcy5nZXROYW1lKCkgKyAiLS0tLS0tLS0tIik7Ci0JCXZhbGlkYXRvci52YWxpZGF0ZVdpdGhTY2hlbWFfWGVyY2VzRE9NUGFyc2VyKHhtbEZpbGUsIG5ldyBTdHJpbmdbXXtjYXRhbG9nRmlsZX0pOwotCQkvLyBJbmNsdWRlZCBzY2hlbWEgd2lsbCBub3QgYmUgcmVzb2x2ZWQKLQkJYXNzZXJ0VHJ1ZSh2YWxpZGF0b3IudmFsaWRhdGlvbkVycm9yKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFZhbGlkYXRpb25XaXRoSW1wb3J0ZWRBbmRJbmNsdWRlZFNjaGVtYTMoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgeG1sRmlsZSA9ICIvZGF0YS9QdXJjaGFzZU9yZGVyL2ludGVybmF0aW9uYWwvcmVwb3J0Xy54bWwiOwotCQl4bWxGaWxlID0gVGVzdFBsdWdpbi5yZXNvbHZlUGx1Z2luTG9jYXRpb24oeG1sRmlsZSk7Ci0JCQotCQlTdHJpbmcgY2F0YWxvZ0ZpbGUgPSAiL2RhdGEvcmVwb3J0LWNhdGFsb2dfbWFwcGVkaW5jbHVkZWQueG1sIjsKLQkJY2F0YWxvZ0ZpbGUgPSBUZXN0UGx1Z2luLnJlc29sdmVQbHVnaW5Mb2NhdGlvbihjYXRhbG9nRmlsZSk7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLSIgKyB0aGlzLmdldE5hbWUoKSArICItLS0tLS0tLS0iKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlV2l0aFNjaGVtYV9YZXJjZXNET01QYXJzZXIoeG1sRmlsZSwgbmV3IFN0cmluZ1tde2NhdGFsb2dGaWxlfSk7Ci0JCS8vIEluY2x1ZGVkIHNjaGVtYSB3aWxsIG5vdCBiZSByZXNvbHZlZAotCQlhc3NlcnRUcnVlKHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGlvbldpdGhJbXBvcnRlZFNjaGVtYU5vQ2F0YWxvZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyB4bWxGaWxlID0gIi9kYXRhL1B1cmNoYXNlT3JkZXIvaW50ZXJuYXRpb25hbC9yZXBvcnQueG1sIjsKLQkJeG1sRmlsZSA9IFRlc3RQbHVnaW4ucmVzb2x2ZVBsdWdpbkxvY2F0aW9uKHhtbEZpbGUpOwotCQkKLQkJU3RyaW5nIGNhdGFsb2dGaWxlID0gIiI7Ci0JCQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLSIgKyB0aGlzLmdldE5hbWUoKSArICItLS0tLS0tLS0iKTsKLQkJdmFsaWRhdG9yLnZhbGlkYXRlV2l0aFNjaGVtYV9YZXJjZXNET01QYXJzZXIoeG1sRmlsZSwgbmV3IFN0cmluZ1tde2NhdGFsb2dGaWxlfSk7Ci0JCWFzc2VydEZhbHNlKHZhbGlkYXRvci52YWxpZGF0aW9uRXJyb3IpOwotCX0KLQkKLQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNhdGFsb2cudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiMzg0YzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jYXRhbG9nLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci0KLTxwcm9qZWN0IG5hbWU9InRlc3RzdWl0ZSIgZGVmYXVsdD0icnVuIiBiYXNlZGlyPSIuIj4KLQotICA8IS0tIENvbmZpZ3VyYWJsZSBQcm9wZXJ0aWVzIC0tPgotCi0gIDwhLS0gc2V0cyB0aGUgcHJvcGVydGllcyBlY2xpcHNlLWhvbWUsIGFuZCBsaWJyYXJ5LWZpbGUgLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJwbHVnaW4tbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cyIvPgotCi0gIDwhLS0gRW5kIENvbmZpZ3VyYWJsZSBQcm9wZXJ0aWVzIC0tPgotCi0gIDwhLS0gVGhlIHByb3BlcnR5ICR7ZWNsaXBzZS1ob21lfSBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gIDwhLS0gU2V0IGEgbWVhbmluZ2Z1bCBkZWZhdWx0IHZhbHVlIGZvciB3aGVuIGl0IGlzIG5vdC4gLS0+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJlY2xpcHNlLWhvbWUiIHZhbHVlPSIke2Jhc2VkaXJ9XC4uXC4uIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJidnR3b3Jrc3BhY2UiIHZhbHVlPSIke2Jhc2VkaXJ9Ii8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJsaWJyYXJ5LWZpbGUiIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIi8+Ci0gIDxwcm9wZXJ0eSBuYW1lPSJ3b3Jrc3BhY2UtZm9sZGVyIiB2YWx1ZT0iJHtidnR3b3Jrc3BhY2V9LyR7cGx1Z2luLW5hbWV9Ii8+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICA8dHN0YW1wLz4KLSAgICAgPGRlbGV0ZT4KLSAgICAgICA8ZmlsZXNldCBkaXI9IiR7ZWNsaXBzZS1ob21lfSIgaW5jbHVkZXM9Im9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy4qLnhtbCIvPgotICAgIDwvZGVsZXRlPgotICA8L3RhcmdldD4KLQotICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgIDwhLS0gU3RhcnQgd2l0aCBjbGVhbiBkYXRhIHdvcmtzcGFjZSAtLT4gIAotICAgIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZS1mb2xkZXJ9IiBxdWlldD0idHJ1ZSIvPgotCi0gICAgPGFudCB0YXJnZXQ9ImNvcmUtdGVzdCIgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IiBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0iZGF0YS1kaXIiIHZhbHVlPSIke3dvcmtzcGFjZS1mb2xkZXJ9Ii8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0icGx1Z2luLW5hbWUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIvPgotICAgICAgPHByb3BlcnR5IG5hbWU9ImNsYXNzbmFtZSIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cy5pbnRlcm5hbC5BbGxUZXN0cyIvPgotICAgIDwvYW50PgotCi0gIDwvdGFyZ2V0PgotCi0gIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2UtZm9sZGVyfSIgcXVpZXQ9InRydWUiLz4KLSAgPC90YXJnZXQ+Ci0KLSAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gIDx0YXJnZXQgbmFtZT0icnVuIiBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgIDxhbnQgdGFyZ2V0PSJjb2xsZWN0IiBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgIDxwcm9wZXJ0eSBuYW1lPSJpbmNsdWRlcyIgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwuY2F0YWxvZy50ZXN0cyoueG1sIi8+Ci0gICAgICA8cHJvcGVydHkgbmFtZT0ib3V0cHV0LWZpbGUiIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiLz4KLSAgICA8L2FudD4KLSAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5OTU4NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDRlYTVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXNzZW1vZGVseG1sdGVzdHMuamFyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZmZiYTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2JhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNTIyYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWE4ZTY2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzOyBzaW5nbGV0b246PXRydWUKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMTAwLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogc3NlbW9kZWx4bWx0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5TU0VNb2RlbFhNTFRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQudGVzdDt4LWludGVybmFsOj10cnVlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cywKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9tLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmZvcm1hdC50ZXN0ZmlsZXMueG1sLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5tb2RlbCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudGV4dCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudGV4dC50ZXN0ZmlsZXMueG1sLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UudWksCi0gb3JnLmVjbGlwc2UudWkuaWRlLAotIG9yZy5lY2xpcHNlLnRleHQsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLAotIGNvbS5pYm0uaWN1Ci1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjNTk4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFhZTkyNjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc291cmNlLnNzZW1vZGVseG1sdGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnNzZW1vZGVseG1sdGVzdHMuamFyID0gYmluLwotYmluLmluY2x1ZGVzID0gcGx1Z2luLnhtbCxcCi0gICAgICAgICAgICAgICBzc2Vtb2RlbHhtbHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0ZmlsZXMuemlwLFwKLSAgICAgICAgICAgICAgIHByb2plY3R0ZXN0ZmlsZXMvLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zcmMuaW5jbHVkZXMgPSBidWlsZC5wcm9wZXJ0aWVzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4MDhhNWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jIHByb3BlcnRpZXMgZmlsZSBmb3Igb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzCi1CdW5kbGUtVmVuZG9yLjAgPSBFY2xpcHNlLm9yZwotQnVuZGxlLU5hbWUuMCA9IFNTRSBNb2RlbCBYTUwgVGVzdHMKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcGx1Z2luLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2YxYThjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9wbHVnaW4ueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTw/ZWNsaXBzZSB2ZXJzaW9uPSIzLjAiPz4KLTxwbHVnaW4+Ci0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnRUeXBlcyI+Ci0JCTwhLS0gYXNzb2NpYXRlIC5mcmFneCBmaWxlcyB3aXRoIHRoZSBYTUwgY29udGVudCB0eXBlIC0tPgotCQk8ZmlsZS1hc3NvY2lhdGlvbgotCQkJY29udGVudC10eXBlPSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIgotCQkJZmlsZS1leHRlbnNpb25zPSJmcmFneCIgLz4KLQk8L2V4dGVuc2lvbj4KLQotCTxleHRlbnNpb24KLQkJaWQ9IlRlc3QiCi0JCXBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuYXBwbGljYXRpb25zIj4KLQkJPGFwcGxpY2F0aW9uPgotCQkJPHJ1bgotCQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsLkNNVmlzaXRvclRlc3QiIC8+Ci0JCTwvYXBwbGljYXRpb24+Ci0JPC9leHRlbnNpb24+Ci0KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Byb2plY3R0ZXN0ZmlsZXMveG1sLWRvY3VtZW50LWxvYWRlci10ZXN0cy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy94bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjgzYWQ2Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvcHJvamVjdHRlc3RmaWxlcy94bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL2RvY3VtZW50L3Rlc3QvTm9kZUltcGxUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvZG9jdW1lbnQvdGVzdC9Ob2RlSW1wbFRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0N2RjY2YuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvZG9jdW1lbnQvdGVzdC9Ob2RlSW1wbFRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiAKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBCYWxhenMgQmFuZmFpOiBCdWcgMTU0NzM3IGdldFVzZXJEYXRhL3NldFVzZXJEYXRhIHN1cHBvcnQgZm9yIE5vZGUKLSAqICAgICBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTU0NzM3Ci0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC50ZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5BdHRySW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQuRE9NTW9kZWxJbXBsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5kb2N1bWVudC5Ob2RlSW1wbDsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5FbGVtZW50OwotaW1wb3J0IG9yZy53M2MuZG9tLk5vZGU7Ci1pbXBvcnQgb3JnLnczYy5kb20uVXNlckRhdGFIYW5kbGVyOwotCi0KLXB1YmxpYyBjbGFzcyBOb2RlSW1wbFRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIENhc3RzIHRvIGltcGxlbWVudGF0aW9uIGNsYXNzZXMgYmVjYXVzZSB0aGUgaW50ZXJmYWNlIG1ldGhvZHMgYmVpbmcKLQkgKiB0aGVyZSBpc24ndCB0aGUgaW50ZXJlc3RpbmcgcGFydCwganVzdCB3aGV0aGVyIG91ciBiZWhhdmlvciB3aXRoIHRob3NlCi0JICogbWV0aG9kcyBpcyBjb3JyZWN0LgotCSAqLwkKLQotCU5vZGVJbXBsIGVsZW1lbnQ7Ci0JQXR0ckltcGwgYXR0cmlidXRlOwotCU5vZGVJbXBsIGRlc3RpbmF0aW9uTm9kZTsKLQlEb2N1bWVudCBkb2N1bWVudDsKLQkKLQlFbGVtZW50IGVsZW1lbnRUb0ltcG9ydDsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgS0VZPSJrZXkiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBWQUxVRT0idmFsdWUiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBLRVkyPSJrZXkyIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMVUUyPSJ2YWx1ZTIiOwotCQotCQotCS8qKgotICAgICAqIFNldHMgdXAgdGhlIHRlc3QgZml4dHVyZS4gCi0gICAgICogKENhbGxlZCBiZWZvcmUgZXZlcnkgdGVzdCBjYXNlIG1ldGhvZC4pIAotICAgICAqLyAKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHsgCi0gICAgICAgIAotICAgIAlET01Nb2RlbEltcGwgbW9kZWwgPSBuZXcgRE9NTW9kZWxJbXBsKCk7Ci0gICAgCWRvY3VtZW50ID0gbW9kZWwuZ2V0RG9jdW1lbnQoKTsKLSAgICAJZWxlbWVudCA9IChOb2RlSW1wbClkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXN0ZWxlbWVudCIpOwotICAgIAlhdHRyaWJ1dGUgPSAoQXR0ckltcGwpZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCJhdHRyaWJ1dGUiKTsKLSAgICB9IAotCQotICAgIC8qCi0gICAgICogVGVzdCBmb3IgbnVsbDsKLSAgICAgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VXNlckRhdGEwKCkgewotCQlhc3NlcnRFcXVhbHMobnVsbCwgZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQkJYXNzZXJ0RXF1YWxzKG51bGwsIGVsZW1lbnQuZ2V0VXNlckRhdGEobnVsbCkpOwotCX0KLSAgICAKLQkvKgotCSAqIFRlc3QgZm9yIG9uZSBrZXkvdmFsdWUKLQkgKi8KLSAgICBwdWJsaWMgdm9pZCB0ZXN0R2V0VXNlckRhdGExKCkgewotCQllbGVtZW50LnNldFVzZXJEYXRhKEtFWSwgVkFMVUUsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoVkFMVUUsZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQkJYXNzZXJ0RXF1YWxzKG51bGwsIGF0dHJpYnV0ZS5nZXRVc2VyRGF0YShLRVkpKTsKLQl9Ci0JCi0gICAgLyoKLSAgICAgKiBUZXN0IGZvciBtdWx0aXBsZSBub2RlcwotICAgICAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRVc2VyRGF0YTIoKSB7Ci0JCWVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhWQUxVRSxlbGVtZW50LmdldFVzZXJEYXRhKEtFWSkpOwotCQlhdHRyaWJ1dGUuc2V0VXNlckRhdGEoS0VZMiwgVkFMVUUyLCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKFZBTFVFMixhdHRyaWJ1dGUuZ2V0VXNlckRhdGEoS0VZMikpOwotCX0KLQkKLQkvKgotCSAqIFRlc3QgZm9yIG11bHRpcGxlIGtleXMKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VXNlckRhdGEzKCkgewotCQllbGVtZW50LnNldFVzZXJEYXRhKEtFWSwgVkFMVUUsIG51bGwpOwotCQllbGVtZW50LnNldFVzZXJEYXRhKEtFWTIsIFZBTFVFMiwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhWQUxVRSxlbGVtZW50LmdldFVzZXJEYXRhKEtFWSkpOwotCQlhc3NlcnRFcXVhbHMoVkFMVUUyLGVsZW1lbnQuZ2V0VXNlckRhdGEoS0VZMikpOwotCX0KLQotCS8qCi0JICogVGVzdCBmb3IgbnVsbCBrZXkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0VXNlckRhdGExKCkgewotCQlhc3NlcnRFcXVhbHMobnVsbCwgZWxlbWVudC5zZXRVc2VyRGF0YShudWxsLCBWQUxVRSwgbnVsbCkpOwotCX0KLQotCS8qCi0JICogVGVzdCBmb3IgbnVsbCBkYXRhIHdpdGggbm8gcHJldmlvdXMgdmFsdWUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0VXNlckRhdGEyKCkgewotCQlhc3NlcnRFcXVhbHMobnVsbCwgZWxlbWVudC5zZXRVc2VyRGF0YShLRVksIG51bGwsIG51bGwpKTsKLQl9Ci0JCi0JLyoKLQkgKiBUZXN0IGZvciBvdmVyd3JpdGluZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTZXRVc2VyRGF0YTMoKSB7Ci0JCWVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbnVsbCk7Ci0JCWVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBWQUxVRTIsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMoVkFMVUUyLCBlbGVtZW50LmdldFVzZXJEYXRhKEtFWSkpOwotCX0KLQkKLQkvKiAKLQkgKiBUZXN0IGZvciBkZWxldGluZwotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTZXRVc2VyRGF0YTQoKSB7Ci0JCWVsZW1lbnQuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhWQUxVRSwgZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQkJZWxlbWVudC5zZXRVc2VyRGF0YShLRVksIG51bGwsIG51bGwpOwotCQlhc3NlcnRFcXVhbHMobnVsbCwgZWxlbWVudC5nZXRVc2VyRGF0YShLRVkpKTsKLQl9Ci0JCi0JLyoKLQkgKiBUZXN0IGZvciBub3RpZnlpbmcgdGhlIFVzZXJEYXRhSGFuZGxlcj1udWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vdGlmeVVzZXJEYXRhSGFuZGxlcjAoKSB7Ci0JCQotCQlhdHRyaWJ1dGUuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbnVsbCk7Ci0JCWRlc3RpbmF0aW9uTm9kZT0oTm9kZUltcGwpYXR0cmlidXRlLmNsb25lTm9kZSh0cnVlKTsKLQl9Ci0JCi0JLyoKLQkgKiBUZXN0IGZvciBub3RpZnlpbmcgdGhlIFVzZXJEYXRhSGFuZGxlciB3aGVuIGNsb25pbmcgYW4gYXR0cmlidXRlCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vdGlmeVVzZXJEYXRhSGFuZGxlcjEoKSB7Ci0JCQotCQlhdHRyaWJ1dGUuc2V0VXNlckRhdGEoS0VZLCBWQUxVRSwgbmV3IFVzZXJEYXRhSGFuZGxlcigpewotCi0JCQlwdWJsaWMgdm9pZCBoYW5kbGUoc2hvcnQgb3BlcmF0aW9uLCBTdHJpbmcga2V5LCBPYmplY3QgZGF0YSwgTm9kZSBzcmMsIE5vZGUgZHN0KSB7Ci0JCQkJYXNzZXJ0RXF1YWxzKFVzZXJEYXRhSGFuZGxlci5OT0RFX0NMT05FRCwgb3BlcmF0aW9uKTsKLQkJCQlhc3NlcnRFcXVhbHMoVkFMVUUsIGRhdGEpOwotCQkJCWFzc2VydEVxdWFscyhLRVksIGtleSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKHNyYywgYXR0cmlidXRlKTsgCi0JCQkJCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJPcGVyYXRpb246ICIrb3BlcmF0aW9uKyIgS2V5OiIrIGtleSAKLQkJCQkJCSsgIiBPYmplY3Q6IitkYXRhKyIgU291cmNlTm9kZToiK3NyYy5nZXRMb2NhbE5hbWUoKSsiIERlc3RpbmF0aW9uTm9kZToiK2RzdC5nZXRMb2NhbE5hbWUoKSk7Ci0JCQkJCi0JCQl9Ci0JCX0pOwotCQkvL2V2ZW50IG9jY3VycyBiZWZvcmUgdGhlIGRlc3RpbmF0aW9uTm9kZSByZXR1cm5zLi4uLgotCQlkZXN0aW5hdGlvbk5vZGU9KEF0dHJJbXBsKWF0dHJpYnV0ZS5jbG9uZU5vZGUodHJ1ZSk7Ci0JfQotCQotCS8qCi0JICogVGVzdCBmb3Igbm90aWZ5aW5nIHRoZSBVc2VyRGF0YUhhbmRsZXIgd2hlbiBpbXBvcnRpbmcKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm90aWZ5VXNlckRhdGFIYW5kbGVyMigpIHsKLSAgICAJZWxlbWVudFRvSW1wb3J0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiRWxlbWVudFRvSW1wb3J0Iik7Ci0gICAgCSgoTm9kZUltcGwpZWxlbWVudFRvSW1wb3J0KS5zZXRVc2VyRGF0YShLRVksIFZBTFVFLCBuZXcgVXNlckRhdGFIYW5kbGVyKCl7Ci0KLQkJCXB1YmxpYyB2b2lkIGhhbmRsZShzaG9ydCBvcGVyYXRpb24sIFN0cmluZyBrZXksIE9iamVjdCBkYXRhLCBOb2RlIHNyYywgTm9kZSBkc3QpIHsKLQotCQkJCS8vc2VlIGlmIE5PREUuSU1QT1JURUQgbm90aWZpY2F0aW9uIG9jY3VycyB3aXRoIHRoZSByaWdodAotCQkJCS8vcGFyYW1ldGVycwotCQkJCWlmIChvcGVyYXRpb249PVVzZXJEYXRhSGFuZGxlci5OT0RFX0lNUE9SVEVEKSB7CQotCQkJCWFzc2VydEVxdWFscyhWQUxVRSwgZGF0YSk7Ci0JCQkJYXNzZXJ0RXF1YWxzKEtFWSwga2V5KTsKLQkJCQlhc3NlcnRFcXVhbHMoc3JjLCBlbGVtZW50VG9JbXBvcnQpOwotCQkJCWFzc2VydEVxdWFscyhkc3QsIG51bGwpOyAgCi0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJPcGVyYXRpb246ICIrb3BlcmF0aW9uKyIgS2V5OiIrIGtleSAKLQkJCQkJCSsgIiBPYmplY3Q6IitkYXRhKyIgU291cmNlTm9kZToiK3NyYy5nZXRMb2NhbE5hbWUoKSsiIERlc3RpbmF0aW9uTm9kZToiK2RzdCk7Ci0JCQkJfQotCQkJfQotCQl9KTsKLQkJZG9jdW1lbnQuaW1wb3J0Tm9kZShlbGVtZW50VG9JbXBvcnQsIHRydWUpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL0xvZ2dlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMmM0MDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvTG9nZ2VyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMiOyAvLyROT04tTkxTLTEkCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRSQUNFRklMVEVSX0xPQ0FUSU9OID0gIi9kZWJ1Zy90cmFjZWZpbHRlciI7IC8vJE5PTi1OTFMtMSQKLQotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IE9LID0gSVN0YXR1cy5PSzsgLy8gMAotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk8gPSBJU3RhdHVzLklORk87IC8vIDEKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HID0gSVN0YXR1cy5XQVJOSU5HOyAvLyAyCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1IgPSBJU3RhdHVzLkVSUk9SOyAvLyA0Ci0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPS19ERUJVRyA9IDIwMCArIE9LOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IElORk9fREVCVUcgPSAyMDAgKyBJTkZPOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFdBUk5JTkdfREVCVUcgPSAyMDAgKyBXQVJOSU5HOwotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0RFQlVHID0gMjAwICsgRVJST1I7Ci0KLQkvKioKLQkgKiBBZGRzIG1lc3NhZ2UgdG8gbG9nLgotCSAqIEBwYXJhbSBsZXZlbCBzZXZlcml0eSBsZXZlbCBvZiB0aGUgbWVzc2FnZSAoT0ssIElORk8sIFdBUk5JTkcsIEVSUk9SLCBPS19ERUJVRywgSU5GT19ERUJVRywgV0FSTklOR19ERUJVRywgRVJST1JfREVCVUcpCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBhZGQgdG8gdGhlIGxvZwotCSAqIEBwYXJhbSBleGNlcHRpb24gZXhjZXB0aW9uIHRocm93bgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGxldmVsID09IE9LX0RFQlVHIHx8IGxldmVsID09IElORk9fREVCVUcgfHwgbGV2ZWwgPT0gV0FSTklOR19ERUJVRyB8fCBsZXZlbCA9PSBFUlJPUl9ERUJVRykgewotCQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJCXJldHVybjsKLQkJfQotCi0JCWludCBzZXZlcml0eSA9IElTdGF0dXMuT0s7Ci0JCXN3aXRjaCAobGV2ZWwpIHsKLQkJCWNhc2UgSU5GT19ERUJVRyA6Ci0JCQljYXNlIElORk8gOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5JTkZPOwotCQkJCWJyZWFrOwotCQkJY2FzZSBXQVJOSU5HX0RFQlVHIDoKLQkJCWNhc2UgV0FSTklORyA6Ci0JCQkJc2V2ZXJpdHkgPSBJU3RhdHVzLldBUk5JTkc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEVSUk9SX0RFQlVHIDoKLQkJCWNhc2UgRVJST1IgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5FUlJPUjsKLQkJfQotCQltZXNzYWdlID0gKG1lc3NhZ2UgIT0gbnVsbCkgPyBtZXNzYWdlIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0JCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKHNldmVyaXR5LCBQTFVHSU5fSUQsIHNldmVyaXR5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKFBMVUdJTl9JRCk7Ci0JCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQotCX0KLQotCS8qKgotCSAqIFByaW50cyBtZXNzYWdlIHRvIGxvZyBpZiBjYXRlZ29yeSBtYXRjaGVzIC9kZWJ1Zy90cmFjZWZpbHRlciBvcHRpb24uCi0JICogQHBhcmFtIG1lc3NhZ2UgdGV4dCB0byBwcmludAotCSAqIEBwYXJhbSBjYXRlZ29yeSBjYXRlZ29yeSBvZiB0aGUgbWVzc2FnZSwgdG8gYmUgY29tcGFyZWQgd2l0aCAvZGVidWcvdHJhY2VmaWx0ZXIKLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX3RyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJaWYgKGlzVHJhY2luZyhjYXRlZ29yeSkpIHsKLQkJCW1lc3NhZ2UgPSAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAibnVsbCI7IC8vJE5PTi1OTFMtMSQKLQkJCVN0YXR1cyBzdGF0dXNPYmogPSBuZXcgU3RhdHVzKElTdGF0dXMuT0ssIFBMVUdJTl9JRCwgSVN0YXR1cy5PSywgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoUExVR0lOX0lEKTsKLQkJCWlmIChidW5kbGUgIT0gbnVsbCkgCi0JCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0KLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRCArIFRSQUNFRklMVEVSX0xPQ0FUSU9OKTsKLQkJaWYgKHRyYWNlRmlsdGVyICE9IG51bGwpIHsKLQkJCVN0cmluZ1Rva2VuaXplciB0b2tlbml6ZXIgPSBuZXcgU3RyaW5nVG9rZW5pemVyKHRyYWNlRmlsdGVyLCAiLCIpOyAvLyROT04tTkxTLTEkCi0JCQl3aGlsZSAodG9rZW5pemVyLmhhc01vcmVUb2tlbnMoKSkgewotCQkJCVN0cmluZyBjYXQgPSB0b2tlbml6ZXIubmV4dFRva2VuKCkudHJpbSgpOwotCQkJCWlmIChjYXRlZ29yeS5lcXVhbHMoY2F0KSkgewotCQkJCQlyZXR1cm4gdHJ1ZTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSkgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nKGludCBsZXZlbCwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhsZXZlbCwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZ0V4Y2VwdGlvbihUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCV9sb2coRVJST1IsIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZUV4Y2VwdGlvbihTdHJpbmcgY2F0ZWdvcnksIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBleGNlcHRpb24uZ2V0TWVzc2FnZSgpLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCB0cmFjZShTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV90cmFjZShjYXRlZ29yeSwgbWVzc2FnZSwgbnVsbCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1NTRU1vZGVsWE1MVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9TU0VNb2RlbFhNTFRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTk5ZGZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1NTRU1vZGVsWE1MVGVzdFN1aXRlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZG9jdW1lbnQudGVzdC5Ob2RlSW1wbFRlc3RDYXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWwuVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50LkdldERvY3VtZW50UmVnaW9uc1Rlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50LlRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50LlRlc3RYTUxEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQuVHJhbnNpdGlvblRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb20uTmFtZVZhbGlkYXRvclRlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5mb3JtYXQuVGVzdEZvcm1hdFByb2Nlc3NvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdE1vZGVsc0Zyb21GaWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdFN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMubW9kZWwuVGVzdFhNTE1vZGVsTG9hZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy50ZXh0LlRlc3RTdHJ1Y3R1cmVkUGFydGl0aW9uZXJYTUw7Ci0KLQotCi1wdWJsaWMgY2xhc3MgU1NFTW9kZWxYTUxUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBTU0VNb2RlbFhNTFRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBTU0VNb2RlbFhNTFRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIlRlc3QgU3VpdGUgZm9yIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cyIpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdE1vZGVsc0Zyb21GaWxlcy5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdFhNTE1vZGVsTG9hZGVyLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0WE1MRG9jdW1lbnRMb2FkZXIuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MpKTsKLQkJCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0TW9kZWxNYW5hZ2VyLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZE1vZGVsLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShOYW1lVmFsaWRhdG9yVGVzdHMuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRyYW5zaXRpb25UZXN0cy5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb24uY2xhc3MpKTsKLQkJCi0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShHZXREb2N1bWVudFJlZ2lvbnNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShOb2RlSW1wbFRlc3RDYXNlLmNsYXNzKSk7Ci0KLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RGb3JtYXRQcm9jZXNzb3JYTUwuY2xhc3MpKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvU1NFTW9kZWxYTUxUZXN0c1BsdWdpbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2JiYzRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL1NTRU1vZGVsWE1MVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEudXRpbC5SZXNvdXJjZUJ1bmRsZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFNTRU1vZGVsWE1MVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4gewotCS8vVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBTU0VNb2RlbFhNTFRlc3RzUGx1Z2luIHBsdWdpbjsKLQotCS8qKgotCSAqIFRoZSBjb25zdHJ1Y3Rvci4KLQkgKi8KLQlwdWJsaWMgU1NFTW9kZWxYTUxUZXN0c1BsdWdpbigpIHsKLQkJc3VwZXIoKTsKLQkJcGx1Z2luID0gdGhpczsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBTU0VNb2RlbFhNTFRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlyZXR1cm4ga2V5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzIikuZ2V0RW50cnkoIi8iKTsKLQkJVVJMIHJlc29sdmVkTG9jYXRpb24gPSBudWxsOwotCQl0cnkgewotCQkJcmVzb2x2ZWRMb2NhdGlvbiA9IEZpbGVMb2NhdG9yLnJlc29sdmUoaW5zdGFsbExvY2F0aW9uKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJLy8gaW1wb3NzaWJsZQotCQkJdGhyb3cgbmV3IEVycm9yKGUpOwotCQl9Ci0JCXJldHVybiByZXNvbHZlZExvY2F0aW9uOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBnZXRUZXN0RmlsZShTdHJpbmcgZmlsZXBhdGgpIHsKLQkJVVJMIGluc3RhbGxVUkwgPSBnZXRJbnN0YWxsTG9jYXRpb24oKTsKLQkJLy9TdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCUZpbGUgcmVzdWx0ID0gbmV3IEZpbGUobG9jYXRpb24pOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9YTUxDb3JlUHJlZmVyZW5jZXNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9YTUxDb3JlUHJlZmVyZW5jZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MTNmMTQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvWE1MQ29yZVByZWZlcmVuY2VzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTY0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5EZWZhdWx0U2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLklFY2xpcHNlUHJlZmVyZW5jZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZlcmVuY2VzLkluc3RhbmNlU2NvcGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkVuY29kaW5nUHJlZmVyZW5jZU5hbWVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuQ29udGVudFR5cGVFbmNvZGluZ1ByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRW5jb2RlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5YTUxDb3JlUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5YTUxEb2N1bWVudExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJlZmVyZW5jZXMuWE1MQ29yZVByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuY29udGVudHR5cGUuQ29udGVudFR5cGVJZEZvclhNTDsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wcmVmcy5QcmVmZXJlbmNlczsKLQotLyoqCi0gKiBUaGUgcHVycG9zZSBvZiB0aGlzIHRlc3QgaXMgdG8gdmVyaWZ5IHRoZSB2YWxpZGl0eSBvZiB0aGUgWE1MIFNvdXJjZSBlZGl0b3IKLSAqIHByZWZlcmVuY2VzLiBUZXN0cyBpbmNsdWRlIHNldHRpbmcvZ2V0dGluZyBwcmVmZXJlbmNlcy4KLSAqIAotICogTk9URTogVGhpcyB0ZXN0IHNob3VsZCBiZSBwcmVmb3JtZWQgb24gYSBjbGVhbiB3b3Jrc3BhY2UuIElmIHBlcmZvcm1lZCBvbgotICogYW4gZXhpc3Rpbmcgd29ya3NwYWNlLCB0aGlzIHRlc3Qgd2lsbCBtYW5pcHVsYXRlIHByZWZlcmVuY2VzIGluIHRoZQotICogd29ya3NwYWNlLCB0aG91Z2ggYXR0ZW1wdHMgd2lsbCBiZSBtYWRlIHRvIHJlc3RvcmUgb3JpZ2luYWwgdmFsdWVzIGFmdGVyCi0gKiB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgWE1MQ29yZVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlIjsKLQotCQkvLyBuZWVkIHRvIHN0YXJ0IHVwIGJ1bmRsZSBmb3IgZGVmYXVsdCB2YWx1ZXMgdG8gYmUgbG9hZGVkCi0JCUJ1bmRsZSBidW5kbGUgPSBQbGF0Zm9ybS5nZXRCdW5kbGUoYnVuZGxlTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoYnVuZGxlICE9IG51bGwpCi0JCQkJYnVuZGxlLnN0YXJ0KCk7Ci0JCQllbHNlCi0JCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2UgY291bGQgbm90IGZpbmQgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSk7Ci0JCX0KLQkJY2F0Y2ggKEJ1bmRsZUV4Y2VwdGlvbiBlKSB7Ci0JCQlmYWlsKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgYmVjYXVzZSBvZiBleGNlcHRpb24gc3RhcnRpbmcgYnVuZGxlOiAiICsgYnVuZGxlTmFtZSArICIgZXhjZXB0aW9uOiAiICsgZSk7Ci0JCX0KLQotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuSU5ERU5UQVRJT05fU0laRSk7Ci0JCWJ1bmRsZUdldFByZWZlcmVuY2UoYnVuZGxlTmFtZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5MSU5FX1dJRFRIKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgYnVuZGxlR2V0UHJlZmVyZW5jZShTdHJpbmcgYnVuZGxlTmFtZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJaW50IGRlZmF1bHRWYWx1ZSA9IC0xOwotCi0JCWludCB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldEludChidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnRUcnVlKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIgKyBwcmVmS2V5LCBkZWZhdWx0VmFsdWUgIT0gdmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGRlZmF1bHQgdmFsdWVzIG9mIHByZWZlcmVuY2VzLgotCSAqIAotCSAqIE5PVEU6IEV4cGVjdGVkIGRlZmF1bHQgdmFsdWVzIGFyZSBoYXJkLWNvZGVkLCBzbyBpZiBkZWZhdWx0IHZhbHVlcyBkbwotCSAqIGdldCBjaGFuZ2VkLCBhc3NlcnRpb25zIG5lZWQgdG8gYmUgdXBkYXRlZCBhcyB3ZWxsCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IERlZmF1bHRTY29wZSgpLmdldE5vZGUoWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCkpOwotCi0JCXBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKG5vZGUsIFhNTENvcmVQcmVmZXJlbmNlTmFtZXMuU1BMSVRfTVVMVElfQVRUUlMsIEJvb2xlYW4udG9TdHJpbmcoZmFsc2UpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uobm9kZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSLCBYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLlRBQik7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIHBsdWdpbkdldERlZmF1bHRQcmVmZXJlbmNlKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7IC8vIHJhbmRvbQotCQkvLyBzdHJpbmcKLQotCQlTdHJpbmcgdGhlRGVmYXVsdFZhbHVlID0gbm9kZS5nZXQocHJlZktleSwgZGVmYXVsdFZhbHVlKTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5LCBleHBlY3RlZCwgdGhlRGVmYXVsdFZhbHVlKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzIGJ5IHNldHRpbmcgcHJlZmVyZW5jZSB2YWx1ZSB0byBiZSBhCi0JICogY2VydGFpbiB2YWx1ZSwgdGhlbiBnZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHZhbHVlIHRvIHZlcmlmeSBpdCB3YXMgc2V0LgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5TZXRQcmVmZXJlbmNlcygpIHsKLQkJSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlID0gbmV3IEluc3RhbmNlU2NvcGUoKS5nZXROb2RlKFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLmdldFN5bWJvbGljTmFtZSgpKTsKLQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihub2RlLCBYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLkNMRUFSX0FMTF9CTEFOS19MSU5FUyk7Ci0JCXBsdWdpblNldFByZWZlcmVuY2VTdHJpbmcobm9kZSwgWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5JTkRFTlRBVElPTl9DSEFSKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSUVjbGlwc2VQcmVmZXJlbmNlcyBub2RlLCBTdHJpbmcgcHJlZktleSkgewotCQlib29sZWFuIG9yaWdpbmFsVmFsdWUgPSBmYWxzZTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gdHJ1ZTsKLQotCQlTdHJpbmcgb3JpZ2luYWxTdHJpbmcgPSBub2RlLmdldChwcmVmS2V5LCAiYm9ndXMiKTsKLQkJaWYgKCEiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpIHsKLQkJCW9yaWdpbmFsVmFsdWUgPSBCb29sZWFuLnZhbHVlT2Yob3JpZ2luYWxTdHJpbmcpLmJvb2xlYW5WYWx1ZSgpOwotCQkJZXhwZWN0ZWRWYWx1ZSA9ICFvcmlnaW5hbFZhbHVlOwotCQl9Ci0JCW5vZGUucHV0Qm9vbGVhbihwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJYm9vbGVhbiBmb3VuZFZhbHVlID0gbm9kZS5nZXRCb29sZWFuKHByZWZLZXksIHRydWUpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIgKyBwcmVmS2V5ICsgIiAgZXhwZWN0ZWQ6ICIgKyBleHBlY3RlZFZhbHVlICsgIiBmb3VuZDogIiArIGZvdW5kVmFsdWUsIGV4cGVjdGVkVmFsdWUsIGZvdW5kVmFsdWUpOwotCi0JCS8vIGF0dGVtcHQgdG8gcmVzdG9yZSBvcmlnaW5hbCBwcmVmZXJlbmNlIHZhbHVlCi0JCWlmICgiYm9ndXMiLmVxdWFscyhvcmlnaW5hbFN0cmluZykpCi0JCQlub2RlLnJlbW92ZShwcmVmS2V5KTsKLQkJZWxzZQotCQkJbm9kZS5wdXQocHJlZktleSwgb3JpZ2luYWxTdHJpbmcpOwotCX0KLQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElFY2xpcHNlUHJlZmVyZW5jZXMgbm9kZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCAiYm9ndXMiKTsKLQkJU3RyaW5nIGV4cGVjdGVkVmFsdWUgPSBMb25nLnRvU3RyaW5nKFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpKTsgLy8gcmFuZG9tCi0JCS8vIHN0cmluZwotCQlub2RlLnB1dChwcmVmS2V5LCBleHBlY3RlZFZhbHVlKTsKLQkJU3RyaW5nIGZvdW5kVmFsdWUgPSBub2RlLmdldChwcmVmS2V5LCAiIik7Ci0JCWFzc2VydEVxdWFscygiU2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIHVzaW5nIHBsdWdpbi5nZXRQcmVmZXJlbmNlU3RvcmUuIEtleTogIiArIHByZWZLZXkgKyAiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJaWYgKCJib2d1cyIuZXF1YWxzKG9yaWdpbmFsVmFsdWUpKQotCQkJbm9kZS5yZW1vdmUocHJlZktleSk7Ci0JCWVsc2UKLQkJCW5vZGUucHV0KHByZWZLZXksIG9yaWdpbmFsVmFsdWUpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGxpbmUgZGVsaW1pdGVyIHByZWZlcmVuY2VzIGJ5IG1ha2luZyBzdXJlIGRvY3VtZW50IGNyZWF0ZWQKLQkgKiBmb2xsb3dzIGxpbmUgZGVsaW1pdGVyIHByZWZlcmVuY2UuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdERlbGltaXRlclByZWZlcmVuY2VzKCkgewotCQkvLyBjaGVjayBpZiBjb250ZW50IHR5cGUgcHJlZmVyZW5jZXMgbWF0Y2gKLQkJU3RyaW5nIHByZWZlcnJlZERlbGltaXRlciA9IENvbnRlbnRUeXBlRW5jb2RpbmdQcmVmZXJlbmNlcy5nZXRQcmVmZXJyZWROZXdMaW5lRGVsaW1pdGVyKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlQcmVmZXJlbmNlcyBwcmVmcyA9IENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5LmdldFByZWZlcmVuY2VzKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlTdHJpbmcgZ2F0ZXdheURlbGltaXRlciA9IHByZWZzLmdldChDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5FTkRfT0ZfTElORV9DT0RFLCBudWxsKTsKLQkJYXNzZXJ0RXF1YWxzKCJDb250ZW50VHlwZUVuY29kaW5nUHJlZmVyZW5jZXMgYW5kIENvbnRlbnRCYXNlZFByZWZlcmVuY2VHYXRld2F5IHByZWZlcmVuY2VzIGRvIG5vdCBtYXRjaCIsIGdhdGV3YXlEZWxpbWl0ZXIsIHByZWZlcnJlZERlbGltaXRlcik7Ci0KLQkJLy8gc2V0IGEgcGFydGljdWxhciBsaW5lIGRlbGltaXRlcgotCQlwcmVmcy5wdXQoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSwgQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuTEYpOwotCi0JCS8vIGNyZWF0ZSBkb2N1bWVudAotCQlYTUxEb2N1bWVudExvYWRlciBsb2FkZXIgPSBuZXcgWE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSUVuY29kZWREb2N1bWVudCBkb2N1bWVudCA9IGxvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJU3RyaW5nIGRvY3VtZW50RGVsaW1pdGVyID0gZG9jdW1lbnQuZ2V0UHJlZmVycmVkTGluZURlbGltaXRlcigpOwotCi0JCS8vIHZlcmlmeSBkZWxpbWl0ZXIgaW4gZG9jdW1lbnQgbWF0Y2hlcyBwcmVmZXJlbmNlCi0JCWFzc2VydEVxdWFscygiRGVsaW1pdGVyIGluIGRvY3VtZW50IGRvZXMgbm90IG1hdGNoIHByZWZlcmVuY2UiLCBDb21tb25FbmNvZGluZ1ByZWZlcmVuY2VOYW1lcy5TVFJJTkdfTEYsIGRvY3VtZW50RGVsaW1pdGVyKTsKLQotCQkvLyByZXR1cm4gdG8gb3JpZ2luYWwgcHJlZmVyZW5jZQotCQlwcmVmcy5yZW1vdmUoQ29tbW9uRW5jb2RpbmdQcmVmZXJlbmNlTmFtZXMuRU5EX09GX0xJTkVfQ09ERSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNUHJpbnRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNUHJpbnRlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmE1MjEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVByaW50ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbVdyaXRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci1pbXBvcnQgamF2YS51dGlsLlZlY3RvcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5Mb2dnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUFueUVsZW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUF0dHJpYnV0ZURlY2xhcmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Db250ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01EYXRhVHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRW50aXR5RGVjbGFyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUdyb3VwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGVMaXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwudXRpbC5DTVZpc2l0b3I7Ci0KLQotcHVibGljIGNsYXNzIENNUHJpbnRlciBleHRlbmRzIENNVmlzaXRvcgotewotICBwcm90ZWN0ZWQgU3RyaW5nQnVmZmVyIGZTdHJpbmdCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gIHByb3RlY3RlZCBWZWN0b3IgdmlzaXRlZEVsZW1lbnRzID0gbmV3IFZlY3RvcigpOyAKLSAgICAKLSAgLyoqKioqKiAgIGZvcm1hdHRpbmcgICAgKioqKioqLwotICBwcm90ZWN0ZWQgU3RyaW5nIGluZGVudCA9ICIiOyAvLyROT04tTkxTLTEkCi0KLSAgcHJvdGVjdGVkIHZvaWQgaW5jcmVtZW50SW5kZW50KCkKLSAgewotICAgIGluZGVudCA9IGluZGVudCArICIgICI7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHByb3RlY3RlZCB2b2lkIGRlY3JlbWVudEluZGVudCgpCi0gIHsKLSAgICBpbmRlbnQgPSBpbmRlbnQuc3Vic3RyaW5nKDAsIGluZGVudC5sZW5ndGgoKS0yKTsKLSAgfQotCi0KLSAgcHVibGljIHZvaWQgcHJpbnRDTU5vZGUoU3RyaW5nIGZpbGVuYW1lLCBDTU5vZGUgY21ub2RlKQotICB7Ci0gICAgdmlzaXRDTU5vZGUoY21ub2RlKTsKLSAgICB0cnkgCi0gICAgewotICAgICAgRmlsZU91dHB1dFN0cmVhbSBmaWxlU3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oZmlsZW5hbWUpOwotICAgICAgT3V0cHV0U3RyZWFtV3JpdGVyIHdyaXRlciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoZmlsZVN0cmVhbSk7Ci0gICAgICB3cml0ZXIud3JpdGUoZlN0cmluZ0J1ZmZlci50b1N0cmluZygpKTsKLSAgICAgIHdyaXRlci5mbHVzaCgpOwotICAgICAgZmlsZVN0cmVhbS5jbG9zZSgpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotICAgIAlMb2dnZXIubG9nRXhjZXB0aW9uKCJQTVByaW50ZXIgRGVidWc6ICIsIGUpOwotICAgIH0gIAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTUFueUVsZW1lbnQoQ01BbnlFbGVtZW50IGFueUVsZW1lbnQpCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNQW55RWxlbWVudCIpOyAvLyROT04tTkxTLTEkCi0gICAgcHJpbnRBdHRyaWJ1dGVzKGZTdHJpbmdCdWZmZXIsIGFueUVsZW1lbnQpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKCI+L24iKTsgLy8kTk9OLU5MUy0xJAotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIHByaW50UHJvcGVydGllcyhmU3RyaW5nQnVmZmVyLCBhbnlFbGVtZW50KTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPC9DTUFueUVsZW1lbnQ+L24iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTUF0dHJpYnV0ZURlY2xhcmF0aW9uKENNQXR0cmlidXRlRGVjbGFyYXRpb24gYWQpCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNQXR0cmlidXRlRGVjbGFyYXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBhZCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0gICAgcHJpbnRQcm9wZXJ0aWVzKGZTdHJpbmdCdWZmZXIsIGFkKTsKLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICB2aXNpdENNTm9kZShhZC5nZXRBdHRyVHlwZSgpKTsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPC9DTUF0dHJpYnV0ZURlY2xhcmF0aW9uPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgfQotCi0gIHB1YmxpYyB2b2lkIHZpc2l0Q01EYXRhVHlwZShDTURhdGFUeXBlIGRhdGFUeXBlKQotICB7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjxDTURhdGFUeXBlIik7IC8vJE5PTi1OTFMtMSQKLSAgICBwcmludEF0dHJpYnV0ZXMoZlN0cmluZ0J1ZmZlciwgZGF0YVR5cGUpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKCI+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIGluY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8SW1wbGllZFZhbHVlIGtpbmQ9XCIiICsgZGF0YVR5cGUuZ2V0SW1wbGllZFZhbHVlS2luZCgpICsgIlwiPiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChkYXRhVHlwZS5nZXRJbXBsaWVkVmFsdWUoKSArICI8L0ltcGxpZWRWYWx1ZT5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgcHJpbnRFbnVtZXJhdGlvbihmU3RyaW5nQnVmZmVyLCBkYXRhVHlwZS5nZXRFbnVtZXJhdGVkVmFsdWVzKCkpOwotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNRGF0YVR5cGU+XG4iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTURvY3VtZW50KENNRG9jdW1lbnQgZG9jdW1lbnQpCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNRG9jdW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBkb2N1bWVudCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICAvLyAgICBwcmludEVudGl0aWVzKHNiLCBkb2N1bWVudC5nZXRFbnRpdGllcygpKTsgCi0gICAgcHJpbnRQcm9wZXJ0aWVzKGZTdHJpbmdCdWZmZXIsIGRvY3VtZW50KTsKLQotICAgIENNTmFtZWROb2RlTWFwIG1hcCA9IGRvY3VtZW50LmdldEVsZW1lbnRzKCk7Ci0gICAgaW50IHNpemUgPSBtYXAuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgewotICAgICAgdmlzaXRDTU5vZGUobWFwLml0ZW0oaSkpOwotICAgIH0KLQotICAgIGRlY3JlbWVudEluZGVudCgpOwotICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNRG9jdW1lbnQ+XG4iKTsgLy8kTk9OLU5MUy0xJAotICB9Ci0KLSAgcHVibGljIHZvaWQgdmlzaXRDTUdyb3VwKENNR3JvdXAgZ3JvdXApCi0gIHsKLSAgICBmU3RyaW5nQnVmZmVyLmFwcGVuZChpbmRlbnQgKyAiPENNR3JvdXAiKTsgLy8kTk9OLU5MUy0xJAotICAgIHByaW50QXR0cmlidXRlcyhmU3RyaW5nQnVmZmVyLCBncm91cCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICBDTU5vZGVMaXN0IG5vZGVMaXN0ID0gZ3JvdXAuZ2V0Q2hpbGROb2RlcygpOwotICAgIGludCBzaXplID0gbm9kZUxpc3QuZ2V0TGVuZ3RoKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspCi0gICAgewotICAgICAgdmlzaXRDTU5vZGUobm9kZUxpc3QuaXRlbShpKSk7Ci0gICAgfQotCi0gICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjwvQ01Hcm91cD5cbiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgdm9pZCB2aXNpdENNRWxlbWVudERlY2xhcmF0aW9uKENNRWxlbWVudERlY2xhcmF0aW9uIGVkKQotICB7Ci0gICAgaWYgKCF2aXNpdGVkRWxlbWVudHMuY29udGFpbnMoZWQpKQotICAgIHsKLSAgICAgIHZpc2l0ZWRFbGVtZW50cy5hZGQoZWQpOwotICAgICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoaW5kZW50ICsgIjxDTUVsZW1lbnREZWNsYXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcmludEF0dHJpYnV0ZXMoZlN0cmluZ0J1ZmZlciwgZWQpOwotICAgICAgZlN0cmluZ0J1ZmZlci5hcHBlbmQoIj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBpbmNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIHByaW50UHJvcGVydGllcyhmU3RyaW5nQnVmZmVyLCBlZCk7Ci0KLSAgICAgIENNTmFtZWROb2RlTWFwIG5vZGVNYXAgPSBlZC5nZXRBdHRyaWJ1dGVzKCk7Ci0gICAgICBpbnQgc2l6ZSA9IG5vZGVNYXAuZ2V0TGVuZ3RoKCk7Ci0gICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKLSAgICAgIHsKLSAgICAgICAgdmlzaXRDTU5vZGUobm9kZU1hcC5pdGVtKGkpKTsKLSAgICAgIH0KLQotICAgICAgdmlzaXRDTU5vZGUoZWQuZ2V0Q29udGVudCgpKTsKLQotICAgICAgQ01EYXRhVHlwZSBkYXRhVHlwZSA9IGVkLmdldERhdGFUeXBlKCk7Ci0gICAgICBpZiAoZGF0YVR5cGUgIT0gbnVsbCkKLSAgICAgICAgdmlzaXRDTU5vZGUoZGF0YVR5cGUpOwotCi0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIGZTdHJpbmdCdWZmZXIuYXBwZW5kKGluZGVudCArICI8L0NNRWxlbWVudERlY2xhcmF0aW9uPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHByaW50RW51bWVyYXRpb24oU3RyaW5nQnVmZmVyIHNiLCBTdHJpbmdbXSB2YWx1ZXMpCi0gIHsKLSAgICBpZiAoKHZhbHVlcyAhPSBudWxsKSAmJiAodmFsdWVzLmxlbmd0aCA+IDApKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPEVudW1lcmF0aW9uPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotCi0gICAgICBmb3IgKGludCBpPTA7IGk8dmFsdWVzLmxlbmd0aDsgaSsrKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjxWYWx1ZT4iICsgdmFsdWVzW2ldICsgIjwvVmFsdWVzPlxuIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotCi0gICAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPC9FbnVtZXJhdGlvbj5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgfQotICB9Ci0KLQotICBwdWJsaWMgdm9pZCBwcmludEF0dHJpYnV0ZXMoU3RyaW5nQnVmZmVyIHNiLCBDTU5vZGUgY21ub2RlKQotICB7Ci0gICAgaWYgKGNtbm9kZSAhPSBudWxsKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZCgiIG5vZGVOYW1lPVwiIiArIGNtbm9kZS5nZXROb2RlTmFtZSgpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgc2IuYXBwZW5kKCIgbm9kZVR5cGU9XCIiICsgY21ub2RlLmdldE5vZGVUeXBlKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUNvbnRlbnQpCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZCgiIG1pbk9jY3VyPVwiIiArICgoQ01Db250ZW50KWNtbm9kZSkuZ2V0TWluT2NjdXIoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgICAgc2IuYXBwZW5kKCIgbWF4T2NjdXI9XCIiICsgKChDTUNvbnRlbnQpY21ub2RlKS5nZXRNYXhPY2N1cigpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNQW55RWxlbWVudCkKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgbmFtZXNwYWNlVVJJPVwiIiArICgoQ01BbnlFbGVtZW50KWNtbm9kZSkuZ2V0TmFtZXNwYWNlVVJJKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICB9Ci0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbikKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgdWFzYWdlPVwiIiArICgoQ01BdHRyaWJ1dGVEZWNsYXJhdGlvbiljbW5vZGUpLmdldFVzYWdlKCkgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgIHNiLmFwcGVuZCgiIGRlZmF1bHRWYWx1ZT1cIiIgKyAoKENNQXR0cmlidXRlRGVjbGFyYXRpb24pY21ub2RlKS5nZXREZWZhdWx0VmFsdWUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTURhdGFUeXBlKQotICAgICAgeyAKLSAgICAgICAgc2IuYXBwZW5kKCIgaW5zdGFuY2VWYWx1ZT1cIiIgKyAoKENNRGF0YVR5cGUpY21ub2RlKS5nZW5lcmF0ZUluc3RhbmNlVmFsdWUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUVudGl0eURlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICBTdHJpbmcgdmFsdWUgPSAoKENNRW50aXR5RGVjbGFyYXRpb24pY21ub2RlKS5nZXRWYWx1ZSgpOwotICAgICAgICBpZiAodmFsdWUuaW5kZXhPZigiXCIiKSA9PSAtMSkgc2IuYXBwZW5kKCIgdmFsdWU9XCIiICsgdmFsdWUgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkIC8vJE5PTi1OTFMtMyQKLSAgICAgICAgZWxzZSBzYi5hcHBlbmQoIiB2YWx1ZT1cIiIgKyB2YWx1ZSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICAgIGlmIChjbW5vZGUgaW5zdGFuY2VvZiBDTUdyb3VwKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoIiBvcGVyYXRvcj1cIiIgKyAoKENNR3JvdXApY21ub2RlKS5nZXRPcGVyYXRvcigpICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNRWxlbWVudERlY2xhcmF0aW9uKQotICAgICAgewotICAgICAgICBzYi5hcHBlbmQoIiBjb250ZW50VHlwZT1cIiIgKyAoKENNRWxlbWVudERlY2xhcmF0aW9uKWNtbm9kZSkuZ2V0Q29udGVudFR5cGUoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotCi0gIHB1YmxpYyB2b2lkIHByaW50RW50aXRpZXMoU3RyaW5nQnVmZmVyIHNiLCBDTU5hbWVkTm9kZU1hcCBlbnRpdGllcykKLSAgewotICAgIGlmICgoZW50aXRpZXMgIT0gbnVsbCkgJiYgKGVudGl0aWVzLmdldExlbmd0aCgpPjApKQotICAgIHsKLSAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPEVudGl0aWVzPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIGluY3JlbWVudEluZGVudCgpOwotCi0gICAgICBmb3IgKEl0ZXJhdG9yIGkgPSBlbnRpdGllcy5pdGVyYXRvcigpOyBpLmhhc05leHQoKTspCi0gICAgICB7Ci0gICAgICAgIENNRW50aXR5RGVjbGFyYXRpb24gZW50aXR5ID0gKENNRW50aXR5RGVjbGFyYXRpb24paS5uZXh0KCk7Ci0gICAgICAgIHNiLmFwcGVuZChpbmRlbnQgKyAiPEVudGl0eSIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByaW50QXR0cmlidXRlcyhzYiwgZW50aXR5KTsKLSAgICAgICAgc2IuYXBwZW5kKCIvPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLQotICAgICAgZGVjcmVtZW50SW5kZW50KCk7Ci0gICAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjwvRW50aXRpZXM+XG4iKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotCi0gIHB1YmxpYyB2b2lkIHByaW50UHJvcGVydGllcyhTdHJpbmdCdWZmZXIgc2IsIENNTm9kZSBjbW5vZGUpCi0gIHsKLSAgICBMaXN0IHByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0aWVzKGNtbm9kZSk7Ci0gICAgc2IuYXBwZW5kKGluZGVudCArICI8UHJvcGVydGllcz5cbiIpOyAvLyROT04tTkxTLTEkCi0gICAgaW5jcmVtZW50SW5kZW50KCk7Ci0KLSAgICBmb3IgKGludCBpPTA7IGk8cHJvcGVydGllcy5zaXplKCk7IGkrKykKLSAgICB7Ci0gICAgICBTdHJpbmcgcHJvcGVydHkgPSAoU3RyaW5nKXByb3BlcnRpZXMuZ2V0KGkpOwotICAgICAgc2IuYXBwZW5kKGluZGVudCArICI8UHJvcGVydHkgbmFtZT1cIiIgKyBwcm9wZXJ0eSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLQotICAgICAgaWYgKGNtbm9kZS5zdXBwb3J0cyhwcm9wZXJ0eSkpCi0gICAgICB7Ci0gICAgICAgIHNiLmFwcGVuZCgiIHN1cHBvcnRzPVwidHJ1ZVwiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIGVsc2UKLSAgICAgIHsKLSAgICAgICAgc2IuYXBwZW5kKCIgc3VwcG9ydHM9XCJmYWxzZVwiIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICAgIE9iamVjdCB2YWx1ZSA9IGNtbm9kZS5nZXRQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBTdHJpbmcpIHNiLmFwcGVuZCgiIHZhbHVlPVwiIiArIChTdHJpbmcpdmFsdWUgKyAiXCIiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJvb2xlYW4pIHNiLmFwcGVuZCgiIHZhbHVlPVwiIiArIHZhbHVlICsgIlwiIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkgc2IuYXBwZW5kKCIgdmFsdWU9XCIiICsgdmFsdWUuZ2V0Q2xhc3MoKSArICJcIiIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgIGVsc2Ugc2IuYXBwZW5kKCIgdmFsdWU9XCJudWxsXCIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgc2IuYXBwZW5kKCIvPlxuIik7IC8vJE5PTi1OTFMtMSQKLSAgICB9Ci0KLSAgICBkZWNyZW1lbnRJbmRlbnQoKTsKLSAgICBzYi5hcHBlbmQoaW5kZW50ICsgIjwvUHJvcGVydGllcz5cbiIpOyAvLyROT04tTkxTLTEkCi0gIH0KLQotICBwdWJsaWMgTGlzdCBnZXRQcm9wZXJ0aWVzKENNTm9kZSBjbW5vZGUpCi0gIHsKLSAgICBMaXN0IHByb3BlcnRpZXMgPSBuZXcgVmVjdG9yKCk7Ci0gICAgICAKLSAgICBpZiAoY21ub2RlICE9IG51bGwpCi0gICAgewotICAgICAgcHJvcGVydGllcy5hZGQoIkNNRG9jdW1lbnQiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoImRvY3VtZW50YXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy91c2VzTG9jYWxFbGVtZW50RGVjbGFyYXRpb25zIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvaXNOYW1lU3BhY2VBd2FyZSIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL25zUHJlZml4UXVhbGlmaWNhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL25pbGxhYmxlIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvbW9mTm90aWZpZXIiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgcHJvcGVydGllcy5hZGQoInNwZWMiKTsgLy8kTk9OLU5MUy0xJAotCi0gICAgICBpZiAoY21ub2RlIGluc3RhbmNlb2YgQ01FbGVtZW50RGVjbGFyYXRpb24pCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvZGVmaW5pdGlvbkluZm8iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL2RlZmluaXRpb24iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiWFNJVHlwZXMiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiRGVyaXZlZEVsZW1lbnREZWNsYXJhdGlvbiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIC8vIHByb3BlcnRpZXMuYWRkKCJTdWJzdGl0dXRpb25Hcm91cCIpOyBDdXJycmVudGx5IGJyb2tlbiBmb3IgbmV4dGVkIHhzZCBmaWxlcwotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiQWJzdHJhY3QiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgfQotICAgICAgaWYgKGNtbm9kZSBpbnN0YW5jZW9mIENNRG9jdW1lbnQpCi0gICAgICB7Ci0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJodHRwOi8vb3JnLmVjbGlwc2Uud3N0L2NtL3Byb3BlcnRpZXMvdGFyZ2V0TmFtZXNwYWNlVVJJIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgcHJvcGVydGllcy5hZGQoImh0dHA6Ly9vcmcuZWNsaXBzZS53c3QvY20vcHJvcGVydGllcy9pbXBvcnRlZE5hbWVzcGFjZUluZm8iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL25hbWVzcGFjZUluZm8iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBwcm9wZXJ0aWVzLmFkZCgiaHR0cDovL29yZy5lY2xpcHNlLndzdC9jbS9wcm9wZXJ0aWVzL2VsZW1lbnRGb3JtRGVmYXVsdCIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgIHByb3BlcnRpZXMuYWRkKCJhbm5vdGF0aW9uTWFwIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHByb3BlcnRpZXM7Ci0gIH0KLSAgCi19Ci0KLSAKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVV0aWxpdHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVV0aWxpdHkuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ2ZGZiMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01VdGlsaXR5LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUNvbnRlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNR3JvdXA7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkNNVmlzaXRvcjsKLQotCi1wdWJsaWMgY2xhc3MgQ01VdGlsaXR5Ci17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gIC8qKgotICAgKiByZXR1cm4gdHJ1ZSBpZiB0aGUgY2hpbGQgb3IgYW55IG9mIGl0cyBhbmNlc3RvciBncm91cCBub2RlcyBhcmUgcmVwZWF0YWJsZQotICAgKi8KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzTm9kZU9yQW5jZXN0b3JHcm91cFJlcGVhdGFibGUoQ01Db250ZW50IGNvbnRlbnQsIENNTm9kZSBjaGlsZCkKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAvLyBzaW5jZSB3ZSBjYW4ndCB3YWxrIHVwIHRoZSBDTU5vZGUgdHJlZSAod2h5IHlvdSBhc2s/IC4uLiBpdHMgYSBsb25nIHN0b3J5KQotICAgIC8vIHdlIHdhbGsgZG93biB0aGUgdHJlZSB0byBjb25zaWRlciB0aGUgY2hpbGQncyBwYXJlbnQgbm9kZSdzCi0gICAgLy8KLSAgICBib29sZWFuIHJlc3VsdCA9IGlzUmVwZWF0YWJsZShjaGlsZCk7Ci0gICAgaWYgKCFyZXN1bHQpCi0gICAgewotICAgICAgQ2FuUmVwZWF0VmlzaXRvciB2aXNpdG9yID0gbmV3IENhblJlcGVhdFZpc2l0b3IoY29udGVudCwgY2hpbGQpOwotICAgICAgdmlzaXRvci52aXNpdENNTm9kZShjb250ZW50KTsKLSAgICAgIHJlc3VsdCA9IHZpc2l0b3IuZ2V0UmVzdWx0KCk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci0gIH0KLQotICAvKioKLSAgICogcmV0dXJuIHRydWUgaWYgdGhlIGNoaWxkIGlzIHJlcGVhdGFibGUKLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgYm9vbGVhbiBpc05vZGVSZXBlYXRhYmxlKENNQ29udGVudCBjb250ZW50LCBDTU5vZGUgY2hpbGQpCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgLy8gc2luY2Ugd2UgY2FuJ3Qgd2FsayB1cCB0aGUgQ01Ob2RlIHRyZWUgKHdoeSB5b3UgYXNrPyAuLi4gaXRzIGEgbG9uZyBzdG9yeSkKLSAgICAvLyB3ZSB3YWxrIGRvd24gdGhlIHRyZWUgdG8gY29uc2lkZXIgdGhlIGNoaWxkJ3MgcGFyZW50IG5vZGUncwotICAgIC8vCi0gICAgYm9vbGVhbiByZXN1bHQgPSBpc1JlcGVhdGFibGUoY2hpbGQpOwotICAgIGlmICghcmVzdWx0KQotICAgIHsKLSAgICAgIElzUmVwZWF0YWJsZVZpc2l0b3IgdmlzaXRvciA9IG5ldyBJc1JlcGVhdGFibGVWaXNpdG9yKGNvbnRlbnQsIGNoaWxkKTsKLSAgICAgIHZpc2l0b3IudmlzaXRDTU5vZGUoY29udGVudCk7Ci0gICAgICByZXN1bHQgPSB2aXNpdG9yLmdldFJlc3VsdCgpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotICB9Ci0KLSAgcHVibGljIHN0YXRpYyBib29sZWFuIGlzUmVwZWF0YWJsZShDTU5vZGUgY2hpbGQpCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIGJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0gICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgQ01Db250ZW50KQotICAgIHsKLSAgICAgIENNQ29udGVudCBjb250ZW50ID0gKENNQ29udGVudCljaGlsZDsKLSAgICAgIHJlc3VsdCA9IGNvbnRlbnQuZ2V0TWF4T2NjdXIoKSA+IDEgfHwgY29udGVudC5nZXRNYXhPY2N1cigpID09IC0xOwotICAgIH0gCi0gICAgcmV0dXJuIHJlc3VsdDsKLSAgfQotICAgIAotICAgCi0gIHByb3RlY3RlZCBzdGF0aWMgY2xhc3MgQ2FuUmVwZWF0VmlzaXRvciBleHRlbmRzIENNVmlzaXRvcgotICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgcHVibGljIGJvb2xlYW4gcmVzdWx0OwotICAgIHByb3RlY3RlZCBib29sZWFuIGlzV2l0aGluUmVwZWF0YWJsZUdyb3VwOwotCi0gICAgcHJvdGVjdGVkIENNTm9kZSByb290OwotICAgIHByb3RlY3RlZCBDTU5vZGUgdGFyZ2V0OwotCi0gICAgcHVibGljIENhblJlcGVhdFZpc2l0b3IoQ01Ob2RlIHJvb3QsIENNTm9kZSB0YXJnZXQpCi0gICAgewotICAgICAgdGhpcy5yb290ID0gcm9vdDsKLSAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0OwotICAgIH0KLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0Q01Hcm91cChDTUdyb3VwIGdyb3VwKQotICAgIHsgICAgICAgICAKLSAgICAgIGJvb2xlYW4gb2xkSXNXaXRoaW5SZXBlYXRhYmxlR3JvdXAgPSBpc1dpdGhpblJlcGVhdGFibGVHcm91cDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgIGlzV2l0aGluUmVwZWF0YWJsZUdyb3VwID0gaXNSZXBlYXRhYmxlKGdyb3VwKTsKLSAgICAgIAotICAgICAgc3VwZXIudmlzaXRDTUdyb3VwKGdyb3VwKTsKLQotICAgICAgaXNXaXRoaW5SZXBlYXRhYmxlR3JvdXAgPSBvbGRJc1dpdGhpblJlcGVhdGFibGVHcm91cDsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0KLSAgICBwdWJsaWMgdm9pZCB2aXNpdENNRWxlbWVudERlY2xhcmF0aW9uKENNRWxlbWVudERlY2xhcmF0aW9uIGNtZWxlbWVudCkKLSAgICB7Ci0gICAgICBpZiAoY21lbGVtZW50ID09IHRhcmdldCkKLSAgICAgIHsKLSAgICAgICAgcmVzdWx0ID0gaXNXaXRoaW5SZXBlYXRhYmxlR3JvdXA7Ci0gICAgICB9Ci0gICAgfQotCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0UmVzdWx0KCkKLSAgICB7Ci0gICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0gIAotICB9Ci0KLQotICBwcm90ZWN0ZWQgc3RhdGljIGNsYXNzIElzUmVwZWF0YWJsZVZpc2l0b3IgZXh0ZW5kcyBDTVZpc2l0b3IKLSAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIHB1YmxpYyBib29sZWFuIHJlc3VsdCA9IGZhbHNlOwotICAgIHByb3RlY3RlZCBDTUdyb3VwIGN1cnJlbnRHcm91cDsKLQotICAgIHByb3RlY3RlZCBDTU5vZGUgcm9vdDsKLSAgICBwcm90ZWN0ZWQgQ01Ob2RlIHRhcmdldDsKLQotICAgIHB1YmxpYyBJc1JlcGVhdGFibGVWaXNpdG9yKENNTm9kZSByb290LCBDTU5vZGUgdGFyZ2V0KQotICAgIHsKLSAgICAgIHRoaXMucm9vdCA9IHJvb3Q7Ci0gICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgdm9pZCB2aXNpdENNR3JvdXAoQ01Hcm91cCBncm91cCkKLSAgICB7ICAgICAgICAgCi0gICAgICBDTUdyb3VwIHByZXZpb3VzR3JvdXAgPSBjdXJyZW50R3JvdXA7Ci0gICAgICBjdXJyZW50R3JvdXAgPSBncm91cDsKLSAgICAgIHN1cGVyLnZpc2l0Q01Hcm91cChncm91cCk7Ci0gICAgICBjdXJyZW50R3JvdXAgPSBwcmV2aW91c0dyb3VwOwotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotICAgIHB1YmxpYyB2b2lkIHZpc2l0Q01FbGVtZW50RGVjbGFyYXRpb24oQ01FbGVtZW50RGVjbGFyYXRpb24gY21lbGVtZW50KQotICAgIHsKLSAgICAgIGlmIChjbWVsZW1lbnQgPT0gdGFyZ2V0KQotICAgICAgewotICAgICAgICBpZiAoY3VycmVudEdyb3VwICE9IG51bGwpCi0gICAgICAgIHsKLSAgICAgICAgICByZXN1bHQgPSAoKGN1cnJlbnRHcm91cC5nZXRPcGVyYXRvcigpID09IENNR3JvdXAuQ0hPSUNFKSAmJgotICAgICAgICAgICAgICAgICAgICAoaXNSZXBlYXRhYmxlKGN1cnJlbnRHcm91cCkpKTsKLSAgICAgICAgfQotICAgICAgfQotICAgIH0KLQotICAgIHB1YmxpYyBib29sZWFuIGdldFJlc3VsdCgpCi0gICAgewotICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9ICAKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVmFsaWRhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvY29udGVudG1vZGVsL0NNVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkY2Q0ZDY4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5jb250ZW50bW9kZWw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTUVsZW1lbnREZWNsYXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNTmFtZWROb2RlTWFwOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ01Ob2RlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuQ29udGVudE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLmludGVybmFsLnV0aWwuQ01WYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5pbnRlcm5hbC51dGlsLkNNVmFsaWRhdG9yLkVsZW1lbnRQYXRoUmVjb3JkaW5nUmVzdWx0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50bW9kZWwuaW50ZXJuYWwudXRpbC5DTVZhbGlkYXRvci5TdHJpbmdFbGVtZW50Q29udGVudENvbXBhcmF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBDTVZhbGlkYXRvclRlc3QKLXsKLSAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nIGFyZ1tdKQotICB7Ci0gICAgaWYgKGFyZy5sZW5ndGggPiAxKQotICAgIHsKLSAgICAgIHRyeQotICAgICAgewotICAgICAgICAvL0NNRG9jdW1lbnRGYWN0b3J5UmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5yZWdpc3RlckNNRG9jdW1lbnRCdWlsZGVyV2l0aENsYXNzTmFtZSgib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2ZpbXBsLkNNRG9jdW1lbnRCdWlsZGVySW1wbCIpOwotCi0gICAgICAgIFN0cmluZyBncmFtbWFyRmlsZU5hbWUgPSBhcmdbMF07Ci0gICAgICAgIFN0cmluZyBlbGVtZW50TmFtZSA9IGFyZ1sxXTsKLQotICAgICAgICBDTURvY3VtZW50IGNtRG9jdW1lbnQgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCkuY3JlYXRlQ01Eb2N1bWVudChncmFtbWFyRmlsZU5hbWUsIG51bGwpOwotICAgICAgICAKLSAgICAgICAgQ01OYW1lZE5vZGVNYXAgZWxlbWVudE1hcCA9IGNtRG9jdW1lbnQuZ2V0RWxlbWVudHMoKTsKLSAgICAgICAgQ01FbGVtZW50RGVjbGFyYXRpb24gZWxlbWVudCA9IChDTUVsZW1lbnREZWNsYXJhdGlvbillbGVtZW50TWFwLmdldE5hbWVkSXRlbShlbGVtZW50TmFtZSk7Ci0gICAgICAgIGlmIChlbGVtZW50ICE9IG51bGwpCi0gICAgICAgIHsgLyoKLSAgICAgICAgICBwcmludGxuKCJmb3VuZCBlbGVtZW50IFsiICsgZWxlbWVudE5hbWUgKyAiXSAgY29udGVudFR5cGUgPSAiICsgZWxlbWVudC5nZXRDb250ZW50VHlwZSgpKTsKLSAgICAgICAgICBHcmFwaE5vZGUgZ3JhcGhOb2RlID0gY3JlYXRlR3JhcGgoZWxlbWVudCk7Ci0gICAgICAgICAgcHJpbnRHcmFwaChncmFwaE5vZGUpOwotICAgICAgICAgICovCi0gICAgICAgICAgcHJpbnRsbigiLS0tLS0tLS0tLS0tLS0gYmVnaW4gdmFsaWRhdGUgLS0tLS0tLS0tLS0tLS0tIik7IC8vJE5PTi1OTFMtMSQKLQotICAgICAgICAgIFN0cmluZ0VsZW1lbnRDb250ZW50Q29tcGFyYXRvciBjb21wYXJhdG9yID0gbmV3IFN0cmluZ0VsZW1lbnRDb250ZW50Q29tcGFyYXRvcigpOwotICAgICAgICAgIENNVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBDTVZhbGlkYXRvcigpOwotICAgICAgICAgIEVsZW1lbnRQYXRoUmVjb3JkaW5nUmVzdWx0IHJlc3VsdCA9IG5ldyBFbGVtZW50UGF0aFJlY29yZGluZ1Jlc3VsdCgpOwotICAgICAgICAgIHZhbGlkYXRvci5nZXRPcmlnaW5BcnJheShlbGVtZW50LCBDTVZhbGlkYXRvci5jcmVhdGVTdHJpbmdMaXN0KGFyZywgMiksIGNvbXBhcmF0b3IsIHJlc3VsdCk7Ci0gICAgICAgICAgaWYgKHJlc3VsdC5pc1ZhbGlkKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIENNTm9kZVtdIG5vZGVNYXBwaW5nID0gcmVzdWx0LmdldE9yaWdpbkFycmF5KCk7Ci0gICAgICAgICAgICBwcmludGxuKCJWYWxpZGF0aW9uIFN1Y2Nlc3MhIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIHByaW50KCIgICIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVNYXBwaW5nLmxlbmd0aDsgaSsrKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IG5vZGVNYXBwaW5nW2ldICE9IG51bGwgPyBub2RlTWFwcGluZ1tpXS5nZXROb2RlTmFtZSgpIDogIm51bGwiOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICAgIHByaW50KCJbIiArIG5hbWUgKyAiXSIpOyAvLyROT04tTkxTLTEkIC8vJE5PTi1OTFMtMiQKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50bG4oIiIpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgfQotICAgICAgICAgIGVsc2UKLSAgICAgICAgICB7Ci0gICAgICAgICAgICBwcmludGxuKCJWYWxpZGF0aW9uIEZhaWxlZCEgIik7IC8vJE5PTi1OTFMtMSQKLSAgICAgICAgICAgIGlmIChyZXN1bHQuZXJyb3JNZXNzYWdlICE9IG51bGwpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgIHByaW50bG4oIiAgIiArIHJlc3VsdC5lcnJvck1lc3NhZ2UpOyAvLyROT04tTkxTLTEkCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIHByaW50bG4oIi0tLS0tLS0tLS0tLS0tIGVuZCB2YWxpZGF0ZSAtLS0tLS0tLS0tLS0tLS0iKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewotICAgICAgICAgIHByaW50bG4oImVsZW1lbnQgWyIgKyBlbGVtZW50TmFtZSArICJdIGNhbiBub3QgYmUgZm91bmQiKTsgLy8kTk9OLU5MUy0xJCAvLyROT04tTkxTLTIkCi0gICAgICAgIH0KLSAgICAgIH0KLSAgICAgIGNhdGNoIChFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgcHJpbnRsbigiQ01WYWxpZGF0b3IgZXJyb3IiKTsgLy8kTk9OLU5MUy0xJAotICAgICAgICBlLnByaW50U3RhY2tUcmFjZSgpOwotICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcHJpbnRsbigiMiBhcmdzIHJlcXVpcmVkLi4uIG9ubHkgIiArIGFyZy5sZW5ndGggKyAiIHByb3ZpZGVkIik7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJAotICAgICAgcHJpbnRsbigidXNhZ2UgamF2YSBvcmcuZWNsaXBzZS53c3QubmV3eG1sLnV0aWwuWE1MVXRpbCBncmFtbWFyRmlsZU5hbWUgcm9vdEVsZW1lbnROYW1lIHBhdHRlcm4iKTsgLy8kTk9OLU5MUy0xJAotICAgIH0KLSAgfQotICAKLSAgcHVibGljIHN0YXRpYyB2b2lkIHByaW50KFN0cmluZyBzdHJpbmcpCi0gIHsgIAotICB9Ci0gICAgCi0gIHB1YmxpYyBzdGF0aWMgdm9pZCBwcmludGxuKFN0cmluZyBzdHJpbmcpCi0gIHsgIAotICB9Ci0gIAotICBwdWJsaWMgc3RhdGljIHZvaWQgcHJpbnRsbkluZGVudGVkKGludCBpbmRlbnQsIFN0cmluZyBzdHJpbmcpCi0gIHsKLSAgfSAgICAKLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVZpc2l0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvQ01WaXNpdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWY4NTUxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9DTVZpc2l0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsOwotCi1pbXBvcnQgamF2YXgueG1sLnBhcnNlcnMuRG9jdW1lbnRCdWlsZGVyOwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlckZhY3Rvcnk7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBsYXRmb3JtUnVubmFibGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5DTU5vZGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5Lk1vZGVsUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5tb2RlbHF1ZXJ5aW1wbC5Nb2RlbFF1ZXJ5SW1wbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLm1vZGVscXVlcnlpbXBsLlhNTEFzc29jaWF0aW9uUHJvdmlkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC51dGlsLkNNRG9jdW1lbnRDYWNoZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLWltcG9ydCBvcmcudzNjLmRvbS5OYW1lZE5vZGVNYXA7Ci1pbXBvcnQgb3JnLnczYy5kb20uTm9kZTsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotCi1wdWJsaWMgY2xhc3MgQ01WaXNpdG9yVGVzdCBpbXBsZW1lbnRzIElQbGF0Zm9ybVJ1bm5hYmxlIHsKLQlwdWJsaWMgT2JqZWN0IHJ1bihPYmplY3QgYSkgewotCQlTdHJpbmcgYXJnc1tdID0gKFN0cmluZ1tdKSBhOwotCQlpZiAoYXJncy5sZW5ndGggPiAwKSB7Ci0JCQl0ZXN0KGFyZ3NbMF0pOwotCQl9Ci0JCWVsc2UgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJ4bWwgZmlsZSBuYW1lIGFyZ3VtZW50IHJlcXVpcmVkIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlyZXR1cm4gbnVsbDsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZXN0KFN0cmluZyBmaWxlTmFtZSkgewotCi0JCUNsYXNzTG9hZGVyIG9yaWdpbmFsQ2xhc3NMb2FkZXIgPSBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOwotCQl0cnkgewotCQkJWE1MQXNzb2NpYXRpb25Qcm92aWRlciBwcm92aWRlciA9IG5ldyBYTUxBc3NvY2lhdGlvblByb3ZpZGVyKENNRG9jdW1lbnRDYWNoZS5nZXRJbnN0YW5jZSgpKSB7Ci0JCQl9OwotCi0JCQlNb2RlbFF1ZXJ5IG1xID0gbmV3IE1vZGVsUXVlcnlJbXBsKHByb3ZpZGVyKTsKLQotCQkJVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoQ01WaXNpdG9yVGVzdC5jbGFzcy5nZXRDbGFzc0xvYWRlcigpKTsKLQkJCURvY3VtZW50QnVpbGRlciBidWlsZGVyID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQkJRG9jdW1lbnQgZG9jdW1lbnQgPSBidWlsZGVyLnBhcnNlKGZpbGVOYW1lKTsKLQotCQkJLyoKLQkJCSAqIENsYXNzTG9hZGVyIHByZXZDbGFzc0xvYWRlciA9Ci0JCQkgKiBUaHJlYWQuY3VycmVudFRocmVhZCgpLmdldENvbnRleHRDbGFzc0xvYWRlcigpOwotCQkJICogVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIoZ2V0Q2xhc3MoKS5nZXRDbGFzc0xvYWRlcigpKTsKLQkJCSAqIENsYXNzIHRoZUNsYXNzID0KLQkJCSAqIENsYXNzLmZvck5hbWUoIm9yZy5hcGFjaGUueGVyY2VzLnBhcnNlcnMuRE9NUGFyc2VyIik7IERPTVBhcnNlcgotCQkJICogcGFyc2VyID0gKERPTVBhcnNlcil0aGVDbGFzcy5uZXdJbnN0YW5jZSgpOwotCQkJICogVGhyZWFkLmN1cnJlbnRUaHJlYWQoKS5zZXRDb250ZXh0Q2xhc3NMb2FkZXIocHJldkNsYXNzTG9hZGVyKTsKLQkJCSAqIHBhcnNlci5wYXJzZShuZXcgSW5wdXRTb3VyY2UoZmlsZU5hbWUpKTsgRG9jdW1lbnQgZG9jdW1lbnQgPQotCQkJICogcGFyc2VyLmdldERvY3VtZW50KCk7Ci0JCQkgKi8KLQkJCXZpc2l0Tm9kZShkb2N1bWVudCwgbXEsIDApOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCVRocmVhZC5jdXJyZW50VGhyZWFkKCkuc2V0Q29udGV4dENsYXNzTG9hZGVyKG9yaWdpbmFsQ2xhc3NMb2FkZXIpOwotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdmlzaXROb2RlKE5vZGUgbm9kZSwgTW9kZWxRdWVyeSBtcSwgaW50IGluZGVudCkgewotCQlDTU5vZGUgY21ub2RlID0gbXEuZ2V0Q01Ob2RlKG5vZGUpOwotCQlwcmludGxuSW5kZW50ZWQoaW5kZW50LCAibm9kZSA6IiArIG5vZGUuZ2V0Tm9kZU5hbWUoKSArICIgY21ub2RlIDogIiArIChjbW5vZGUgIT0gbnVsbCA/IGNtbm9kZS5nZXROb2RlTmFtZSgpIDogIm51bGwiKSk7IC8vJE5PTi1OTFMtMSQgLy8kTk9OLU5MUy0yJCAvLyROT04tTkxTLTMkCi0JCU5hbWVkTm9kZU1hcCBtYXAgPSBub2RlLmdldEF0dHJpYnV0ZXMoKTsKLQkJaWYgKG1hcCAhPSBudWxsKSB7Ci0JCQlpbmRlbnQgKz0gMjsKLQkJCWludCBtYXBMZW5ndGggPSBtYXAuZ2V0TGVuZ3RoKCk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IG1hcExlbmd0aDsgaSsrKSB7Ci0JCQkJdmlzaXROb2RlKG1hcC5pdGVtKGkpLCBtcSwgaW5kZW50KTsKLQkJCX0KLQkJCWluZGVudCAtPSAyOwotCQl9Ci0JCWluZGVudCArPSA0OwotCQlOb2RlTGlzdCBsaXN0ID0gbm9kZS5nZXRDaGlsZE5vZGVzKCk7Ci0JCWludCBsaXN0TGVuZ3RoID0gbGlzdC5nZXRMZW5ndGgoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0TGVuZ3RoOyBpKyspIHsKLQkJCXZpc2l0Tm9kZShsaXN0Lml0ZW0oaSksIG1xLCBpbmRlbnQpOwotCQl9Ci0JCWluZGVudCAtPSA0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBwcmludGxuSW5kZW50ZWQoaW50IGluZGVudCwgU3RyaW5nIHN0cmluZykgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGluZGVudDsgaSsrKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50KCIgIik7IC8vJE5PTi1OTFMtMSQKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oc3RyaW5nKTsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9jb250ZW50bW9kZWwvVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9UZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmEyNDQxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2NvbnRlbnRtb2RlbC9UZXN0Q2F0YWxvZ1JldHJpdmFsQW5kTW9kZWxDcmVhdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuY29udGVudG1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5NYWxmb3JtZWRVUkxFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuWE1MQ29yZVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JQ2F0YWxvZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudG1vZGVsLkNNRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnRtb2RlbC5Db250ZW50TW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5tb2RlbHF1ZXJ5LlhNTENhdGFsb2dJZFJlc29sdmVyOwotCi1wdWJsaWMgY2xhc3MgVGVzdENhdGFsb2dSZXRyaXZhbEFuZE1vZGVsQ3JlYXRpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBUZXN0IHRoYXQgYSBrbm93biBlcnJvciBjYXNlIHJldHVybnMgbnVsbC4KLQkgKiAKLQkgKiBAdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbgotCSAqIEB0aHJvd3MgSU9FeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0S25vd25Ob3RFeGlzdCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIEpVTktfU1RSSU5HID0gImRvZXNOb3RFeGlzdFRlc3QiOwotCQlJQ2F0YWxvZyB4bWxDYXRhbG9nID0gWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0RGVmYXVsdFhNTENhdGFsb2coKTsKLQkJU3RyaW5nIHJlc29sdmVkID0geG1sQ2F0YWxvZy5yZXNvbHZlUHVibGljKEpVTktfU1RSSU5HLCBudWxsKTsKLQkJYXNzZXJ0TnVsbCgiZXhwZWN0ZWQgbm8gbWF0Y2ggZm9yICIgKyBKVU5LX1NUUklORywgcmVzb2x2ZWQpOwotCX0KLQotCXB1YmxpYyB2b2lkIHJlbW92ZWR0ZXN0V0FQRk9SVU0oKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDEwKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTBUKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTBGKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1czQy8vRFREIFhIVE1MIDEuMCBGcmFtZXNldC8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WEhUTUwxMEIoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgQmFzaWMgMS4wLy9FTiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYSFRNTDExKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1czQy8vRFREIFhIVE1MIDEuMS8vRU4iKTsKLQl9Ci0JCi0JLyoqCi0JICogV2UgZXhwZWN0IHRoZSBYTUxDYXRhbG9nUmVzb2x2ZXIgYW5kIFhNTENhdGFsb2dJZFJlc29sdmVyCi0JICogdG8gcmVzb2x2ZSB0byB0aGUgc2FtZSBVUkkgZ2l2ZW4gYSBwdWJsaWMgaWQgaW4gb3VyIGNhdGFsb2cuCi0JICogCi0JICogQHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFhIVE1MMTFfeG1scmVzb2x2ZXIoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBFWFBFQ1RFRF9QVUJMSUNJRCA9ICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIjsKLQkJCi0JCS8vIGJ1ZyAxMTc0MjQsIGhlcmUgZXdlIG1ha2UgdXAgYSBiYXNlIGxvY2F0aW9uIHRvIHNhdGlzZnkgdGhlIHJlc29sdmVyIEFQSQotCQkvLyB0aGF0IGV4cGVjdHMgYSBub24tbnVsbCBiYXNlIGxvY2F0aW9uCi0JCVN0cmluZyBiYXNlTG9jYXRpb24gPSAiaHR0cDovL3d3dy5leGFtcGxlLm9yZy90ZXN0WEhUTUwxMS54bWwiOwotCQlYTUxDYXRhbG9nSWRSZXNvbHZlciByZXNvbHZlciA9IG5ldyBYTUxDYXRhbG9nSWRSZXNvbHZlcihiYXNlTG9jYXRpb24sIG51bGwpOwotCQlTdHJpbmcgcmVzb2x2ZWRYTUxfSWQgPSByZXNvbHZlci5yZXNvbHZlKGJhc2VMb2NhdGlvbiwgRVhQRUNURURfUFVCTElDSUQsIG51bGwpOwotCQkKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZFhMX0NhdCA9IHhtbENhdGFsb2cucmVzb2x2ZVB1YmxpYyhFWFBFQ1RFRF9QVUJMSUNJRCwgbnVsbCk7Ci0JCWFzc2VydEVxdWFscyhyZXNvbHZlZFhMX0NhdCwgcmVzb2x2ZWRYTUxfSWQpOwkJIAotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q01YSFRNTDExKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb0NNVGVzdCgiLS8vVzNDLy9EVEQgWEhUTUwgMS4xLy9FTiIpOwotCX0KLQlwdWJsaWMgdm9pZCByZW1vdmVkdGVzdFhIVE1MMTBNKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCByZW1vdmVkdGVzdFdBUDEzKCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMy8vRU4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0MjAwMVNjaGVtYSgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9VUklUZXN0KCJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIpOwotCX0KLQotCS8qKgotCSAqIFRlc3RzIGlmIGR0ZCBOT1QgaW4gb3VyIGNhdGFsb2cgY2FuIGhhdmUgYSBjb250ZW50IG1vZGVsIAotCSAqIGNyZWF0ZWQuIAotCSAqIAotCSAqIEB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFeHRlcm5hbERURCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9DTV9kaXJlY3RVUklUZXN0KCJodHRwOi8vaGliZXJuYXRlLnNvdXJjZWZvcmdlLm5ldC9oaWJlcm5hdGUtY29uZmlndXJhdGlvbi0zLjAuZHRkIik7Ci0JfQotLy8gQnVnIDEyMzU0NyAtIHRlbXBvcmFyaWx5IGNvbW1lbnQgdGhlc2UgdGVzdHMgb3V0LgotLy8JcHVibGljIHZvaWQgdGVzdDIwMDFTY2hlbWFDTURpcmVjdCgpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb0NNX2RpcmVjdFVSSVRlc3QoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLnhzZCIpOwotLy8JfQotLy8JCi0vLwlwdWJsaWMgdm9pZCB0ZXN0MjAwMVNjaGVtYUNNQ2F0YWxvZygpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1VSSV9DTVRlc3QoImh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIik7Ci0vLwl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEludm9pY2VSZW1vdGUoKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvQ01fZGlyZWN0VVJJVGVzdF9jaGVja0VsZW1lbnRDb3VudCgiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c3QvY29tcG9uZW50cy94c2QvdGVzdHMvZHRkLXJlZmVyZW5jZXMvSW52b2ljZS5kdGQiLCAxOCk7Ci0JfQkKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZVJlbW90ZUluZGlyZWN0KCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb0NNX2RpcmVjdFVSSVRlc3RfY2hlY2tFbGVtZW50Q291bnQoImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvd3N0L2NvbXBvbmVudHMveHNkL3Rlc3RzL2R0ZC1yZWZlcmVuY2VzL0luZGlyZWN0SW52b2ljZS5kdGQiLCAxOCk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBkb1Rlc3QoU3RyaW5nIEVYUEVDVEVEX1BVQkxJQ0lEKSB0aHJvd3MgTWFsZm9ybWVkVVJMRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVQdWJsaWMoRVhQRUNURURfUFVCTElDSUQsIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBmaW5kICIgKyBFWFBFQ1RFRF9QVUJMSUNJRCwgcmVzb2x2ZWQpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0NNVGVzdChTdHJpbmcgRVhQRUNURURfUFVCTElDSUQpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVB1YmxpYyhFWFBFQ1RFRF9QVUJMSUNJRCwgbnVsbCk7Ci0JCUNvbnRlbnRNb2RlbE1hbmFnZXIgY29udGVudE1vZGVsTWFuYWdlciA9IENvbnRlbnRNb2RlbE1hbmFnZXIuZ2V0SW5zdGFuY2UoKTsKLQkJQ01Eb2N1bWVudCBjb250ZW50TW9kZWwgPSBjb250ZW50TW9kZWxNYW5hZ2VyLmNyZWF0ZUNNRG9jdW1lbnQocmVzb2x2ZWQsIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBjcmVhdGUgY29udGVudCBtb2RlbCBmb3IgIiArIEVYUEVDVEVEX1BVQkxJQ0lELCBjb250ZW50TW9kZWwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBkb0NNX2RpcmVjdFVSSVRlc3QoU3RyaW5nIEVYUEVDVEVEX1VSSSkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KEVYUEVDVEVEX1VSSSwgbnVsbCk7Ci0JCWFzc2VydE5vdE51bGwoImV4cGVjdGVkIHRvIGNyZWF0ZSBjb250ZW50IG1vZGVsIGZvciAiICsgRVhQRUNURURfVVJJLCBjb250ZW50TW9kZWwpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgZG9DTV9kaXJlY3RVUklUZXN0X2NoZWNrRWxlbWVudENvdW50KFN0cmluZyBFWFBFQ1RFRF9VUkksIGludCBjb3VudCkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KEVYUEVDVEVEX1VSSSwgbnVsbCk7Ci0JCWFzc2VydE5vdE51bGwoImV4cGVjdGVkIHRvIGNyZWF0ZSBjb250ZW50IG1vZGVsIGZvciAiICsgRVhQRUNURURfVVJJLCBjb250ZW50TW9kZWwpOwotCQlpbnQgYWN0dWFsQ291bnQgPSBjb250ZW50TW9kZWwuZ2V0RWxlbWVudHMoKS5nZXRMZW5ndGgoKTsgCi0JCWFzc2VydEVxdWFscygiY291bnQgb2YgZWxlbWVudCBkZWNsYXJhdGlvbnMgZm91bmQgZm9yIGNvbnRlbnQgbW9kZWwgY3JlYXRlIGZyb20gIiArIEVYUEVDVEVEX1VSSSwgY29udGVudE1vZGVsLmdldEVsZW1lbnRzKCkuZ2V0TGVuZ3RoKCksIGFjdHVhbENvdW50KTsJCQotCX0JCi0KLQlwcml2YXRlIHZvaWQgZG9VUklUZXN0KFN0cmluZyBFWFBFQ1RFRF9VUkkpIHRocm93cyBNYWxmb3JtZWRVUkxFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLSAKLQkJSUNhdGFsb2cgeG1sQ2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0JCVN0cmluZyByZXNvbHZlZCA9IHhtbENhdGFsb2cucmVzb2x2ZVVSSShFWFBFQ1RFRF9VUkkpOwotCQlhc3NlcnROb3ROdWxsKCJleHBlY3RlZCB0byBmaW5kICIgKyBFWFBFQ1RFRF9VUkksIHJlc29sdmVkKTsKLQotCX0KLQkgdm9pZCBkb1VSSV9DTVRlc3QoU3RyaW5nIEVYUEVDVEVEX1VSSSkgdGhyb3dzIE1hbGZvcm1lZFVSTEV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkgCi0JCUlDYXRhbG9nIHhtbENhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotCQlTdHJpbmcgcmVzb2x2ZWQgPSB4bWxDYXRhbG9nLnJlc29sdmVVUkkoRVhQRUNURURfVVJJKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZXhwZWN0ZWQgdG8gZmluZCAiICsgRVhQRUNURURfVVJJLCByZXNvbHZlZCk7Ci0JCQotCQlDb250ZW50TW9kZWxNYW5hZ2VyIGNvbnRlbnRNb2RlbE1hbmFnZXIgPSBDb250ZW50TW9kZWxNYW5hZ2VyLmdldEluc3RhbmNlKCk7Ci0JCUNNRG9jdW1lbnQgY29udGVudE1vZGVsID0gY29udGVudE1vZGVsTWFuYWdlci5jcmVhdGVDTURvY3VtZW50KHJlc29sdmVkLCBudWxsKTsKLQkJYXNzZXJ0Tm90TnVsbCgiZXhwZWN0ZWQgdG8gY3JlYXRlIGNvbnRlbnQgbW9kZWwgZm9yICIgKyBFWFBFQ1RFRF9VUkksIGNvbnRlbnRNb2RlbCk7Ci0KLQl9Ci0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvRmlsZUJ1ZmZlckRvY3VtZW50VGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9GaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGE0N2RiYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9GaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzMSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkZpbGVCdWZmZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnRleHQuQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnRleHQucnVsZXMuU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTDsKLQotCi0KLXB1YmxpYyBjbGFzcyBGaWxlQnVmZmVyRG9jdW1lbnRUZXN0ZXIgZXh0ZW5kcyBVbnppcHBlZFByb2plY3RUZXN0ZXIgewotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZShTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgQ2xhc3MgZXhwZWN0ZWRQYXJ0aW9uZXIpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0Tm90TnVsbCgiVGVzdCBDYXNlIGluIGVycm9yLiBDb3VsZCBub3QgZmluZCBmaWxlICIgKyBmaWxlUGF0aCwgZmlsZSk7Ci0JCUlQYXRoIGxvY2F0aW9uUGF0aCA9IGZpbGUuZ2V0TG9jYXRpb24oKTsKLQkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciBidWZmZXJNYW5hZ2VyID0gRmlsZUJ1ZmZlcnMuZ2V0VGV4dEZpbGVCdWZmZXJNYW5hZ2VyKCk7Ci0JCWJ1ZmZlck1hbmFnZXIuY29ubmVjdChsb2NhdGlvblBhdGgsIG51bGwpOwotCQlJVGV4dEZpbGVCdWZmZXIgYnVmZmVyID0gYnVmZmVyTWFuYWdlci5nZXRUZXh0RmlsZUJ1ZmZlcihsb2NhdGlvblBhdGgpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBidWZmZXIuZ2V0RG9jdW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZXhwZWN0ZWREb2N1bWVudENsYXNzLmlzSW5zdGFuY2UoZG9jdW1lbnQpKTsKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCkpKTsKLQkJYnVmZmVyTWFuYWdlci5kaXNjb25uZWN0KGxvY2F0aW9uUGF0aCwgbnVsbCk7Ci0KLS8vCQlkb1Rlc3RDcmVhdGVXaXRoRmFjYWRlKGZpbGUsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcywgZXhwZWN0ZWRQYXJ0aW9uZXIpOwotCQkgCi0JfQotCi0JLyoqCi0JICogQHBhcmFtIGZpbGUKLQkgKiBAcGFyYW0gZXhwZWN0ZWREb2N1bWVudENsYXNzCi0JICogQHBhcmFtIGV4cGVjdGVkUGFydGlvbmVyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotLy8JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZVdpdGhGYWNhZGUoSUZpbGUgZmlsZSwgQ2xhc3MgZXhwZWN0ZWREb2N1bWVudENsYXNzLCBDbGFzcyBleHBlY3RlZFBhcnRpb25lcikgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLS8vCQlEb2N1bWVudExvYWRlckZvclhNTCBkb2N1bWVudExvYWRlckZvclhNTCA9IG5ldyBEb2N1bWVudExvYWRlckZvclhNTCgpOwotLy8JCUlEb2N1bWVudCBkb2N1bWVudCA9IGRvY3VtZW50TG9hZGVyRm9yWE1MLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudChmaWxlLCBudWxsKTsKLS8vCQlBc3NlcnQuYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0vLwl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0Q3JlYXRlQ3JlYXRlRW1wdHkoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZERvY3VtZW50Q2xhc3MsIENsYXNzIGV4cGVjdGVkUGFydGlvbmVyKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGZpbGUgPSAoSUZpbGUpIGZUZXN0UHJvamVjdC5maW5kTWVtYmVyKGZpbGVQYXRoKTsKLQkJYXNzZXJ0VHJ1ZSgiVGVzdCBDYXNlIGluIGVycm9yLiBOb24tZXhpc3RlbnQgZmlsZSBleGlzdGVkISAiICsgZmlsZVBhdGgsIGZpbGUgPT0gbnVsbCk7Ci0JCUlQYXRoIGxvY2F0aW9uUGF0aCA9IG5ldyBQYXRoKGZpbGVQYXRoKTsKLQkJSUZpbGUgbm9uRXhpc3RpbmdGaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUobG9jYXRpb25QYXRoKTsKLQkJbG9jYXRpb25QYXRoID0gbm9uRXhpc3RpbmdGaWxlLmdldEZ1bGxQYXRoKCk7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgYnVmZmVyTWFuYWdlciA9IEZpbGVCdWZmZXJzLmdldFRleHRGaWxlQnVmZmVyTWFuYWdlcigpOwotCQkvLyBjYW4gbm90ICJjb25uZWN0IiB0byBub24tZXhpc3RhbnQgbG9jYXRpb24KLQkJLy9idWZmZXJNYW5hZ2VyLmNvbm5lY3QobG9jYXRpb25QYXRoLCBudWxsKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gYnVmZmVyTWFuYWdlci5jcmVhdGVFbXB0eURvY3VtZW50KGxvY2F0aW9uUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoZG9jdW1lbnQpOwotCQlhc3NlcnRUcnVlKCJ3cm9uZyBjbGFzcyBvZiBkb2N1bWVudCIsIGV4cGVjdGVkRG9jdW1lbnRDbGFzcy5pc0luc3RhbmNlKGRvY3VtZW50KSk7Ci0JCWFzc2VydFRydWUoIndyb25nIHBhcnRpdGlvbmVyIGluIGRvY3VtZW50IiwgZXhwZWN0ZWRQYXJ0aW9uZXIuaXNJbnN0YW5jZShkb2N1bWVudC5nZXREb2N1bWVudFBhcnRpdGlvbmVyKCkpKTsKLQkJYnVmZmVyTWFuYWdlci5kaXNjb25uZWN0KGxvY2F0aW9uUGF0aCwgbnVsbCk7Ci0KLQl9Ci0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYUp1bmsueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQyLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlQ3JlYXRlRW1wdHkoInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50LnhtbCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlQ2FzZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JLyoKLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9jc3MvZW1wdHlGaWxlLmNzcyIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yQ1NTLmNsYXNzKTsKLQl9Ci0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZ1dpdGhKdW5rLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI5NjY3L2F1ZGkuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9ub0VuY29kaW5nLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL05vcm1hbE5vbkRlZmF1bHQuanNwIiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JKU1AuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCIsIEJhc2ljU3RydWN0dXJlZERvY3VtZW50LmNsYXNzLCBTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9ySlNQLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKCJ0ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdENyZWF0ZSgidGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvckpTUC5jbGFzcyk7Ci0JfQotKi8KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9HZXREb2N1bWVudFJlZ2lvbnNUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9HZXREb2N1bWVudFJlZ2lvbnNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NTI3NmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvR2V0RG9jdW1lbnRSZWdpb25zVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotCi1wdWJsaWMgY2xhc3MgR2V0RG9jdW1lbnRSZWdpb25zVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIGJvb2xlYW4gZkFscmVhZHlTZXR1cCA9IGZhbHNlOwotCXByaXZhdGUgSVN0cnVjdHVyZWREb2N1bWVudCBmRG9jID0gbnVsbDsKLQlwcml2YXRlIFN0cmluZyBmVGV4dCA9IG51bGw7Ci0JCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYoIWZBbHJlYWR5U2V0dXApIHsKLQkJCUlTdHJ1Y3R1cmVkTW9kZWwgc01vZGVsID0gY3JlYXRlTW9kZWwoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCQlmRG9jID0gc01vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJZlRleHQgPSAiPGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PiB0ZXh0IDwvYm9keT48L2h0bWw+IjsKLQkJCWZEb2Muc2V0KGZUZXh0KTsKLQkJCWZBbHJlYWR5U2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRBbGxSZWdpb25zKCkgewotCi0JCS8vIGFsbCByZWdpb25zCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zID0gZkRvYy5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25zKCk7Ci0JCWNoZWNrUmVnaW9ucyhyZWdpb25zLCA3LCAiPGh0bWw+IiwgIjwvaHRtbD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RXhjbHVkZUVuZHMoKSB7Ci0JCQotCQkvLyBsZWF2ZSBvZmYgdGhlIGVuZCByZWdpb25zCi0JCS8vIDxodG1sPls8aGVhZD48Ym9keT4gdGV4dCA8L2JvZHk+XTwvaHRtbD4KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoNixmVGV4dC5sZW5ndGgoKSAtICg2KzcpKTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDUsICI8aGVhZD4iLCAiPC9ib2R5PiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RJbmNsdWRlRW5kcygpIHsKLQkJCi0JCS8vIGluY2x1ZGUgZW5kIHJlZ2lvbnMKLQkJLy8gPGh0W21sPjxoZWFkPjwvaGVhZD48Ym9keT4gdGV4dCA8L2JvZHk+PC9odF1tbD4KLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoMyxmVGV4dC5sZW5ndGgoKS0gKDMrMykpOwotCQlhc3NlcnRFcXVhbHMoNywgcmVnaW9ucy5sZW5ndGgpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaXJzdFR3bygpIHsKLQkJLy8gZmlyc3QgMiByZWdpb25zCi0JCS8vIDxoW3RtbD48aF1lYWQ+PC9oZWFkPgotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygyLDYpOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgMiwgIjxodG1sPiIsICI8aGVhZD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmlnaHRTZWFtKCkgewotCQkvLyByaWdodCBzZWFtCi0JCS8vIFs8aHRtbD48aGVhZD5dPC9oZWFkPgotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygwLDEyKTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDIsICI8aHRtbD4iLCAiPGhlYWQ+Iik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdExlZnRTZWFtKCkgewotCQkvLyBsZWZ0IHNlYW0KLQkJLy8gPC9ib2R5Pls8L2h0bWw+XQotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucyhmVGV4dC5sZW5ndGgoKS03LCA3KTsKLQkJY2hlY2tSZWdpb25zKHJlZ2lvbnMsIDEsICI8L2h0bWw+IiwgIjwvaHRtbD4iKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGFzdCgpIHsKLQkJLy8gbGFzdCByZWdpb24gb25seQotCQkvLyA8L2JvZHk+PC9odG1sPnwKLQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbltdIHJlZ2lvbnMgPSBmRG9jLmdldFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnMoZlRleHQubGVuZ3RoKCksIDApOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgMSwgIjwvaHRtbD4iLCAiPC9odG1sPiIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGaXJzdCgpIHsKLQkJLy8gZmlyc3QgcmVnaW9uIG9ubHkKLQkJLy8gfDxodG1sPjxoZWFkPgotCQlJU3RydWN0dXJlZERvY3VtZW50UmVnaW9uW10gcmVnaW9ucyA9IGZEb2MuZ2V0U3RydWN0dXJlZERvY3VtZW50UmVnaW9ucygwLDApOwotCQljaGVja1JlZ2lvbnMocmVnaW9ucywgMSwgIjxodG1sPiIsICI8aHRtbD4iKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgY2hlY2tSZWdpb25zKElTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb25bXSByZWdpb25zLCBpbnQgZXhwZWN0ZWRMZW5ndGgsIFN0cmluZyBmaXJzdFRleHQsIFN0cmluZyBsYXN0VGV4dCkgewotCQkKLQkJLy9mb3IgKGludCBpID0gMDsgaSA8IHJlZ2lvbnMubGVuZ3RoOyBpKyspIAotCQkvLwlTeXN0ZW0ub3V0LnByaW50bG4ocmVnaW9uc1tpXS5nZXRUZXh0KCkpOwotCQkKLQkJYXNzZXJ0RXF1YWxzKGV4cGVjdGVkTGVuZ3RoLCByZWdpb25zLmxlbmd0aCk7Ci0JCQotCQlTdHJpbmcgdGV4dCA9IHJlZ2lvbnNbMF0uZ2V0VGV4dCgpOwotCQlhc3NlcnRFcXVhbHModGV4dCwgZmlyc3RUZXh0KTsKLQkJCi0JCXRleHQgPSByZWdpb25zW3JlZ2lvbnMubGVuZ3RoLTFdLmdldFRleHQoKTsKLQkJYXNzZXJ0RXF1YWxzKHRleHQsIGxhc3RUZXh0KTsKLQl9Ci0JCi0JcHJpdmF0ZSBJU3RydWN0dXJlZE1vZGVsIGNyZWF0ZU1vZGVsKFN0cmluZyBjb250ZW50VHlwZUlEKSB7Ci0JCS8vIGNyZWF0ZSBhbiBlbXB0eSBtb2RlbCB3aXRoIGl0cyBkZWZhdWx0IGZhY3RvcmllcwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVVbk1hbmFnZWRTdHJ1Y3R1cmVkTW9kZWxGb3IoY29udGVudFR5cGVJRCk7Ci0JCXJldHVybiBtb2RlbDsKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0U3RydWN0dXJlZERvY3VtZW50LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9UZXN0U3RydWN0dXJlZERvY3VtZW50LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMWYwM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFN0cnVjdHVyZWREb2N1bWVudC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcyICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRQb3NpdGlvbkNhdGVnb3J5RXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuUG9zaXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuRW5jb2RpbmdNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuSVN0cnVjdHVyZWREb2N1bWVudExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5ldmVudHMuTmV3RG9jdW1lbnRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLk5vQ2hhbmdlRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmV2ZW50cy5SZWdpb25zUmVwbGFjZWRFdmVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXZlbnRzLlN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZERvY3VtZW50UmVnaW9uTGlzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi1wdWJsaWMgY2xhc3MgVGVzdFN0cnVjdHVyZWREb2N1bWVudCBleHRlbmRzIFRlc3RDYXNlIHsKLQotCWNsYXNzIFRlc3RMaXN0ZW5lciBpbXBsZW1lbnRzIElTdHJ1Y3R1cmVkRG9jdW1lbnRMaXN0ZW5lciB7Ci0KLQkJYm9vbGVhbiBuZXdNb2RlbENhbGxlZCA9IGZhbHNlOwotCQlib29sZWFuIG5vQ2hhbmdlQ2FsbGVkID0gZmFsc2U7Ci0JCWJvb2xlYW4gbm9kZXNSZXBsYWNlZENhbGxlZCA9IGZhbHNlOwotCQlib29sZWFuIHJlZ2lvbkNoYW5nZWRDYWxsZWQgPSBmYWxzZTsKLQkJYm9vbGVhbiByZWdpb25zUmVwbGFjZWRDYWxsZWQgPSBmYWxzZTsKLQotCQlwdWJsaWMgdm9pZCBuZXdNb2RlbChOZXdEb2N1bWVudEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQluZXdNb2RlbENhbGxlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBub0NoYW5nZShOb0NoYW5nZUV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQlub0NoYW5nZUNhbGxlZCA9IHRydWU7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBub2Rlc1JlcGxhY2VkKFN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbnNSZXBsYWNlZEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQlub2Rlc1JlcGxhY2VkQ2FsbGVkID0gdHJ1ZTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJlZ2lvbkNoYW5nZWQoUmVnaW9uQ2hhbmdlZEV2ZW50IHN0cnVjdHVyZWREb2N1bWVudEV2ZW50KSB7Ci0JCQlyZWdpb25DaGFuZ2VkQ2FsbGVkID0gdHJ1ZTsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHJlZ2lvbnNSZXBsYWNlZChSZWdpb25zUmVwbGFjZWRFdmVudCBzdHJ1Y3R1cmVkRG9jdW1lbnRFdmVudCkgewotCQkJcmVnaW9uc1JlcGxhY2VkQ2FsbGVkID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc1NldHVwID0gZmFsc2U7Ci0JCi0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmUHJvamVjdE5hbWUgPSAiRE9DVU1FTlQtTE9BREVSIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmWmlwRmlsZU5hbWUgPSAieG1sLWRvY3VtZW50LWxvYWRlci10ZXN0cy56aXAiOwotCi0JcHVibGljIFRlc3RTdHJ1Y3R1cmVkRG9jdW1lbnQoKSB7Ci0JCXN1cGVyKCJUZXN0U3RydWN0dXJlZERvY3VtZW50Iik7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQlzdXBlci5zZXRVcCgpOwotCQlpZiAoIXRoaXMuaXNTZXR1cCkgewotCQkJCi0JCQlkb1NldHVwKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQotCQkvLyByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQotCQlQcm9qZWN0VW56aXBVdGlsaXR5IHVuemlwVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCUZpbGUgemlwRmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUiwgZlppcEZpbGVOYW1lLCBQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIpOwotCQl1bnppcFV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgcGxhdGZvcm1Mb2NhdGlvbi5nZXRVUkwoKS5nZXRGaWxlKCkpOwotCQl1bnppcFV0aWwuaW5pdEphdmFQcm9qZWN0KGZQcm9qZWN0TmFtZSk7Ci0JfQotCi0JLyoqCi0JICogQmUgc3VyZSB0byByZWxlYXNlIGFueSBtb2RlbHMgb2J0YWluZWQgZnJvbSB0aGlzIG1ldGhvZC4KLQkgKiAKLQkgKi8KLQlJU3RydWN0dXJlZE1vZGVsIGdldFRlc3RNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChmUHJvamVjdE5hbWUpOwotCQlJRmlsZSBpRmlsZSA9IChJRmlsZSkgcHJvamVjdC5maW5kTWVtYmVyKCIvZmlsZXMvc2ltcGxlLnhtbCIpOwotCQkvLyBmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiCi0KLQotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChpRmlsZSk7Ci0KLQotCQlyZXR1cm4gbW9kZWw7Ci0KLQl9Ci0KLQotCi0JcHVibGljIHZvaWQgdGVzdERvY3VtZW50Q2hhbmdpbmdMaXN0ZW5lcigpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBUT0RPOiBtYXkgbmVlZCB0byBmYWtlIGV2ZW50cyB0byByZWFsbHkgdGVzdHMgdGhpcwotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCQlUZXN0TGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgVGVzdExpc3RlbmVyKCk7Ci0KLQkJCXNEb2MuYWRkRG9jdW1lbnRDaGFuZ2luZ0xpc3RlbmVyKGxpc3RlbmVyKTsKLQkJCVN0cmluZyB0ZXh0ID0gc0RvYy5nZXQoKTsKLQkJCXNEb2MucmVwbGFjZSgwLCB0ZXh0Lmxlbmd0aCgpLCB0ZXh0KTsKLQotCQkJc0RvYy5yZW1vdmVEb2N1bWVudENoYW5naW5nTGlzdGVuZXIobGlzdGVuZXIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZWFkT25seSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0KCk7Ci0KLQkJCXNEb2MuY2xlYXJSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKTsKLQkJCWFzc2VydEZhbHNlKHNEb2MuY29udGFpbnNSZWFkT25seSgwLCB0ZXh0Lmxlbmd0aCgpKSk7Ci0KLQkJCXNEb2MubWFrZVJlYWRPbmx5KDAsIDEwKTsKLQkJCWFzc2VydFRydWUoc0RvYy5jb250YWluc1JlYWRPbmx5KDksIDEpKTsKLQkJCWFzc2VydFRydWUoc0RvYy5jb250YWluc1JlYWRPbmx5KDAsIHRleHQubGVuZ3RoKCkpKTsKLQotCQkJc0RvYy5jbGVhclJlYWRPbmx5KDAsIHRleHQubGVuZ3RoKCkpOwotCQkJYXNzZXJ0RmFsc2Uoc0RvYy5jb250YWluc1JlYWRPbmx5KDAsIHRleHQubGVuZ3RoKCkpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnRSZWdpb24gciA9IHNEb2MuZ2V0UmVnaW9uQXRDaGFyYWN0ZXJPZmZzZXQoMCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgcmVnaW9uIGF0IG9mZnNldDogMCIsIHIpOwotCi0JCQlyID0gc0RvYy5nZXRSZWdpb25BdENoYXJhY3Rlck9mZnNldChzRG9jLmdldExlbmd0aCgpKTsKLQkJCWFzc2VydE5vdE51bGwoImNvdWxkbid0IGdldCByZWdpb24gYXQgb2Zmc2V0OiAiICsgc0RvYy5nZXRMZW5ndGgoKSwgcik7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCi0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0UmVnaW9uTGlzdCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJSVN0cnVjdHVyZWREb2N1bWVudFJlZ2lvbkxpc3QgcmVnaW9ucyA9IHNEb2MuZ2V0UmVnaW9uTGlzdCgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGRuJ3QgZ2V0IHJlZ2lvbiBsaXN0IiwgcmVnaW9ucyk7Ci0JCQlhc3NlcnRFcXVhbHMoMTcsIHJlZ2lvbnMuZ2V0TGVuZ3RoKCkpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRUZXh0KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlTdHJpbmcgdGV4dCA9IHNEb2MuZ2V0VGV4dCgpOwotCQkJU3RyaW5nIGV4cGVjdGVkVGV4dCA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxyXG48bGlzdD5cclxuXHQ8aXRlbTEgYXR0cjE9XCJhdHRyMVwiIGF0dHIyPVwiYXR0cjJcIiBhdHRyMz1cImF0dHIzXCI+XHJcblx0XHRvbmVcclxuXHQ8L2l0ZW0xPlxyXG5cdDxpdGVtMiBhdHRyMT1cImF0dHIxXCIgYXR0cjI9XCJhdHRyMlwiIGF0dHIzPVwiYXR0cjNcIiA+XHJcblx0XHR0d29cclxuXHQ8L2l0ZW0yPlxyXG5cdDxpdGVtMyBhdHRyMT1cImF0dHIxXCIgYXR0cjI9XCJhdHRyMlwiIGF0dHIzPVwiYXR0cjNcIj5cclxuXHRcdHRocmVlXHJcblx0PC9pdGVtMz5cclxuPC9saXN0PiI7Ci0JCQlhc3NlcnRFcXVhbHMoZXhwZWN0ZWRUZXh0LCB0ZXh0KTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0TmV3SW5zdGFuY2UoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgbmV3RG9jID0gc0RvYy5uZXdJbnN0YW5jZSgpOwotCQkJYXNzZXJ0Tm90U2FtZSgiZG9jdW1lbnQgaW5zdGFuY2VzIHNob3VsZCBiZSBkaWZmZXJlbnQiLCBzRG9jLCBuZXdEb2MpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RSZXBsYWNlVGV4dCgpIHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXNEb2MucmVwbGFjZSgwLCBzRG9jLmdldExlbmd0aCgpLCAicmVwbGFjZWQiKTsKLQotCQkJU3RyaW5nIHRleHQgPSBzRG9jLmdldFRleHQoKTsKLQkJCWFzc2VydEVxdWFscygicmVwbGFjZWQiLCB0ZXh0KTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0T3ZlcnJpZGVSZWFkT25seVJlcGxhY2VUZXh0KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzRG9jLm1ha2VSZWFkT25seSgwLCAxKTsKLQkJCXNEb2MucmVwbGFjZVRleHQodGhpcywgMCwgc0RvYy5nZXRMZW5ndGgoKSwgInJlcGxhY2VkIik7Ci0JCQlhc3NlcnROb3RTYW1lKCJ0ZXh0IHNob3VsZCBub3QgaGF2ZSBiZWVuIHJlcGxhY2FibGUgKHJlYWQgb25seSkiLCAicmVwbGFjZWQiLCBzRG9jLmdldFRleHQoKSk7Ci0KLQkJCXNEb2MucmVwbGFjZVRleHQodGhpcywgMCwgc0RvYy5nZXRMZW5ndGgoKSwgInJlcGxhY2VkIiwgdHJ1ZSk7Ci0JCQlhc3NlcnRFcXVhbHMoInRleHQgc2hvdWxkIGhhdmUgYmVlbiBmb3JjZWQgcmVwbGFjZWQiLCAicmVwbGFjZWQiLCBzRG9jLmdldFRleHQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNldFRleHQoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCXNEb2Muc2V0VGV4dCh0aGlzLCAic2V0IHRleHQiKTsKLQotCQkJYXNzZXJ0RXF1YWxzKCJzZXQgdGV4dCBmYWlsZWQiLCAic2V0IHRleHQiLCBzRG9jLmdldFRleHQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEVuY29kaW5nTWVtZW50bygpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG51bGw7Ci0JCQlzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlFbmNvZGluZ01lbWVudG8gbWVtZW50byA9IHNEb2MuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJjb3VsZG4ndCBnZXQgZW5jb2RpbmcgbWVtZW50byIsIG1lbWVudG8pOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXREZXRlY3RlZExpbmVEZWxpbWl0ZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlTdHJpbmcgcGxhdGZvcm1EZWxpbWl0ZXIgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJU3RyaW5nIGRlbGltID0gc0RvYy5nZXRMaW5lRGVsaW1pdGVyKCk7Ci0JCQlhc3NlcnRFcXVhbHMoIndyb25nIHByZWZlcnJlZCBsaW5lIGRlbG1pdGVyIiwgcGxhdGZvcm1EZWxpbWl0ZXIsIGRlbGltKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2V0RW5jb2RpbmdNZW1lbnRvKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlFbmNvZGluZ01lbWVudG8gbWVtZW50byA9IG5ldyBFbmNvZGluZ01lbWVudG8oKTsKLQkJCXNEb2Muc2V0RW5jb2RpbmdNZW1lbnRvKG1lbWVudG8pOwotCQkJRW5jb2RpbmdNZW1lbnRvIGdvdHRlbk1lbWVudG8gPSBzRG9jLmdldEVuY29kaW5nTWVtZW50bygpOwotCQkJYXNzZXJ0RXF1YWxzKCJtZW1lbnRvcyBkb24ndCBtYXRjaCIsIG1lbWVudG8sIGdvdHRlbk1lbWVudG8pOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCXZvaWQgc2V0RGV0ZWN0ZWRMaW5lRGVsaW1pdGVyKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlzRG9jLnNldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoIlxuIik7Ci0JCQlTdHJpbmcgZGVsaW0gPSBzRG9jLmdldFByZWZlcnJlZExpbmVEZWxpbWl0ZXIoKTsKLQkJCWFzc2VydEVxdWFscygic2V0IGxpbmUgZGVsaW1pdGVyIGZhaWxlZCIsICJcbiIsIGRlbGltKTsKLQotCQkJc0RvYy5zZXRQcmVmZXJyZWRMaW5lRGVsaW1pdGVyKCJcclxuIik7Ci0JCQlkZWxpbSA9IHNEb2MuZ2V0UHJlZmVycmVkTGluZURlbGltaXRlcigpOwotCQkJYXNzZXJ0RXF1YWxzKCJzZXQgbGluZSBkZWxpbWl0ZXIgZmFpbGVkIiwgIlxyXG4iLCBkZWxpbSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFN0cmluZ01hdGNoZXMoKSB7Ci0JCS8vIFRPRE86IHdpbGwgbmVlZCBhIHRlc3Qgd2hlbiB0aGlzIEFQSSBpcyBjcmVhdGVkCi0JCS8vIElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJLy8gSVN0cnVjdHVyZWREb2N1bWVudCBzRG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZVBvc2l0aW9uKCkgdGhyb3dzIEJhZFBvc2l0aW9uQ2F0ZWdvcnlFeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJUG9zaXRpb24gcCA9IG5ldyBQb3NpdGlvbigwLCAxMCk7Ci0JCQlTdHJpbmdbXSBjYXRlZ29yaWVzID0gc0RvYy5nZXRQb3NpdGlvbkNhdGVnb3JpZXMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgY2F0ZWdvcmllcy5sZW5ndGg7IGkrKykgewotCQkJCXNEb2MuYWRkUG9zaXRpb24oY2F0ZWdvcmllc1tpXSwgcCk7Ci0JCQl9Ci0JCQlpbnQgZm91bmQgPSAwOwotCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjYXRlZ29yaWVzLmxlbmd0aDsgaSsrKSB7Ci0JCQkJUG9zaXRpb25bXSBwb3NpdGlvbnMgPSBzRG9jLmdldFBvc2l0aW9ucyhjYXRlZ29yaWVzW2ldKTsKLQkJCQlmb3IgKGludCBqID0gMDsgaiA8IHBvc2l0aW9ucy5sZW5ndGg7IGorKykgewotCQkJCQlpZiAocG9zaXRpb25zW2pdID09IHApIHsKLQkJCQkJCWZvdW5kKys7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiBwb3NpdGlvbnMiLCBjYXRlZ29yaWVzLmxlbmd0aCwgZm91bmQpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1Rlc3RYTUxEb2N1bWVudExvYWRlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFhNTERvY3VtZW50TG9hZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1N2EwODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVGVzdFhNTERvY3VtZW50TG9hZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9jdW1lbnQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uub3NnaS5zZXJ2aWNlLmRhdGFsb2NhdGlvbi5Mb2NhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuWE1MRG9jdW1lbnRMb2FkZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RYTUxEb2N1bWVudExvYWRlciBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZQcm9qZWN0TmFtZSA9IkRPQ1VNRU5ULUxPQURFUiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQkJCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0JCi0JcHJpdmF0ZSB2b2lkIGRvU2V0dXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsJCi0JCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCQkKLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotCX0KLQkKLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTmV3RW1wdHlTdHJ1Y3R1cmVkRG9jdW1lbnQoKSB7Ci0KLQkJWE1MRG9jdW1lbnRMb2FkZXIgeG1sRG9jdW1lbnRMb2FkZXIgPSBuZXcgWE1MRG9jdW1lbnRMb2FkZXIoKTsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gbnVsbDsKLQkJCi0JCWRvY3VtZW50ID0geG1sRG9jdW1lbnRMb2FkZXIuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBjcmVhdGUgRW1wdHkgZG9jdW1lbnQiLCBkb2N1bWVudCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnRGcm9tRmlsZSgpIHsKLQkJLy8gZnJvbSBhIGZpbGUJCi0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgoZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIikpOwotCQkJCi0JCVhNTERvY3VtZW50TG9hZGVyIHhtbERvY3VtZW50TG9hZGVyID0gbmV3IFhNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlkb2N1bWVudCA9IHhtbERvY3VtZW50TG9hZGVyLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudChmaWxlKTsKLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7CQotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJmYWlsZWQgdG8gY3JlYXRlIGRvY3VtZW50IGZyb20gSUZpbGUiLCBkb2N1bWVudCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnRGcm9tSW5wdXRTdHJlYW0oKSB7Ci0JCVN0cmluZyBmaWxlTG9jYXRpb24gPSAiL2ZpbGVzL3NpbXBsZS54bWwiOwotCQlTdHJpbmcgYWJzb2x1dGVGaWxlTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCkgKyBmUHJvamVjdE5hbWUgKyBmaWxlTG9jYXRpb247Ci0JCQotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZQcm9qZWN0TmFtZSArICIvZmlsZXMvc2ltcGxlLnhtbCIpKTsKLQkJCi0JCVhNTERvY3VtZW50TG9hZGVyIHhtbERvY3VtZW50TG9hZGVyID0gbmV3IFhNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCQotCQl0cnkgewotCQkJZG9jdW1lbnQgPSB4bWxEb2N1bWVudExvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoYWJzb2x1dGVGaWxlTG9jYXRpb24sIGZpbGUuZ2V0Q29udGVudHMoKSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewkKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGNyZWF0ZSBkb2N1bWVudCBmcm9tIElucHV0U3RyZWFtIiwgZG9jdW1lbnQpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3JlYXRlTmV3RG9jdW1lbnRGcm9tUmVhZGVyV2l0aEVuY29kaW5nUnVsZSgpIHsKLQkJCi0JCVN0cmluZyBmaWxlTG9jYXRpb24gPSAiL2ZpbGVzL3NpbXBsZS54bWwiOwotCQlTdHJpbmcgYWJzb2x1dGVGaWxlTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCkuZ2V0VVJMKCkuZ2V0UGF0aCgpLnRvU3RyaW5nKCkgKyBmUHJvamVjdE5hbWUgKyBmaWxlTG9jYXRpb247Ci0JCQotCQlJRmlsZSBmaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZQcm9qZWN0TmFtZSArICIvZmlsZXMvc2ltcGxlLnhtbCIpKTsKLQkJCi0JCVhNTERvY3VtZW50TG9hZGVyIHhtbERvY3VtZW50TG9hZGVyID0gbmV3IFhNTERvY3VtZW50TG9hZGVyKCk7Ci0JCUlEb2N1bWVudCBkb2N1bWVudCA9IG51bGw7Ci0JCQotCQl0cnkgewotCQkJZG9jdW1lbnQgPSB4bWxEb2N1bWVudExvYWRlci5jcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnQoYWJzb2x1dGVGaWxlTG9jYXRpb24sIGZpbGUuZ2V0Q29udGVudHMoKSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewkKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGNyZWF0ZSBkb2N1bWVudCBmcm9tIElucHV0U3RyZWFtIHdpdGggRW5jb2RpbmdSdWxlIiwgZG9jdW1lbnQpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvY3VtZW50L1RyYW5zaXRpb25UZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVHJhbnNpdGlvblRlc3RzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxYTRkYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVHJhbnNpdGlvblRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5kb2N1bWVudDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLkZpbGVCdWZmZXJzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUuZmlsZWJ1ZmZlcnMuSVRleHRGaWxlQnVmZmVyTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudEV4dGVuc2lvbjM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudGV4dC5CYXNpY1N0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudGV4dC5ydWxlcy5TdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyRm9yWE1MOwotCi0vKioKLSAqIEBhdXRob3IgbnNkCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFRyYW5zaXRpb25UZXN0cyBleHRlbmRzIFVuemlwcGVkUHJvamVjdFRlc3RlciB7Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgVHJhbnNpdGlvblRlc3RzKCkgewotCQlzdXBlcigpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdFNvZnRSZXZlcnQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZVBhdGggPSAidGVzdGZpbGVzL3htbC9FbXB0eUZpbGUueG1sIjsgLy8kTk9OLU5MUy0xJAotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIlRlc3QgQ2FzZSBpbiBlcnJvci4gQ291bGQgbm90IGZpbmQgZmlsZSAiICsgZmlsZVBhdGgsIGZpbGUpOyAvLyROT04tTkxTLTEkCi0JCUlQYXRoIGxvY2F0aW9uUGF0aCA9IGZpbGUuZ2V0TG9jYXRpb24oKTsKLQkJSVRleHRGaWxlQnVmZmVyTWFuYWdlciBidWZmZXJNYW5hZ2VyID0gRmlsZUJ1ZmZlcnMuZ2V0VGV4dEZpbGVCdWZmZXJNYW5hZ2VyKCk7Ci0JCWJ1ZmZlck1hbmFnZXIuY29ubmVjdChsb2NhdGlvblBhdGgsIG51bGwpOwotCQlJVGV4dEZpbGVCdWZmZXIgYnVmZmVyID0gYnVmZmVyTWFuYWdlci5nZXRUZXh0RmlsZUJ1ZmZlcihsb2NhdGlvblBhdGgpOwotCQlJRG9jdW1lbnQgZG9jdW1lbnQgPSBidWZmZXIuZ2V0RG9jdW1lbnQoKTsKLQkJYXNzZXJ0Tm90TnVsbChkb2N1bWVudCk7Ci0JCWFzc2VydFRydWUoIndyb25nIGNsYXNzIG9mIGRvY3VtZW50IiwgZG9jdW1lbnQgaW5zdGFuY2VvZiBCYXNpY1N0cnVjdHVyZWREb2N1bWVudCk7IC8vJE5PTi1OTFMtMSQKLQkJYXNzZXJ0VHJ1ZSgid3JvbmcgcGFydGl0aW9uZXIgaW4gZG9jdW1lbnQuIiwgKChJRG9jdW1lbnRFeHRlbnNpb24zKSBkb2N1bWVudCkuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKSBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwpOyAvLyROT04tTkxTLTEkCi0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KChJU3RydWN0dXJlZERvY3VtZW50KSBkb2N1bWVudCk7Ci0JCXRyeSB7Ci0JCQl0cnkgewotCQkJCWRvY3VtZW50LnJlcGxhY2UoMCwgMCwgIl9fIik7IC8vJE5PTi1OTFMtMSQKLQkJCQlkb2N1bWVudC5yZXBsYWNlKDIsIDAsICI8YSIpOyAvLyROT04tTkxTLTEkCi0JCQkJZG9jdW1lbnQucmVwbGFjZSg0LCAwLCAiPiIpOyAvLyROT04tTkxTLTEkCi0JCQkJZG9jdW1lbnQucmVwbGFjZSg1LCAwLCAiICAiKTsgLy8kTk9OLU5MUy0xJAotCQkJfQotCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQlhc3NlcnROdWxsKGUpOwotCQkJfQotCQkJZG9jdW1lbnQuc2V0KCIiKTsgLy8kTk9OLU5MUy0xJAotCQl9Ci0JCWZpbmFsbHkgewotCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0KLQkJCWJ1ZmZlck1hbmFnZXIuZGlzY29ubmVjdChsb2NhdGlvblBhdGgsIG51bGwpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9jdW1lbnQvVW56aXBwZWRQcm9qZWN0VGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9VbnppcHBlZFByb2plY3RUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg4YzU0YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9kb2N1bWVudC9VbnppcHBlZFByb2plY3RUZXN0ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50OwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlUm9vdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuU1NFTW9kZWxYTUxUZXN0c1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0KLS8qIAotICogTWFkZSBhYnN0cmFjdCwgc28gd29uJ3QgYmUgYXV0b21hdGljYWxseSBwaWNrZWQgdXAgYXMgdGVzdCAoc2luY2UgaW50ZW5kZWQgdG8gYmUgc3ViY2xhc3NlZCkuCi0gKi8KLXB1YmxpYyBhYnN0cmFjdCBjbGFzcyBVbnppcHBlZFByb2plY3RUZXN0ZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcm90ZWN0ZWQgc3RhdGljIElQcm9qZWN0IGZUZXN0UHJvamVjdDsKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZUZXN0UHJvamVjdEluaXRpYWxpemVkOwotCXByaXZhdGUgc3RhdGljIGludCBuU2V0dXBzID0gMDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QUk9KRUNUX05BTUUgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLm5ld3Rlc3RzIjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnNldFVwKCk7Ci0JCW5TZXR1cHMrKzsKLQkJaWYgKCFmVGVzdFByb2plY3RJbml0aWFsaXplZCkgewotCQkJZ2V0QW5kQ3JlYXRlUHJvamVjdCgpOwotCQkJLy8gdW56aXAgZmlsZXMgdG8gdGhlIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQkJU3RyaW5nIGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyA9IGZUZXN0UHJvamVjdC5nZXRMb2NhdGlvbigpLnRvT1NTdHJpbmcoKTsKLQkJCVN0cmluZyBkZXN0aW5hdGlvbkZvbGRlciA9IGRlc3RpbmF0aW9uUHJvamVjdFN0cmluZyArICIvIjsKLQkJCS8vIHRoaXMgemlwIGZpbGUgaXMgc2l0dGluZyBpbiB0aGUgInJvb3QiIG9mIHRlc3QgcGx1Z2luCi0JCQlGaWxlIHppcEZpbGUgPSBTU0VNb2RlbFhNTFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKCJ0ZXN0ZmlsZXMuemlwIik7Ci0JCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCXByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIGRlc3RpbmF0aW9uRm9sZGVyKTsKLQkJCXByb2pVdGlsLmluaXRKYXZhUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQlmVGVzdFByb2plY3RJbml0aWFsaXplZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQluU2V0dXBzLS07Ci0JCWlmIChuU2V0dXBzID09IDApIHsKLQkJCWlmICghREVCVUcpIHsKLQkJCQkvLwkJCQlEaXNwbGF5IGRpc3BsYXkgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKLQkJCQkvLwkJCQlkaXNwbGF5LmFzeW5jRXhlYyhuZXcgUnVubmFibGUoKSB7Ci0JCQkJLy8JCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkvLwkJCQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJCS8vCQkJCQkJSVByb2plY3QgcHJvaiA9IGZUZXN0UHJvamVjdDsKLQkJCQkvLwkJCQkJCWZUZXN0UHJvamVjdCA9IG51bGw7Ci0JCQkJLy8JCQkJCQl0cnkgewotCQkJCS8vCQkJCQkJCXByb2pVdGlsLmRlbGV0ZVByb2plY3QocHJvaik7Ci0JCQkJLy8JCQkJCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCS8vCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJLy8JCQkJCQl9Ci0JCQkJLy8JCQkJCX0KLQkJCQkvLwkJCQl9KTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy9UZXN0c1BsdWdpbiB0ZXN0c1BsdWdpbiA9IChUZXN0c1BsdWdpbikKLQkJLy8gUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcudGVzdHMiKTsKLQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBnZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCWZUZXN0UHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCS8vIHRoaXMgZm9ybSBjcmVhdGVzIHByb2plY3QgYXMgImxpbmtlZCIgYmFjayB0byAnZmlsZVJvb3QnCi0JCS8vY3JlYXRlUHJvamVjdCh0ZXN0UHJvamVjdCwgbmV3IFBhdGgoZmlsZVJvb3QpLCBudWxsKTsKLQkJY3JlYXRlUHJvamVjdChmVGVzdFByb2plY3QsIG51bGwsIG51bGwpOwotCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoZlRlc3RQcm9qZWN0LmV4aXN0cygpKTsKLQkJLy8JCUlDb250YWluZXIgZG90ZXN0RmlsZXMgPSB0ZXN0UHJvamVjdC5nZXRGb2xkZXIoImRvdGVzdEZpbGVzIik7Ci0JCS8vCQlhc3NlcnRUcnVlKGRvdGVzdEZpbGVzLmV4aXN0cygpKTsKLQkJLy8JCUlSZXNvdXJjZVtdIGFsbEZvbGRlcnMgPSBkb3Rlc3RGaWxlcy5tZW1iZXJzKCk7Ci0JCS8vCQlhc3NlcnROb3ROdWxsKGFsbEZvbGRlcnMpOwotCX0KLSAKLQlwcml2YXRlIHN0YXRpYyB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCX0KLQkJbW9uaXRvci5iZWdpblRhc2soImNyZWF0aW5nIHRlc3QgcHJvamVjdCIsIDEwKTsKLQkJLy8gY3JlYXRlIHRoZSBwcm9qZWN0Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qZWN0LmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJaWYgKFBsYXRmb3JtLmdldExvY2F0aW9uKCkuZXF1YWxzKGxvY2F0aW9uUGF0aCkpIHsKLQkJCQkJbG9jYXRpb25QYXRoID0gbnVsbDsKLQkJCQl9Ci0JCQkJZGVzYy5zZXRMb2NhdGlvbihsb2NhdGlvblBhdGgpOwotCQkJCXByb2plY3QuY3JlYXRlKGRlc2MsIG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQkJaWYgKCFwcm9qZWN0LmlzT3BlbigpKSB7Ci0JCQkJcHJvamVjdC5vcGVuKG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vbml0b3IgIT0gbnVsbCkgewotCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgd29ya3NwYWNlIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05hbWVWYWxpZGF0b3JUZXN0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZG9tL05hbWVWYWxpZGF0b3JUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMDkzNDI0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2RvbS9OYW1lVmFsaWRhdG9yVGVzdHMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKiAgICAgCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuZG9tOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLk5hbWVWYWxpZGF0b3I7Ci0KLXB1YmxpYyBjbGFzcyBOYW1lVmFsaWRhdG9yVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGludCBuVHJpYWxzID0gMTAwOwotCi0JcHVibGljIE5hbWVWYWxpZGF0b3JUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0KGludCB0ZXN0TnVtYmVyLCBTdHJpbmcgdGVzdFN0cmluZywgQm9vbGVhbiBleHBlY3RlZFZhbGlkaXR5KSB7Ci0JCWJvb2xlYW4gaXNWYWxpZCA9IE5hbWVWYWxpZGF0b3IuaXNWYWxpZCh0ZXN0U3RyaW5nKTsKLQkJYXNzZXJ0RXF1YWxzKCJ0ZXN0TnVtYmVyOiAiICsgdGVzdE51bWJlciwgZXhwZWN0ZWRWYWxpZGl0eS5ib29sZWFuVmFsdWUoKSwgaXNWYWxpZCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RJc1ZhbGlkKCkgewotCQlPYmplY3RbXVtdIHRlc3RlZXMgPSBuZXcgT2JqZWN0W11bXXsKLQkJCQkJeyJpbml0aWFsIixCb29sZWFuLlRSVUV9LAotCQkJCQl7ImZvbyIsQm9vbGVhbi5UUlVFfSwKLQkJCQkJeyI0IixCb29sZWFuLkZBTFNFfSwKLQkJCQkJeyI5OTk5IiwgQm9vbGVhbi5GQUxTRX0sCi0JCQkJCXsiZjk5OTkiLCBCb29sZWFuLlRSVUV9LAotCQkJCQl7IiIsIEJvb2xlYW4uRkFMU0V9LAotCQkJCQl7ImdvdCBzcGFjZSIsIEJvb2xlYW4uRkFMU0V9LAotCQkJCQl7IiBzcGFjZWJlZm9yZSIsIEJvb2xlYW4uRkFMU0V9LAotCQkJCQl7InNwYWNlYWZ0ZXIgIiwgQm9vbGVhbi5GQUxTRX0sCi0JCQkJCXsibnM6bmFtZXNwYWNlIiwgQm9vbGVhbi5UUlVFfSwKLQkJCQkJeyI6ZnVubnlucyIsIEJvb2xlYW4uVFJVRX0sCi0JCQkJCS8qIElTU1VFOiBpcyAiZW5kbnM6IiByZWFsbHkgdmFsaWQgbmFtZSAqLwotCQkJCQl7ImVuZG5zOiIsIEJvb2xlYW4uVFJVRX0sCi0JCQkJCXsidXNfdW5kZXJzY29yZSIsIEJvb2xlYW4uVFJVRX0sCi0JCQkJCXsiX3VuZGVyc2NvcmUiLCBCb29sZWFuLlRSVUV9LAotCQkJCQl7InVuZGVyc2NvcmVfIiwgQm9vbGVhbi5UUlVFfSwKLQkJCQkJeyJhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemVhdmVyeWxvbmduYW1ldGhhdHNob3VsZGdvb3ZlcmJ1ZmZlcnNpemUiLCBCb29sZWFuLlRSVUV9LAotCQkJCQl9OwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRlc3RlZXMubGVuZ3RoOyBpKyspIHsKLQkJCWZvciAoaW50IGogPSAwOyBqIDwgblRyaWFsczsgaisrKSB7Ci0JCQkJZG9UZXN0KGksIChTdHJpbmcpdGVzdGVlc1tpXVswXSwgKEJvb2xlYW4pIHRlc3RlZXNbaV1bMV0pOwotCQkJfQotCQl9Ci0JfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvVGVzdEZvcm1hdFByb2Nlc3NvclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L1Rlc3RGb3JtYXRQcm9jZXNzb3JYTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE3NmQ3Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvVGVzdEZvcm1hdFByb2Nlc3NvclhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjIyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDcgRWNsaXBzZSBGb3VuZGF0aW9uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSmVzcGVyIFN0ZWVuIE34bGxlciAtIGplc3BlckBzZWxza2FiZXQub3JnCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmZvcm1hdDsKLQotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JQ29udGFpbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5mb3JtYXQuQWJzdHJhY3RTdHJ1Y3R1cmVkRm9ybWF0UHJvY2Vzc29yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5mb3JtYXQuSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwudXRpbC5VUklSZXNvbHZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LkZvcm1hdFByb2Nlc3NvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZm9ybWF0LlN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5TdHJpbmdDb21wYXJlVXRpbDsKLQotcHVibGljIGNsYXNzIFRlc3RGb3JtYXRQcm9jZXNzb3JYTUwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIFNQTElUX01VTFRJX0FUVFJTID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgSU5ERU5UID0gIlx0IjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gQ0xFQVJfQUxMX0JMQU5LX0xJTkVTID0gZmFsc2U7Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBpbnQgTUFYX0xJTkVfV0lEVEggPSA3MjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBVVEZfOCA9ICJVVEYtOCI7Ci0KLQlwcml2YXRlIFN0cmluZ0NvbXBhcmVVdGlsIGZTdHJpbmdDb21wYXJlVXRpbDsKLQotCXB1YmxpYyBUZXN0Rm9ybWF0UHJvY2Vzc29yWE1MKFN0cmluZyBuYW1lKSB7Ci0JCXN1cGVyKG5hbWUpOwotCX0KLQotCXByaXZhdGUgRm9ybWF0UHJvY2Vzc29yWE1MIGZvcm1hdFByb2Nlc3NvcjsKLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCWZvcm1hdFByb2Nlc3NvciA9IG5ldyBGb3JtYXRQcm9jZXNzb3JYTUwoKTsKLQkJZlN0cmluZ0NvbXBhcmVVdGlsID0gbmV3IFN0cmluZ0NvbXBhcmVVdGlsKCk7Ci0JfQotCi0JLyoqCi0JICogbXVzdCByZWxlYXNlIG1vZGVsIChmcm9tIGVkaXQpIGFmdGVyCi0JICogCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogICAgICAgICAgICByZWxhdGl2ZSB0byB0aGlzIGNsYXNzIChUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyKQotCSAqLwotCXByaXZhdGUgSVN0cnVjdHVyZWRNb2RlbCBnZXRNb2RlbEZvckVkaXQoZmluYWwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCQlJbnB1dFN0cmVhbSBpblN0cmVhbSA9IGdldENsYXNzKCkuZ2V0UmVzb3VyY2VBc1N0cmVhbShmaWxlbmFtZSk7Ci0JCQlpZiAoaW5TdHJlYW0gPT0gbnVsbCkKLQkJCQl0aHJvdyBuZXcgRmlsZU5vdEZvdW5kRXhjZXB0aW9uKCJDYW4ndCBmaWxlIHJlc291cmNlIHN0cmVhbSAiICsgZmlsZW5hbWUpOwotCQkJZmluYWwgU3RyaW5nIGJhc2VGaWxlID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZShmaWxlbmFtZSkudG9TdHJpbmcoKTsKLQkJCW1vZGVsID0gbW9kZWxNYW5hZ2VyLmdldE1vZGVsRm9yRWRpdChiYXNlRmlsZSwgaW5TdHJlYW0sIG5ldyBVUklSZXNvbHZlcigpIHsKLQotCQkJCVN0cmluZyBmQmFzZSA9IGJhc2VGaWxlOwotCi0JCQkJcHVibGljIFN0cmluZyBnZXRGaWxlQmFzZUxvY2F0aW9uKCkgewotCQkJCQlyZXR1cm4gZkJhc2U7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmkpIHsKLQkJCQkJcmV0dXJuIGdldExvY2F0aW9uQnlVUkkodXJpLCBmQmFzZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRMb2NhdGlvbkJ5VVJJKFN0cmluZyB1cmksIFN0cmluZyBiYXNlUmVmZXJlbmNlKSB7Ci0JCQkJCWludCBsYXN0U2xhc2ggPSBiYXNlUmVmZXJlbmNlLmxhc3RJbmRleE9mKCIvIik7Ci0JCQkJCWlmIChsYXN0U2xhc2ggPiAwKQotCQkJCQkJcmV0dXJuIGJhc2VSZWZlcmVuY2Uuc3Vic3RyaW5nKDAsIGxhc3RTbGFzaCArIDEpICsgdXJpOwotCQkJCQlyZXR1cm4gYmFzZVJlZmVyZW5jZTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldExvY2F0aW9uQnlVUkkoU3RyaW5nIHVyaSwgU3RyaW5nIGJhc2VSZWZlcmVuY2UsIGJvb2xlYW4gcmVzb2x2ZUNyb3NzUHJvamVjdExpbmtzKSB7Ci0JCQkJCXJldHVybiBnZXRMb2NhdGlvbkJ5VVJJKHVyaSwgYmFzZVJlZmVyZW5jZSk7Ci0JCQkJfQotCi0JCQkJcHVibGljIElQcm9qZWN0IGdldFByb2plY3QoKSB7Ci0JCQkJCXJldHVybiBudWxsOwotCQkJCX0KLQotCQkJCXB1YmxpYyBJQ29udGFpbmVyIGdldFJvb3RMb2NhdGlvbigpIHsKLQkJCQkJcmV0dXJuIG51bGw7Ci0JCQkJfQotCi0JCQkJcHVibGljIElucHV0U3RyZWFtIGdldFVSSVN0cmVhbShTdHJpbmcgdXJpKSB7Ci0JCQkJCXJldHVybiBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZ2V0TG9jYXRpb25CeVVSSSh1cmkpKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBzZXRGaWxlQmFzZUxvY2F0aW9uKFN0cmluZyBuZXdMb2NhdGlvbikgewotCQkJCQl0aGlzLmZCYXNlID0gbmV3TG9jYXRpb247Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgc2V0UHJvamVjdChJUHJvamVjdCBuZXdQcm9qZWN0KSB7Ci0JCQkJfQotCQkJfSk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoYmVmb3JlUGF0aCwgYWZ0ZXJQYXRoLCB0cnVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKFN0cmluZyBiZWZvcmVQYXRoLCBTdHJpbmcgYWZ0ZXJQYXRoLCBib29sZWFuIHJlc2V0UHJlZmVyZW5jZXMpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgYmVmb3JlTW9kZWwgPSBudWxsLCBhZnRlck1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCWJlZm9yZU1vZGVsID0gZ2V0TW9kZWxGb3JFZGl0KGJlZm9yZVBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGJlZm9yZVBhdGgsIGJlZm9yZU1vZGVsKTsKLQotCQkJYWZ0ZXJNb2RlbCA9IGdldE1vZGVsRm9yRWRpdChhZnRlclBhdGgpOwotCQkJYXNzZXJ0Tm90TnVsbCgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwgZm9yIDogIiArIGFmdGVyUGF0aCwgYWZ0ZXJNb2RlbCk7Ci0KLQkJCWlmIChyZXNldFByZWZlcmVuY2VzKQotCQkJCXJlc2V0UHJlZmVyZW5jZXNUb0RlZmF1bHQoKTsKLQotCQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gZmFsc2U7Ci0JCQlmb3JtYXRQcm9jZXNzb3IuZm9ybWF0TW9kZWwoYmVmb3JlTW9kZWwpOwotCQkJKChBYnN0cmFjdFN0cnVjdHVyZWRGb3JtYXRQcm9jZXNzb3IpIGZvcm1hdFByb2Nlc3NvcikucmVmcmVzaEZvcm1hdFByZWZlcmVuY2VzID0gdHJ1ZTsKLQotCQkJQnl0ZUFycmF5T3V0cHV0U3RyZWFtIGZvcm1hdHRlZEJ5dGVzID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOwotCQkJYmVmb3JlTW9kZWwuc2F2ZShmb3JtYXR0ZWRCeXRlcyk7IC8vICJiZWZvcmVNb2RlbCIgc2hvdWxkIG5vdyBiZQotCQkJLy8gYWZ0ZXIgdGhlIGZvcm1hdHRlcgotCi0JCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYWZ0ZXJCeXRlcyA9IG5ldyBCeXRlQXJyYXlPdXRwdXRTdHJlYW0oKTsKLQkJCWFmdGVyTW9kZWwuc2F2ZShhZnRlckJ5dGVzKTsKLQotCQkJU3RyaW5nIGV4cGVjdGVkQ29udGVudHMgPSBuZXcgU3RyaW5nKGFmdGVyQnl0ZXMudG9CeXRlQXJyYXkoKSwgVVRGXzgpOwotCQkJU3RyaW5nIGFjdHVhbENvbnRlbnRzID0gbmV3IFN0cmluZyhmb3JtYXR0ZWRCeXRlcy50b0J5dGVBcnJheSgpLCBVVEZfOCk7Ci0JCQlhc3NlcnRUcnVlKCJGb3JtYXR0ZWQgZG9jdW1lbnQgZGlmZmVycyBmcm9tIHRoZSBleHBlY3RlZC5cbkV4cGVjdGVkIENvbnRlbnRzOlxuIiArIGV4cGVjdGVkQ29udGVudHMgKyAiXG5BY3R1YWwgQ29udGVudHM6XG4iICsgYWN0dWFsQ29udGVudHMsIGZTdHJpbmdDb21wYXJlVXRpbC5lcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKGV4cGVjdGVkQ29udGVudHMsIGFjdHVhbENvbnRlbnRzKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoYmVmb3JlTW9kZWwgIT0gbnVsbCkKLQkJCQliZWZvcmVNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWlmIChhZnRlck1vZGVsICE9IG51bGwpCi0JCQkJYWZ0ZXJNb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCByZXNldFByZWZlcmVuY2VzVG9EZWZhdWx0KCkgewotCQlJU3RydWN0dXJlZEZvcm1hdFByZWZlcmVuY2VzIGZvcm1hdFByZWZlcmVuY2VzID0gZm9ybWF0UHJvY2Vzc29yLmdldEZvcm1hdFByZWZlcmVuY2VzKCk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldExpbmVXaWR0aChNQVhfTElORV9XSURUSCk7Ci0JCWZvcm1hdFByZWZlcmVuY2VzLnNldENsZWFyQWxsQmxhbmtMaW5lcyhDTEVBUl9BTExfQkxBTktfTElORVMpOwotCQlmb3JtYXRQcmVmZXJlbmNlcy5zZXRJbmRlbnQoSU5ERU5UKTsKLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRTcGxpdE11bHRpQXR0cnMoU1BMSVRfTVVMVElfQVRUUlMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVYbWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUueG1sIiwgInRlc3RmaWxlcy94bWwvc2ltcGxlLXN0YW5kYWxvbmUtZm10LnhtbCIpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RQcmVzZXJ2ZUZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlRm9ybWF0RFREKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sIiwgInRlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE9uZUxpbmVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxMTU3MTYKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sIiwgInRlc3RmaWxlcy94bWwvb25lbGluZS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE9uZUxpbmVUZXh0Tm9kZUZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJVRzE2NjQ0MQotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5Q29udGVudE5vZGVGb3JtYXQoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQkvLyBCVUcxNzQyNDMKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFNwbGl0TXVsdGlBdHRycyh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3VzZXRhZ3N3aXRoZW1wdHljb250ZW50LWZtdC54bWwiLCBmYWxzZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhTTEZvcm1hdCgpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIEJVRzEwODA3NAotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC54c2wiLCAidGVzdGZpbGVzL3htbC94c2xhdHRyaWJ1dGV0ZXh0LWZtdC54c2wiKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RW50aXR5Rm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHMTAyMDc2Ci0JCWZvcm1hdEFuZEFzc2VydEVxdWFscygidGVzdGZpbGVzL3htbC9lbnRpdGllcy54bWwiLCAidGVzdGZpbGVzL3htbC9lbnRpdGllcy1mbXQueG1sIik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFByZXNlcnZlUENEQVRBRm9ybWF0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gQlVHODQ2ODgKLQkJSVN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlcyBmb3JtYXRQcmVmZXJlbmNlcyA9IGZvcm1hdFByb2Nlc3Nvci5nZXRGb3JtYXRQcmVmZXJlbmNlcygpOwotCQkoKFN0cnVjdHVyZWRGb3JtYXRQcmVmZXJlbmNlc1hNTCkgZm9ybWF0UHJlZmVyZW5jZXMpLnNldFByZXNlcnZlUENEQVRBQ29udGVudCh0cnVlKTsKLQkJZm9ybWF0QW5kQXNzZXJ0RXF1YWxzKCJ0ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS54bWwiLCAidGVzdGZpbGVzL3htbC94bWwtcHJlc2VydmVwY2RhdGEteWVzLWZtdC54bWwiLCBmYWxzZSk7Ci0KLQkJKChTdHJ1Y3R1cmVkRm9ybWF0UHJlZmVyZW5jZXNYTUwpIGZvcm1hdFByZWZlcmVuY2VzKS5zZXRQcmVzZXJ2ZVBDREFUQUNvbnRlbnQoZmFsc2UpOwotCQlmb3JtYXRBbmRBc3NlcnRFcXVhbHMoInRlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLnhtbCIsICJ0ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS1uby1mbXQueG1sIiwgZmFsc2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9lbnRpdGllcy1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzJlNjU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgPz4KLTwhRE9DVFlQRSBkb2N1bWVudCBbCi08IUVOVElUWSBFSUkgIjxlbXBoPmVsZW1lbnQgaW5mb3JtYXRpb24gaXRlbTwvZW1waD4iPgotXT4KLTxkb2N1bWVudD4KLQlUaGlzIGRvY3VtZW50IGNvbnRhaW5zIG5vIGNoaWxkCi0JJkVJSTtzLiBJdCBkb2VzIGNvbnRhaW4gYSBub24mRUlJOy4KLTwvZG9jdW1lbnQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvZW50aXRpZXMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvZW50aXRpZXMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWJkZWRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL2VudGl0aWVzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiA/PgotPCFET0NUWVBFIGRvY3VtZW50IFsKLTwhRU5USVRZIEVJSSAiPGVtcGg+ZWxlbWVudCBpbmZvcm1hdGlvbiBpdGVtPC9lbXBoPiI+Ci1dPgotPGRvY3VtZW50PgotVGhpcyBkb2N1bWVudCBjb250YWlucyBubyBjaGlsZCAmRUlJO3MuIEl0IGRvZXMgY29udGFpbiBhIG5vbiZFSUk7LgotPC9kb2N1bWVudD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYWExOWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZS1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG9uZT4KLQk8dHdvPjwvdHdvPgotCTx0aHJlZT4KLQkJPGZvdXI+PC9mb3VyPgotCTwvdGhyZWU+Ci08L29uZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzIzMjQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48b25lPjx0d28+PC90d28+PHRocmVlPjxmb3VyPjwvZm91cj48L3RocmVlPjwvb25lPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL29uZWxpbmVUZXh0Tm9kZS1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MDk1NDguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08b25lIGF0dHI9IjEiIGF0dHIyPSIyIj4KLQk8dHdvPjwvdHdvPgotCTx0aHJlZT4KLQkJPGZvdXI+PC9mb3VyPgotCTwvdGhyZWU+Ci08L29uZT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lVGV4dE5vZGUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvb25lbGluZVRleHROb2RlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjUxM2Y2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9vbmVsaW5lVGV4dE5vZGUueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48b25lIGF0dHI9IjEiCQlhdHRyMj0iMiI+CQk8dHdvPjwvdHdvPjx0aHJlZT48Zm91cj4JCTwvZm91cj48L3RocmVlPjwvb25lPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9zaW1wbGUtc3RhbmRhbG9uZS1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNWJiNjIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCVRoaXMgaXMganVzdCBhIHNpbXBsZSB0ZXN0Ci0KLQlvZiB0aGUgZm9ybWF0dGVyCi0KLQl3aGljaCBzaG91bGQgYmUgZWFzeSB0byBwYXNzLgotCTxkYXRhLXN0dWZmIGF0dHIxPSJzaG9ydC12YWx1ZSIgYTA9IiIgYTE9JyAnIGEyPSIgICIgYTM9JyAgICcKLQkJYTQ9IiAgICAiIGE1PScgICAgICcgYTY9IiAgICAgICAiIGF0dHIyPSJzaG9ydC12YWx1ZSIKLQkJYXR0ci13aGljaC1pcy1yZWFsbHktcmVhbGx5LW9oLXNvLWhvcnJpYmx5LWxvbmcteWVzLXNpci0xPSJhbHNvIHF1aXRlIGZhbnRhc3RpY2FsbHkgbG9uZyB2YWx1ZSB3aGljaCBtdXN0bid0IGJlICBicm9rZW4iCi0JCWF0dHIzPSJzaG9ydC12YWx1ZSI+Ci0KLQkJPGNkYXRhPgotCQkJPCFbQ0RBVEFbCi0gICBEYWEsIGRhYSwgZGEsIGRhIC0gZGEsIGRhIC0gZGEsIGRhCi0JCi0JCUNhbid0IHRvdWNoIHRoaXMhCi0gIChzcGFjZXMgaGVyZSkKLQkodGFiIGhlcmUpCi0JCV1dPgotCQk8L2NkYXRhPgotCQk8YT4KLQkJCTxiPmI8L2I+Ci0JCQk8Yj5iPC9iPgotCQkJPGI+YjwvYj48IS0tIENvbW1lbnQgaGVyZSAgZG9uJ3QgdHdpZGRsZSB3aXRoIHNwYWNlcyBpbiB0aGVtIC0tPgotCQkJPGI+YjwvYj4KLQkJCTxiPmI8L2I+Ci0JCQk8Yj5iPC9iPgotCQk8L2E+Ci0JCTw/dGFyZ2V0ICB3aHkgIGFtICBJICBoZXJlIAotICA/PgotCTwvZGF0YS1zdHVmZj4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3NpbXBsZS1zdGFuZGFsb25lLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIzZWYzMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC9zaW1wbGUtc3RhbmRhbG9uZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotICAgICBUaGlzIGlzIGp1c3QgYSBzaW1wbGUgdGVzdAotICAKLSAgIG9mIHRoZSBmb3JtYXR0ZXIKLSAgCi13aGljaCBzaG91bGQgYmUgZWFzeSB0byBwYXNzLgotPGRhdGEtc3R1ZmYgYXR0cjE9InNob3J0LXZhbHVlIiBhMD0iIiBhMT0nICcgYTI9IiAgIiBhMz0nICAgJyBhND0iICAgICIgYTU9JyAgICAgJyBhNj0iICAgICAgICIgYXR0cjI9InNob3J0LXZhbHVlIiBhdHRyLXdoaWNoLWlzLXJlYWxseS1yZWFsbHktb2gtc28taG9ycmlibHktbG9uZy15ZXMtc2lyLTE9ImFsc28gcXVpdGUgZmFudGFzdGljYWxseSBsb25nIHZhbHVlIHdoaWNoIG11c3RuJ3QgYmUgIGJyb2tlbiIgYXR0cjM9InNob3J0LXZhbHVlIgotICA+Ci0gIAotCTxjZGF0YT4KLSA8IVtDREFUQVsKLSAgIERhYSwgZGFhLCBkYSwgZGEgLSBkYSwgZGEgLSBkYSwgZGEKLQkKLQkJQ2FuJ3QgdG91Y2ggdGhpcyEKLSAgKHNwYWNlcyBoZXJlKQotCSh0YWIgaGVyZSkKLQkJXV0+Ci0JPC9jZGF0YT4KLQk8YT4KLQk8Yj5iPC9iPgotCTxiPmIgPC9iPgotCTxiPiBiPC9iPiAgPCEtLSBDb21tZW50IGhlcmUgIGRvbid0IHR3aWRkbGUgd2l0aCBzcGFjZXMgaW4gdGhlbSAtLT4gICAgICAJPGI+IGIgPC9iPgotCTxiPgotCWIKLQk8L2I+Ci0JPGI+YjwvYj4KLQk8L2E+PD90YXJnZXQgIHdoeSAgYW0gIEkgIGhlcmUgCi0gID8+Ci08L2RhdGEtc3R1ZmY+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC90YWdzd2l0aGVtcHR5Y29udGVudC5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC90YWdzd2l0aGVtcHR5Y29udGVudC5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MjE3YTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdGFnc3dpdGhlbXB0eWNvbnRlbnQuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KLTwhRUxFTUVOVCB0b3Btb3N0IChlbXB0eSxlbXB0eXdpdGhhdHRyaWJ1dGUpPgotPCFFTEVNRU5UIGVtcHR5IEVNUFRZPgotPCFFTEVNRU5UIGVtcHR5d2l0aGF0dHJpYnV0ZSBFTVBUWT4KLTwhQVRUTElTVCBlbXB0eXdpdGhhdHRyaWJ1dGUKLQlteWF0dHJpYnV0ZTEgQ0RBVEEgI0lNUExJRUQKLQlteWF0dHJpYnV0ZTIgQ0RBVEEgI0lNUExJRUQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNldGFnc3dpdGhlbXB0eWNvbnRlbnQtZm10LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjMmVlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHRvcG1vc3QgU1lTVEVNICJ0YWdzd2l0aGVtcHR5Y29udGVudC5kdGQiID4KLTx0b3Btb3N0PgotCTxlbXB0eT48L2VtcHR5PgotCTxlbXB0eXdpdGhhdHRyaWJ1dGUKLQkJbXlhdHRyaWJ1dGUxPSIiCi0JCW15YXR0cmlidXRlMj0iIj48L2VtcHR5d2l0aGF0dHJpYnV0ZT4KLTwvdG9wbW9zdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC91c2V0YWdzd2l0aGVtcHR5Y29udGVudC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyOTljZDUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwvdXNldGFnc3dpdGhlbXB0eWNvbnRlbnQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHRvcG1vc3QgU1lTVEVNICJ0YWdzd2l0aGVtcHR5Y29udGVudC5kdGQiID4KLTx0b3Btb3N0PgotICA8ZW1wdHk+PC9lbXB0eT4KLSAgPGVtcHR5d2l0aGF0dHJpYnV0ZSBteWF0dHJpYnV0ZTE9IiIgbXlhdHRyaWJ1dGUyPSIiPjwvZW1wdHl3aXRoYXR0cmlidXRlPgotPC90b3Btb3N0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS1uby1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLW5vLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwNjgzZjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLW5vLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBjZGF0YWxpY2lvdXMgU1lTVEVNICJ4bWwtcHJlc2VydmVwY2RhdGEuZHRkIiA+Ci08cGNkYXRhbGljaW91cz4KLQk8aWhhdmVwY2RhdGE+aSBoYXZlIHBjZGF0YTwvaWhhdmVwY2RhdGE+Ci0JPGloYXZlcGNkYXRhPgotCQlpIGhhdmUKLQotCi0KLQkJc3BhY2VzCi0JPC9paGF2ZXBjZGF0YT4KLQk8aWRvbnQgLz4KLQk8bmVpdGhlcmRvaT5kbyBpIGhhdmUgcGNkYXRhPyBpJ20gbm90IHN1cmUuIGJvbyBob28uPC9uZWl0aGVyZG9pPgotPC9wY2RhdGFsaWNpb3VzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLXllcy1mbXQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLXllcy1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MTA5YzhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS15ZXMtZm10LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGNkYXRhbGljaW91cyBTWVNURU0gInhtbC1wcmVzZXJ2ZXBjZGF0YS5kdGQiID4KLTxwY2RhdGFsaWNpb3VzPgotCTxpaGF2ZXBjZGF0YT5pIGhhdmUgICAgICBwY2RhdGE8L2loYXZlcGNkYXRhPgotCTxpaGF2ZXBjZGF0YT4gICBpIGhhdmUgIAotICAKLSAgCi0gIAotICAgICAgc3BhY2VzICAgPC9paGF2ZXBjZGF0YT4KLQk8aWRvbnQgLz4KLQk8bmVpdGhlcmRvaT5kbyBpIGhhdmUgcGNkYXRhPyBpJ20gbm90IHN1cmUuIGJvbyBob28uPC9uZWl0aGVyZG9pPgotPC9wY2RhdGFsaWNpb3VzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS5kdGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZkMDg2ZGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLmR0ZAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCi08IUVMRU1FTlQgcGNkYXRhbGljaW91cyAoaWhhdmVwY2RhdGEqLGlkb250KixuZWl0aGVyZG9pKik+Ci08IUVMRU1FTlQgaWhhdmVwY2RhdGEgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGlkb250IEVNUFRZPgotPCFFTEVNRU5UIG5laXRoZXJkb2kgQU5ZPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1wcmVzZXJ2ZXBjZGF0YS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI4NzRmODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXByZXNlcnZlcGNkYXRhLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGNkYXRhbGljaW91cyBTWVNURU0gInhtbC1wcmVzZXJ2ZXBjZGF0YS5kdGQiID4KLTxwY2RhdGFsaWNpb3VzPgotICA8aWhhdmVwY2RhdGE+aSBoYXZlICAgICAgcGNkYXRhPC9paGF2ZXBjZGF0YT4KLSAgPGloYXZlcGNkYXRhPiAgIGkgaGF2ZSAgCi0gIAotICAKLSAgCi0gICAgICBzcGFjZXMgICA8L2loYXZlcGNkYXRhPgotICA8aWRvbnQvPgotICA8bmVpdGhlcmRvaT5kbyBpIGhhdmUgcGNkYXRhPyBpJ20gbm90IHN1cmUuIGJvbyBob28uPC9uZWl0aGVyZG9pPgotPC9wY2RhdGFsaWNpb3VzPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1hY3R1YWwueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1hY3R1YWwueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzBjMDQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQtYWN0dWFsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPCFET0NUWVBFIG1haW4gU1lTVEVNICJ4bWwtc3BhY2UtcHJlc2VydmUuZHRkIj4KLTxtYWluPgotCTxub3RoaW5nPgotCQl0aGlzICBpcyBub3QgYSAgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMKLQkJeW91ICBwbGVhc2UgPC9ub3RoaW5nPgotPHByZXNlcnZlPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotIC4KLSAgLgotICAuCi0gIDwvcHJlc2VydmU+Ci0gICBvZiB0aGUgZm9ybWF0dGVyLgotICAgPHByZXNlcnZlIHhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0JCVRoaXMgcGFydGljdWxhciB0ZXh0IGNhbgotCi0JCWFuZCBzaG91bGQgYmUgcmVmb3JtYXR0ZWQuCi0gICA8L3ByZXNlcnZlPgotICAgCi08cHJlc2VydmU+Ci0gIFRoaXMgaXMganVzdAotICAgICAKLSBhIHNpbXBsZSB0ZXN0Ci0gICAgPG5vdGhpbmc+Ci0JCXRoaXMgc3BhY2UgICBpcyBub3QgZm9yIHNhbGUJT1IgRk9STUFUVElORwotCQksIHBsZWFzZSA8L25vdGhpbmc+IDwhLS0gTk9URSBUSEUgU1BBQ0VTIC0tPiAgPHNwYWNlLWRlZmF1bHQ+Ci0gTm8gbWFuCi0gCi0gaXMgYW4KLSAKLSBpc2xhbmQsIC4KLSAgLgotICAuCi0gYnV0IHRoaXMgc2VjdGlvbiBpcywgcmVhbGx5LCBzbyBjbGVhbiBpdCB1cCBwbGVhc2UgLSB3YXN0ZSBvZiAgICAgICAgICAgc3BhY2UKLSAJPC9zcGFjZS1kZWZhdWx0PgotICAuCi0gIC4gVGhpcyBzaG91bGQgYmUgc3BhY2UgICBwcmVzZXJ2ZWQKLSAgPC9wcmVzZXJ2ZT4KLSAgIDxwcmVzZXJ2ZTI+Ci1UaGlzIHBhcnRpY3VsYXIKLSAgdGV4dCBtYXkgCi0KLW5vdCAgcmVmb3JtYXR0ZWQuPC9wcmVzZXJ2ZTI+ICA8bm90aGluZz4KLQkJdGhpcyAgaXMgbm90IGEgIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzCi0JCXlvdSAgcGxlYXNlIDwvbm90aGluZz4KLTwvbWFpbj4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLWZtdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI3MWU2ZjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLWR0ZC1mbXQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgbWFpbiBTWVNURU0gInhtbC1zcGFjZS1wcmVzZXJ2ZS5kdGQiPgotPG1haW4+Ci0JPG5vdGhpbmc+dGhpcyBpcyBub3QgYSB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcyB5b3UgcGxlYXNlPC9ub3RoaW5nPgotCTxwcmVzZXJ2ZT4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAuCi0gIC4KLSAgLgotICA8L3ByZXNlcnZlPgotCW9mIHRoZSBmb3JtYXR0ZXIuCi0JPHByZXNlcnZlIHhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0JCVRoaXMgcGFydGljdWxhciB0ZXh0IGNhbgotCi0JCWFuZCBzaG91bGQgYmUgcmVmb3JtYXR0ZWQuCi0JPC9wcmVzZXJ2ZT4KLQotCTxwcmVzZXJ2ZT4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAgICA8bm90aGluZz4KLQkJdGhpcyBzcGFjZSAgIGlzIG5vdCBmb3Igc2FsZQlPUiBGT1JNQVRUSU5HCi0JCSwgcGxlYXNlIDwvbm90aGluZz4gPCEtLSBOT1RFIFRIRSBTUEFDRVMgLS0+ICA8c3BhY2UtZGVmYXVsdD4KLQkJCU5vIG1hbgotCi0JCQlpcyBhbgotCi0JCQlpc2xhbmQsIC4gLiAuIGJ1dCB0aGlzIHNlY3Rpb24gaXMsIHJlYWxseSwgc28gY2xlYW4gaXQgdXAKLQkJCXBsZWFzZSAtIHdhc3RlIG9mIHNwYWNlCi0gIDwvc3BhY2UtZGVmYXVsdD4KLSAgLgotICAuIFRoaXMgc2hvdWxkIGJlIHNwYWNlICAgcHJlc2VydmVkCi0gIDwvcHJlc2VydmU+Ci0JPHByZXNlcnZlMj4KLVRoaXMgcGFydGljdWxhcgotICB0ZXh0IG1heSAKLQotbm90ICByZWZvcm1hdHRlZC48L3ByZXNlcnZlMj4KLQk8bm90aGluZz50aGlzIGlzIG5vdCBhIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzIHlvdSBwbGVhc2U8L25vdGhpbmc+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtZHRkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGEyYjcyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1kdGQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgbWFpbiBTWVNURU0gInhtbC1zcGFjZS1wcmVzZXJ2ZS5kdGQiPgotPG1haW4+Ci0JPG5vdGhpbmc+Ci0JCXRoaXMgIGlzIG5vdCBhICB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcwotCQl5b3UgIHBsZWFzZSA8L25vdGhpbmc+Ci08cHJlc2VydmUgICAgID4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAuCi0gIC4KLSAgLgotICA8L3ByZXNlcnZlPgotICAgb2YgdGhlIGZvcm1hdHRlci4KLSAgIDxwcmVzZXJ2ZSB4bWw6c3BhY2U9ImRlZmF1bHQiPgotVGhpcyBwYXJ0aWN1bGFyIHRleHQgY2FuIAotCi1hbmQgICAgIHNob3VsZCBiZSByZWZvcm1hdHRlZC48L3ByZXNlcnZlPgotICAgCi08cHJlc2VydmUgICAgID4KLSAgVGhpcyBpcyBqdXN0Ci0gICAgIAotIGEgc2ltcGxlIHRlc3QKLSAgICA8bm90aGluZz4KLQkJdGhpcyBzcGFjZSAgIGlzIG5vdCBmb3Igc2FsZQlPUiBGT1JNQVRUSU5HCi0JCSwgcGxlYXNlIDwvbm90aGluZz4gPCEtLSBOT1RFIFRIRSBTUEFDRVMgLS0+ICA8c3BhY2UtZGVmYXVsdCA+Ci0gTm8gbWFuCi0gCi0gaXMgYW4KLSAKLSBpc2xhbmQsIC4KLSAgLgotICAuCi0gYnV0IHRoaXMgc2VjdGlvbiBpcywgcmVhbGx5LCBzbyBjbGVhbiBpdCB1cCBwbGVhc2UgLSB3YXN0ZSBvZiAgICAgICAgICAgc3BhY2UKLSAJPC9zcGFjZS1kZWZhdWx0PgotICAuCi0gIC4gVGhpcyBzaG91bGQgYmUgc3BhY2UgICBwcmVzZXJ2ZWQKLSAgPC9wcmVzZXJ2ZT4KLSAgIDxwcmVzZXJ2ZTI+Ci1UaGlzIHBhcnRpY3VsYXIKLSAgdGV4dCBtYXkgCi0KLW5vdCAgcmVmb3JtYXR0ZWQuPC9wcmVzZXJ2ZTI+ICA8bm90aGluZz4KLQkJdGhpcyAgaXMgbm90IGEgIHRhcmdldCwgc3RyaXAgc3BhY2VzIGFzCi0JCXlvdSAgcGxlYXNlIDwvbm90aGluZz4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLWZtdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS1mbXQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTExOTNlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLWZtdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCTxub3RoaW5nPnRoaXMgaXMgbm90IGEgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMgeW91IHBsZWFzZTwvbm90aGluZz4KLQk8cHJlc2VydmUgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgYnV0LWF0dHItY2xlYW4tdXA9InRydWUiPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotIC4KLSAgLgotICAuCi0gIDwvcHJlc2VydmU+Ci0Jb2YgdGhlIGZvcm1hdHRlcgotCTxwcmVzZXJ2ZSB4bWw6c3BhY2U9InByZXNlcnZlIiBidXQtYXR0ci1jbGVhbi11cD0idHJ1ZSI+Ci0gIFRoaXMgaXMganVzdAotICAgICAKLSBhIHNpbXBsZSB0ZXN0Ci0gICAgPG5vdGhpbmc+Ci0JCXRoaXMgc3BhY2UgICBpcyBub3QgZm9yIHNhbGUJT1IgRk9STUFUVElORwotCQksIHBsZWFzZSA8L25vdGhpbmc+IDwhLS0gTk9URSBUSEUgU1BBQ0VTIC0tPiAgPHNwYWNlLWRlZmF1bHQKLQkJCXhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0JCQlObyBtYW4KLQotCQkJaXMgYW4KLQotCQkJaXNsYW5kLCAuIC4gLiBidXQgdGhpcyBzZWN0aW9uIGlzLCByZWFsbHksIHNvIGNsZWFuIGl0IHVwCi0JCQlwbGVhc2UgLSB3YXN0ZSBvZiBzcGFjZQotICA8L3NwYWNlLWRlZmF1bHQ+Ci0gIC4KLSAgLiBUaGlzIHNob3VsZCBiZSBzcGFjZSAgIHByZXNlcnZlZAotICA8L3ByZXNlcnZlPgotCTxub3RoaW5nPnRoaXMgaXMgbm90IGEgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMgeW91IHBsZWFzZTwvbm90aGluZz4KLTwvbWFpbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3htbC1zcGFjZS1wcmVzZXJ2ZS1zdGFuZGFsb25lLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2IxODc1Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUtc3RhbmRhbG9uZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxtYWluPgotCTxub3RoaW5nPgotCQl0aGlzICBpcyBub3QgYSAgdGFyZ2V0LCBzdHJpcCBzcGFjZXMgYXMKLQkJeW91ICBwbGVhc2UgPC9ub3RoaW5nPgotPHByZXNlcnZlIHhtbDpzcGFjZT0icHJlc2VydmUiICAgIGJ1dC1hdHRyLWNsZWFuLXVwID0gInRydWUiPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotIC4KLSAgLgotICAuCi0gIDwvcHJlc2VydmU+Ci0gICBvZiB0aGUgZm9ybWF0dGVyCi08cHJlc2VydmUgIHhtbDpzcGFjZT0icHJlc2VydmUiICAgIGJ1dC1hdHRyLWNsZWFuLXVwID0gInRydWUiPgotICBUaGlzIGlzIGp1c3QKLSAgICAgCi0gYSBzaW1wbGUgdGVzdAotICAgIDxub3RoaW5nPgotCQl0aGlzIHNwYWNlICAgaXMgbm90IGZvciBzYWxlCU9SIEZPUk1BVFRJTkcKLQkJLCBwbGVhc2UgPC9ub3RoaW5nPiA8IS0tIE5PVEUgVEhFIFNQQUNFUyAtLT4gIDxzcGFjZS1kZWZhdWx0IHhtbDpzcGFjZT0iZGVmYXVsdCI+Ci0gTm8gbWFuCi0gCi0gaXMgYW4KLSAKLSBpc2xhbmQsIC4KLSAgLgotICAuCi0gYnV0IHRoaXMgc2VjdGlvbiBpcywgcmVhbGx5LCBzbyBjbGVhbiBpdCB1cCBwbGVhc2UgLSB3YXN0ZSBvZiAgICAgICAgICAgc3BhY2UKLSAJPC9zcGFjZS1kZWZhdWx0PgotICAuCi0gIC4gVGhpcyBzaG91bGQgYmUgc3BhY2UgICBwcmVzZXJ2ZWQKLSAgPC9wcmVzZXJ2ZT4KLSAgPG5vdGhpbmc+Ci0JCXRoaXMgIGlzIG5vdCBhICB0YXJnZXQsIHN0cmlwIHNwYWNlcyBhcwotCQl5b3UgIHBsZWFzZSA8L25vdGhpbmc+Ci08L21haW4+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveG1sLXNwYWNlLXByZXNlcnZlLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U1NjdiZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94bWwtc3BhY2UtcHJlc2VydmUuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotPD94bWwgZW5jb2Rpbmc9IlVTLUFTQ0lJIj8+DQotDQotPCFFTEVNRU5UIG1haW4gKCNQQ0RBVEEgfCBub3RoaW5nIHwgcHJlc2VydmUgfCBwcmVzZXJ2ZTIpKiA+DQotDQotPCFFTEVNRU5UIHByZXNlcnZlICgjUENEQVRBIHwgbm90aGluZyB8IHNwYWNlLWRlZmF1bHQpKiA+DQotPCFBVFRMSVNUIHByZXNlcnZlIHhtbDpzcGFjZSAoZGVmYXVsdHxwcmVzZXJ2ZSkgJ3ByZXNlcnZlJz4NCi0NCi08IUVMRU1FTlQgcHJlc2VydmUyICgjUENEQVRBIHwgbm90aGluZyB8IHNwYWNlLWRlZmF1bHQpKiA+DQotPCFBVFRMSVNUIHByZXNlcnZlMiB4bWw6c3BhY2UgTk1UT0tFTiAjRklYRUQgInByZXNlcnZlIj4NCi0NCi08IUVMRU1FTlQgc3BhY2UtZGVmYXVsdCAoI1BDREFUQXwgbm90aGluZyB8IHByZXNlcnZlKSo+DQotPCFBVFRMSVNUIHNwYWNlLWRlZmF1bHQgeG1sOnNwYWNlIChkZWZhdWx0fHByZXNlcnZlKSAnZGVmYXVsdCc+DQotDQotPCFFTEVNRU5UIG5vdGhpbmcgKCNQQ0RBVEEpID4NCi0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94c2xhdHRyaWJ1dGV0ZXh0LWZtdC54c2wgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9mb3JtYXQvdGVzdGZpbGVzL3htbC94c2xhdHRyaWJ1dGV0ZXh0LWZtdC54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3NTQyNmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC1mbXQueHNsCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgotPHhzbDpzdHlsZXNoZWV0IHZlcnNpb249IjEuMCIKLQl4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+Ci0JPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci0JCTxodG1sPgotCQkJPGJvZHk+Ci0JCQkJPGgyPlNwYWNlIENoZWNraW5nPC9oMj4KLQkJCQk8cD4KLQkJCQkJPHhzbDphdHRyaWJ1dGUgbmFtZT0iYWxpZ24iPmNlbnRlcjwveHNsOmF0dHJpYnV0ZT4KLQkJCQkJQ2hlY2s6Ci0JCQkJCTx4c2w6Zm9yLWVhY2ggc2VsZWN0PSJ0ZXh0L2l0ZW0iPgotCQkJCQkJPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InNvbWV0aGluZyIgLz4KLQkJCQkJCTx4c2w6aWYgdGVzdD0icG9zaXRpb24oKT1sYXN0KCktMSI+Ci0JCQkJCQkJPHhzbDp0ZXh0PnRyYWlsaW5nIHNwYWNlcyAgICA8L3hzbDp0ZXh0PgotCQkJCQkJPC94c2w6aWY+Ci0JCQkJCQk8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCk9bGFzdCgpLTEiPgotCQkJCQkJCTx4c2w6dGV4dD4gICAgbGVhZGluZyBzcGFjZXM8L3hzbDp0ZXh0PgotCQkJCQkJPC94c2w6aWY+Ci0JCQkJCQk8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCk9bGFzdCgpIj4KLQkJCQkJCQk8eHNsOnRleHQ+bm9zcGFjZTwveHNsOnRleHQ+Ci0JCQkJCQk8L3hzbDppZj4KLQkJCQkJPC94c2w6Zm9yLWVhY2g+Ci0JCQkJPC9wPgotCQkJPC9ib2R5PgotCQk8L2h0bWw+Ci0JPC94c2w6dGVtcGxhdGU+Ci08L3hzbDpzdHlsZXNoZWV0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL2Zvcm1hdC90ZXN0ZmlsZXMveG1sL3hzbGF0dHJpYnV0ZXRleHQueHNsIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC54c2wKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4N2UzODcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvZm9ybWF0L3Rlc3RmaWxlcy94bWwveHNsYXR0cmlidXRldGV4dC54c2wKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+Ci08eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4wIgoteG1sbnM6eHNsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L1hTTC9UcmFuc2Zvcm0iPgotPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iLyI+Ci08aHRtbD4KLSAgICA8Ym9keT4KLSAgICA8aDI+U3BhY2UgQ2hlY2tpbmc8L2gyPgotICAgIDxwPjx4c2w6YXR0cmlidXRlIG5hbWU9ImFsaWduIj5jZW50ZXI8L3hzbDphdHRyaWJ1dGU+Q2hlY2s6PHhzbDpmb3ItZWFjaCBzZWxlY3Q9InRleHQvaXRlbSI+PHhzbDp2YWx1ZS1vZiBzZWxlY3Q9InNvbWV0aGluZyIvPgotICAgICAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpPWxhc3QoKS0xIj4KLSAgICAgICAgPHhzbDp0ZXh0PnRyYWlsaW5nIHNwYWNlcyAgICA8L3hzbDp0ZXh0PgotICAgICAgPC94c2w6aWY+Ci0gICAgICA8eHNsOmlmIHRlc3Q9InBvc2l0aW9uKCk9bGFzdCgpLTEiPgotICAgICAgICA8eHNsOnRleHQ+ICAgIGxlYWRpbmcgc3BhY2VzPC94c2w6dGV4dD4KLSAgICAgIDwveHNsOmlmPgotICAgICAgPHhzbDppZiB0ZXN0PSJwb3NpdGlvbigpPWxhc3QoKSI+Ci0gICAgICAgIDx4c2w6dGV4dD5ub3NwYWNlPC94c2w6dGV4dD4KLSAgICAgIDwveHNsOmlmPgotICAgIDwveHNsOmZvci1lYWNoPgotICAgIDwvcD4KLSAgPC9ib2R5PgotICA8L2h0bWw+Ci08L3hzbDp0ZW1wbGF0ZT4KLTwveHNsOnN0eWxlc2hlZXQ+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdEZyYWdGaWxlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0RnJhZ0ZpbGUuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBlODM2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0RnJhZ0ZpbGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdCdWZmZXJJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSVN0cnVjdHVyZWRNb2RlbDsKLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0RnJhZ0ZpbGUgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RnJhZygpIHRocm93cyBVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCi0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQlTdHJpbmcgdGVzdFN0cmluZzEgPSAiPD94bWwgdmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XHJcbiIgKyAiPCEtLVRoaXMgaXMgYW4gaW50ZXJuYWxseSBnZW5lcmF0ZWQgZmlsZSAtIG1hbnVhbCBjaGFuZ2VzIHRvIGl0IHdpbGwgYmUgaWdub3JlZCBhbmQgb3ZlcndyaXR0ZW4uLS0+XHJcbiIgKyAiPEZyYWdtZW50IHBhcmVudD1cIi9lamItamFyL2VudGVycHJpc2UtYmVhbnMmbHQ7ZGVzY3JpcHRpb24sZGlzcGxheS1uYW1lLHNtYWxsLWljb24sbGFyZ2UtaWNvblwiIGRlc3RpbmF0aW9uPVwiZWpiLWphci54bWxcIiB0eXBlPVwieG1sXCIgeG1saWQ9XCJpZCx4bWk6aWRcIiB0YWdTZXQ9XCJlamJcIj5cclxuIiArICI8c2Vzc2lvbiBpZD1cImVqYnMuVGVzdEJlYW5cIj5cclxuIiArICI8ZWpiLW5hbWU+VGVzdDwvZWpiLW5hbWU+XHJcbiIgKyAiPGhvbWU+ZWpicy5UZXN0SG9tZTwvaG9tZT5cclxuIiArICI8cmVtb3RlPmVqYnMuVGVzdDwvcmVtb3RlPlxyXG4iICsgIjxlamItY2xhc3M+ZWpicy5UZXN0QmVhbjwvZWpiLWNsYXNzPlxyXG4iICsgIjxzZXNzaW9uLXR5cGU+U3RhdGVsZXNzPC9zZXNzaW9uLXR5cGU+XHJcbiIgKyAiPHRyYW5zYWN0aW9uLXR5cGU+Q29udGFpbmVyPC90cmFuc2FjdGlvbi10eXBlPlxyXG4iICsgIjwvc2Vzc2lvbj5cclxuIiArICI8L0ZyYWdtZW50PiI7Ci0KLQotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbSh0ZXN0U3RyaW5nMS5nZXRCeXRlcygidXRmOCIpKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvclJlYWQoInRlc3QuZnJhZyIsIGlucHV0U3RyZWFtLCBudWxsKTsgLy8kTk9OLU5MUy0xJAotCi0JCVN5c3RlbS5vdXQucHJpbnRsbihtb2RlbCk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbihtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKS5nZXQoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZyYWdYKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0KLQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCi0JCVN0cmluZyB0ZXN0U3RyaW5nID0gIjwhLS1UaGlzIGlzIGFuIGludGVybmFsbHkgZ2VuZXJhdGVkIGZpbGUgLSBtYW51YWwgY2hhbmdlcyB0byBpdCB3aWxsIGJlIGlnbm9yZWQgYW5kIG92ZXJ3cml0dGVuLi0tPlxyXG4iICsgIjxGcmFnbWVudCBwYXJlbnQ9XCIvZWpiLWphci9lbnRlcnByaXNlLWJlYW5zJmx0O2Rlc2NyaXB0aW9uLGRpc3BsYXktbmFtZSxzbWFsbC1pY29uLGxhcmdlLWljb25cIiBkZXN0aW5hdGlvbj1cImVqYi1qYXIueG1sXCIgdHlwZT1cInhtbFwiIHhtbGlkPVwiaWQseG1pOmlkXCIgdGFnU2V0PVwiZWpiXCI+XHJcbiIgKyAiPHNlc3Npb24gaWQ9XCJlamJzLlRlc3RCZWFuXCI+XHJcbiIgKyAiPGVqYi1uYW1lPlRlc3Q8L2VqYi1uYW1lPlxyXG4iICsgIjxob21lPmVqYnMuVGVzdEhvbWU8L2hvbWU+XHJcbiIgKyAiPHJlbW90ZT5lamJzLlRlc3Q8L3JlbW90ZT5cclxuIiArICI8ZWpiLWNsYXNzPmVqYnMuVGVzdEJlYW48L2VqYi1jbGFzcz5cclxuIiArICI8c2Vzc2lvbi10eXBlPlN0YXRlbGVzczwvc2Vzc2lvbi10eXBlPlxyXG4iICsgIjx0cmFuc2FjdGlvbi10eXBlPkNvbnRhaW5lcjwvdHJhbnNhY3Rpb24tdHlwZT5cclxuIiArICI8L3Nlc3Npb24+XHJcbiIgKyAiPC9GcmFnbWVudD4iOwotCi0KLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgU3RyaW5nQnVmZmVySW5wdXRTdHJlYW0odGVzdFN0cmluZyk7Ci0KLQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JSZWFkKCJ0ZXN0LmZyYWd4IiwgaW5wdXRTdHJlYW0sIG51bGwpOyAvLyROT04tTkxTLTEkCi0KLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsKTsKLQkJU3lzdGVtLm91dC5wcmludGxuKG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxNYW5hZ2VyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0TW9kZWxNYW5hZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2OTkzYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsTWFuYWdlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjY1ICswLDAgQEAKLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5VbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlQWxyZWFkeUV4aXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUluVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RNb2RlbE1hbmFnZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlByb2plY3ROYW1lID0gIkRPQ1VNRU5ULUxPQURFUiI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQotCXB1YmxpYyBUZXN0TW9kZWxNYW5hZ2VyKCkgewotCQlzdXBlcigiVGVzdE1vZGVsTWFuYWdlciIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCWRvU2V0dXAoKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9TZXR1cCgpIHRocm93cyBFeGNlcHRpb24gewotCi0JCS8vIHJvb3Qgb2Ygd29ya3NwYWNlIGRpcmVjdG9yeQotCQlMb2NhdGlvbiBwbGF0Zm9ybUxvY2F0aW9uID0gUGxhdGZvcm0uZ2V0SW5zdGFuY2VMb2NhdGlvbigpOwotCi0JCVByb2plY3RVbnppcFV0aWxpdHkgdW56aXBVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLCBmWmlwRmlsZU5hbWUsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCXVuemlwVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldEZpbGUoKSk7Ci0JCXVuemlwVXRpbC5pbml0SmF2YVByb2plY3QoZlByb2plY3ROYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgYWZ0ZXIgdXNlIQotCSAqIAotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpIHsKLQkJLy8gZnJvbSBhIGZpbGUKLQkJSUZpbGUgZiA9IGdldEZpbGUoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCkuZ2V0TW9kZWxGb3JFZGl0KGYpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG1vZGVsOwotCX0KLQotCXByaXZhdGUgSUZpbGUgZ2V0RmlsZSgpIHsKLQkJcmV0dXJuIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmUHJvamVjdE5hbWUgKyAiL2ZpbGVzL3NpbXBsZS54bWwiKSk7Ci0JfQotCQotCXByaXZhdGUgSU1vZGVsTWFuYWdlciBnZXRNTSgpIHsKLQkJcmV0dXJuIFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENvcHlNb2RlbCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCXRyeSB7Ci0JCQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbENvcHkgPSBnZXRNTSgpLmNvcHlNb2RlbEZvckVkaXQobW9kZWwuZ2V0SWQoKSwgIm5ld0lkIik7Ci0JCQkJYXNzZXJ0Tm90TnVsbCgiY29waWVkIG1vZGVsIHdhcyBudWxsIiwgbW9kZWxDb3B5KTsKLQkJCX0KLQkJCWNhdGNoIChSZXNvdXJjZUluVXNlIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQkJCi0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdJbnN0YW5jZSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlJU3RydWN0dXJlZE1vZGVsIG5ld0luc3RhbmNlID0gZ2V0TU0oKS5jcmVhdGVOZXdJbnN0YW5jZShtb2RlbCk7Ci0JCQlhc3NlcnRUcnVlKCJmYWlsZWQgdG8gY3JlYXRlIG5ldyBpbnN0YW5jZSBvZjogIiArIG1vZGVsLCBtb2RlbCAhPSBuZXdJbnN0YW5jZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVOZXdTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCk7Ci0JCQkvLyBlbnN1cmUgbW9kZWwgYWxyZWFkeSBleGlzdHMKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJYm9vbGVhbiByZXNvdXJjZUV4aXN0cyA9IGZhbHNlOwotCQkJdHJ5IHsKLQkJCQlnZXRNTSgpLmNyZWF0ZU5ld1N0cnVjdHVyZWREb2N1bWVudEZvcihmaWxlKTsKLQkJCX0KLQkJCWNhdGNoKFJlc291cmNlQWxyZWFkeUV4aXN0cyBleCkgewotCQkJCXJlc291cmNlRXhpc3RzID0gdHJ1ZTsKLQkJCX0KLQkJCWFzc2VydFRydWUoInNob3VsZCBoYXZlIGdvdHRlbiBSZXNvdXJjZUFscmVhZHlFeGl0cyBleGNlcHRpb24iLCByZXNvdXJjZUV4aXN0cyk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoKSAgdGhyb3dzIElPRXhjZXB0aW9uLCBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCUlGaWxlIGZpbGUgPSBnZXRGaWxlKCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBnZXRNTSgpLmNyZWF0ZVN0cnVjdHVyZWREb2N1bWVudEZvcihmaWxlKTsKLQkJCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBjcmVhdGUgc3RydWN0dXJlZCBkb2N1bWVudCIsIHNEb2MpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RXhpc3RpbmdNb2RlbEZyb21GaWxlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSUZpbGUgZiA9IGdldEZpbGUoKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZXhpc3RpbmdNb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCWV4aXN0aW5nTW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldEV4aXN0aW5nTW9kZWxGb3JFZGl0KGYpOwotCQkJYXNzZXJ0Tm90TnVsbCgiZmFpbGVkIHRvIGdldCBleGlzdGluZyBtb2RlbCIsIGV4aXN0aW5nTW9kZWwpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoZXhpc3RpbmdNb2RlbCAhPSBudWxsKQotCQkJCWV4aXN0aW5nTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQkJCi0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0RXhpc3RpbmdNb2RlbEZyb21Eb2N1bWVudCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZ290dGVuTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJZ290dGVuTW9kZWwgPSBnZXRNTSgpLmdldEV4aXN0aW5nTW9kZWxGb3JFZGl0KGRvYyk7Ci0JCQlhc3NlcnRUcnVlKCJtb2RlbHMgc2hvdWxkIGJlIHRoZSBzYW1lIGluc3RhbmNlIiwgbW9kZWwgPT0gZ290dGVuTW9kZWwpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQlpZiAoZ290dGVuTW9kZWwgIT0gbnVsbCkKLQkJCQlnb3R0ZW5Nb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TW9kZWxGcm9tRmlsZSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlGaWxlIGYgPSBnZXRGaWxlKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpLmdldE1vZGVsRm9yRWRpdChmKTsKLQkJCWFzc2VydE5vdE51bGwoImZhaWxlZCB0byBnZXQgbW9kZWwiLCBtb2RlbCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRNb2RlbEZyb21Eb2N1bWVudCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgZ290dGVuTW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJbW9kZWwgPSBnZXRTdHJ1Y3R1cmVkTW9kZWxGb3JFZGl0KCk7Ci0JCQlJU3RydWN0dXJlZERvY3VtZW50IGRvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkgICAgZ290dGVuTW9kZWwgPSBnZXRNTSgpLmdldE1vZGVsRm9yRWRpdChkb2MpOwotCQkJYXNzZXJ0VHJ1ZSgibW9kZWxzIHNob3VsZCBiZSB0aGUgc2FtZSBpbnN0YW5jZSIsIG1vZGVsID09IGdvdHRlbk1vZGVsKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJaWYgKGdvdHRlbk1vZGVsICE9IG51bGwpCi0JCQkJZ290dGVuTW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNTaGFyZWQoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsMiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCW1vZGVsMiA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCS8vIFRPRE86IHdpbGwgY2hhbmdlIHdoZW4gQVBJIGFkZGVkIHRvIE1NCi0JCQlib29sZWFuIGlzU2hhcmVkID0gZ2V0TU0oKS5pc1NoYXJlZChtb2RlbC5nZXRJZCgpKTsKLQkJCWFzc2VydFRydWUoIm1vZGVsIHNob3VsZCBiZSBzaGFyZWQiLCBpc1NoYXJlZCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCWlmIChtb2RlbDIgIT0gbnVsbCkKLQkJCQltb2RlbDIucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UmVpbml0aWFsaXplKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9IGdldFN0cnVjdHVyZWRNb2RlbEZvckVkaXQoKTsKLQkJCWdldE1NKCkucmVpbml0aWFsaXplKG1vZGVsKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKQotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFJlbGVhc2VNb2RlbCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCS8vIFRPRE86IHdpbGwgbmVlZCB0byBpbXBsZW1lbnQgd2hlbiBNTSBoYXMgdGhpcyBmdW5jdGlvbgotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTYXZlTW9kZWwoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gZ2V0U3RydWN0dXJlZE1vZGVsRm9yRWRpdCgpOwotCQkJLy8gVE9ETzogd2lsbCBuZWVkIHRvIGNoYW5nZSB3aGVuIE1NIGhhcyB0aGlzIGZ1bmN0aW9uCi0JCQltb2RlbC5zYXZlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTYXZlTW9kZWxJZk5vdFNoYXJlZCgpIHsKLQkJLy8gVE9ETzogd2lsbCBuZWVkIHRvIGltcGxlbWVudCB3aGVuIE1NIGhhcyB0aGlzIGZ1bmN0aW9uCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdE1vZGVsc0Zyb21GaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2I0ODRlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RNb2RlbHNGcm9tRmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLm1vZGVsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlN0cmluZ0J1ZmZlcklucHV0U3RyZWFtOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5maWxlYnVmZmVycy5GaWxlQnVmZmVyczsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLmZpbGVidWZmZXJzLklUZXh0RmlsZUJ1ZmZlck1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5leGNlcHRpb25zLlJlc291cmNlQWxyZWFkeUV4aXN0czsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXhjZXB0aW9ucy5SZXNvdXJjZUluVXNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC50ZXh0LkJhc2ljU3RydWN0dXJlZERvY3VtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC50ZXh0LnJ1bGVzLlN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLmRvY3VtZW50LlVuemlwcGVkUHJvamVjdFRlc3RlcjsKLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0TW9kZWxzRnJvbUZpbGVzIGV4dGVuZHMgVW56aXBwZWRQcm9qZWN0VGVzdGVyIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgTk9ORVhJU1RFTlRfRklMRU5BTUUxID0gInRlc3RmaWxlcy94bWwvdGVzdG5vbmV4aXN0ZW50MS54bWwiOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBOT05FWElTVEVOVF9GSUxFTkFNRTIgPSAidGVzdGZpbGVzL3htbC90ZXN0bm9uZXhpc3RlbnQyLnhtbCI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE5PTkVYSVNURU5UX0ZJTEVOQU1FMyA9ICJ0ZXN0ZmlsZXMveG1sL3Rlc3Rub25leGlzdGVudDMueG1sIjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgRVhJU1RFTlRfRklMRU5BTUUxID0gInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIjsKLQlwcml2YXRlIGZpbmFsIHN0YXRpYyBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uRXhpc3RlbnRGaWxlV2l0aEJ1ZmZlcigpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlQnVmZmVyKE5PTkVYSVNURU5UX0ZJTEVOQU1FMSwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTCgpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlKE5PTkVYSVNURU5UX0ZJTEVOQU1FMiwgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3ROb25FeGlzdGVudFhNTElEcygpIHRocm93cyBSZXNvdXJjZUFscmVhZHlFeGlzdHMsIFJlc291cmNlSW5Vc2UsIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJZG9UZXN0Q3JlYXRlSURzKE5PTkVYSVNURU5UX0ZJTEVOQU1FMywgQmFzaWNTdHJ1Y3R1cmVkRG9jdW1lbnQuY2xhc3MsIFN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXJGb3JYTUwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVDYXNlKCkgdGhyb3dzIFJlc291cmNlQWxyZWFkeUV4aXN0cywgUmVzb3VyY2VJblVzZSwgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlkb1Rlc3RDcmVhdGUoRVhJU1RFTlRfRklMRU5BTUUxLCBCYXNpY1N0cnVjdHVyZWREb2N1bWVudC5jbGFzcywgU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lckZvclhNTC5jbGFzcyk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGFkZENvbnRlbnRzQW5kQ3JlYXRlRmlsZShJRmlsZSBmaWxlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCVN0cmluZ0J1ZmZlcklucHV0U3RyZWFtIHN0cmluZ1N0cmVhbSA9IG5ldyBTdHJpbmdCdWZmZXJJbnB1dFN0cmVhbSgidGVzdGluZyB0ZXN0aW5nIHRlc3RpbmciKTsKLQkJZmlsZS5jcmVhdGUoc3RyaW5nU3RyZWFtLCBmYWxzZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHN0cmluZwotCSAqIEBwYXJhbSBjbGFzczEKLQkgKiBAcGFyYW0gY2xhc3MyCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgUmVzb3VyY2VJblVzZQotCSAqIEB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzCi0JICovCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZShTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGNsYXNzMSwgQ2xhc3MgY2xhc3MyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KGZpbGUsIHRydWUpOwotCQl0cnkgewotCQkJLy8gY291bnQgYXMgc3VjY2VzcyBpZiBnZXRzIHRvIGhlZXIgd2l0aG91dCBleGNlcHRpb24KLQkJCWFzc2VydFRydWUodHJ1ZSk7Ci0JCQlTdHJpbmcgZmlsZUxvY2F0aW9uID0gbW9kZWwuZ2V0QmFzZUxvY2F0aW9uKCk7Ci0JCQlTdHJpbmcgaWQgPSBtb2RlbC5nZXRJZCgpOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJmaWxlTG9jYXRpb246ICIgKyBmaWxlTG9jYXRpb24pOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiaWQ6ICIgKyBpZCk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1Rlc3RDcmVhdGVCdWZmZXIoU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBjbGFzczEsIENsYXNzIGNsYXNzMikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWlmIChmaWxlID09IG51bGwpIHsKLQkJCWZpbGUgPSBmVGVzdFByb2plY3QuZ2V0RmlsZShmaWxlUGF0aCk7Ci0JCX0KLQotCQlJVGV4dEZpbGVCdWZmZXIgZmlsZUJ1ZmZlckJlZm9yZUV4aXN0cyA9IGdldFRleHRCdWZmZXIoZmlsZSk7Ci0KLQkJYWRkQ29udGVudHNBbmRDcmVhdGVGaWxlKGZpbGUpOwotCi0JCUlUZXh0RmlsZUJ1ZmZlciBmaWxlQnVmZmVyQWZ0ZXJFeGlzdHMgPSBnZXRUZXh0QnVmZmVyKGZpbGUpOwotCi0JCWJvb2xlYW4gYnVmZmVyc0lkZW50aWNhbCA9IGZpbGVCdWZmZXJCZWZvcmVFeGlzdHMgPT0gZmlsZUJ1ZmZlckFmdGVyRXhpc3RzOwotCQlhc3NlcnRUcnVlKGJ1ZmZlcnNJZGVudGljYWwpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihmaWxlQnVmZmVyQmVmb3JlRXhpc3RzLmdldExvY2F0aW9uKCkpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVCdWZmZXJBZnRlckV4aXN0cy5nZXRMb2NhdGlvbigpKTsKLQkJfQotCQkKLQotCi0JfQotCi0JcHJpdmF0ZSB2b2lkIGRvVGVzdENyZWF0ZUlEcyhTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGNsYXNzMSwgQ2xhc3MgY2xhc3MyKSB0aHJvd3MgUmVzb3VyY2VBbHJlYWR5RXhpc3RzLCBSZXNvdXJjZUluVXNlLCBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlmaWxlID0gZlRlc3RQcm9qZWN0LmdldEZpbGUoZmlsZVBhdGgpOwotCQl9Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TmV3TW9kZWxGb3JFZGl0KGZpbGUsIHRydWUpOwotCi0JCXRyeSB7Ci0JCQlhc3NlcnROb3ROdWxsKG1vZGVsKTsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiSUQ6ICIgKyBtb2RlbC5nZXRJZCgpKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIkJhc2VMb2NhdGlvbiIgKyBtb2RlbC5nZXRCYXNlTG9jYXRpb24oKSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJVGV4dEZpbGVCdWZmZXIgZ2V0VGV4dEJ1ZmZlcihJRmlsZSBmaWxlKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlUZXh0RmlsZUJ1ZmZlck1hbmFnZXIgZmlsZUJ1ZmZlck1hbmFnZXIgPSBGaWxlQnVmZmVycy5nZXRUZXh0RmlsZUJ1ZmZlck1hbmFnZXIoKTsKLQkJSVBhdGggZmlsZUlQYXRoID0gZmlsZS5nZXRGdWxsUGF0aCgpOwotCQlJUGF0aCBub3JtYWxpemVkUGF0aCA9IEZpbGVCdWZmZXJzLm5vcm1hbGl6ZUxvY2F0aW9uKGZpbGVJUGF0aCk7Ci0JCWZpbGVCdWZmZXJNYW5hZ2VyLmNvbm5lY3Qobm9ybWFsaXplZFBhdGgsIG51bGwpOwotCQlJVGV4dEZpbGVCdWZmZXIgYnVmZmVyID0gZmlsZUJ1ZmZlck1hbmFnZXIuZ2V0VGV4dEZpbGVCdWZmZXIobm9ybWFsaXplZFBhdGgpOwotCQlyZXR1cm4gYnVmZmVyOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFN0cnVjdHVyZWRNb2RlbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFN0cnVjdHVyZWRNb2RlbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWVlNTA3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL21vZGVsL1Rlc3RTdHJ1Y3R1cmVkTW9kZWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMyMyArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxTdGF0ZUxpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuRmlsZVV0aWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWwuUHJvamVjdFVuemlwVXRpbGl0eTsKLQotcHVibGljIGNsYXNzIFRlc3RTdHJ1Y3R1cmVkTW9kZWwgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCQotCi0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlByb2plY3ROYW1lID0gIkRPQ1VNRU5ULUxPQURFUiI7Ci0JLy8gaXMgaXQgYSBwcm9ibGVtIHRvIHVuemlwIHRoZSBzYW1lIHByb2plY3QgaW4KLQkvLyBkaWZmZXJlbnQgdGVzdHM/Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZlppcEZpbGVOYW1lID0gInhtbC1kb2N1bWVudC1sb2FkZXItdGVzdHMuemlwIjsKLQotCXB1YmxpYyBUZXN0U3RydWN0dXJlZE1vZGVsKCkgewotCQlzdXBlcigiVGVzdFN0cnVjdHVyZWRNb2RlbCIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJc3VwZXIuc2V0VXAoKTsKLQkJaWYgKCF0aGlzLmlzU2V0dXApIHsKLQkJCQotCQkJZG9TZXR1cCgpOwotCQkJdGhpcy5pc1NldHVwID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByaXZhdGUgdm9pZCBkb1NldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0KLQkJLy8gcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCUxvY2F0aW9uIHBsYXRmb3JtTG9jYXRpb24gPSBQbGF0Zm9ybS5nZXRJbnN0YW5jZUxvY2F0aW9uKCk7Ci0KLQkJUHJvamVjdFVuemlwVXRpbGl0eSB1bnppcFV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQlGaWxlIHppcEZpbGUgPSBGaWxlVXRpbC5tYWtlRmlsZUZvcihQcm9qZWN0VW56aXBVdGlsaXR5LlBST0pFQ1RfWklQU19GT0xERVIsIGZaaXBGaWxlTmFtZSwgUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSKTsKLQkJdW56aXBVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIHBsYXRmb3JtTG9jYXRpb24uZ2V0VVJMKCkuZ2V0RmlsZSgpKTsKLQkJdW56aXBVdGlsLmluaXRKYXZhUHJvamVjdChmUHJvamVjdE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBYm91dFRvQ2hhbmdlTW9kZWwoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQltb2RlbC5hYm91dFRvQ2hhbmdlTW9kZWwoKTsKLQkJCWFzc2VydFRydWUodHJ1ZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEFkZFJlbW92ZU1vZGVsU3RhdGVMaXN0ZW5lcigpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlNb2RlbFN0YXRlTGlzdGVuZXIgbGlzdGVuZXIgPSBuZXcgSU1vZGVsU3RhdGVMaXN0ZW5lcigpIHsKLQotCQkJCXB1YmxpYyB2b2lkIG1vZGVsQWJvdXRUb0JlQ2hhbmdlZChJU3RydWN0dXJlZE1vZGVsIG1vZGVsKSB7Ci0JCQkJCS8vCi0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxDaGFuZ2VkKElTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwpIHsKLQkJCQkJLy8gCQotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIG1vZGVsRGlydHlTdGF0ZUNoYW5nZWQoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCwgYm9vbGVhbiBpc0RpcnR5KSB7Ci0JCQkJCS8vCi0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxSZXNvdXJjZURlbGV0ZWQoSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCkgewotCQkJCQkvLyAKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBtb2RlbFJlc291cmNlTW92ZWQoSVN0cnVjdHVyZWRNb2RlbCBvbGRNb2RlbCwgSVN0cnVjdHVyZWRNb2RlbCBuZXdNb2RlbCkgewotCQkJCQkvLyAJCQotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIG1vZGVsQWJvdXRUb0JlUmVpbml0aWFsaXplZChJU3RydWN0dXJlZE1vZGVsIHN0cnVjdHVyZWRNb2RlbCkgewotCQkJCQkvLyAJCi0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgbW9kZWxSZWluaXRpYWxpemVkKElTdHJ1Y3R1cmVkTW9kZWwgc3RydWN0dXJlZE1vZGVsKSB7Ci0JCQkJCS8vIAotCQkJCX0KLQkJCX07Ci0KLQkJCW1vZGVsLmFib3V0VG9DaGFuZ2VNb2RlbCgpOwotCi0JCQltb2RlbC5yZW1vdmVNb2RlbFN0YXRlTGlzdGVuZXIobGlzdGVuZXIpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCi0JLyoqCi0JICogVGVzdCBleHBlY3RlcyBhbiBleGNlcHRpb24gc2luY2Ugb25seSBhIGNoYW5nZWRNb2RlbCBzZW50LCB3aXRob3V0Ci0JICogYmVnaW5uaW5nICdhYm91dFRvQ2hhbmdlTW9kZWwnCi0JICogCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RDaGFuZ2VkTW9kZWwoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQl0cnkgewotCQkJCW1vZGVsLmNoYW5nZWRNb2RlbCgpOwotCQkJfQotCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJYXNzZXJ0VHJ1ZShlIGluc3RhbmNlb2YgSWxsZWdhbFN0YXRlRXhjZXB0aW9uKTsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudFR5cGUoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQlTdHJpbmcgY3QgPSBtb2RlbC5nZXRDb250ZW50VHlwZUlkZW50aWZpZXIoKTsKLQkJCWFzc2VydFRydWUoIm1vZGVsIGhhcyB3cm9uZyBjb250ZW50IHR5cGU6IiArIGN0ICsgIiAhPSAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgY3QuZXF1YWxzKENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QmFzZUxvY2F0aW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJU3RyaW5nIGxvY2F0aW9uID0gbW9kZWwuZ2V0QmFzZUxvY2F0aW9uKCk7Ci0JCQlhc3NlcnRUcnVlKCJ3cm9uZyBiYXNlIGxvY2F0aW9uIiwgbG9jYXRpb24uZXF1YWxzKCIvIiArIGZQcm9qZWN0TmFtZSArICIvZmlsZXMvc2ltcGxlLnhtbCIpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RHZXRGYWN0b3J5UmVnaXN0cnkoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQltb2RlbC5nZXRGYWN0b3J5UmVnaXN0cnkoKTsKLQkJCWFzc2VydFRydWUodHJ1ZSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldEluZGV4ZWRSZWdpb24oKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQltb2RlbC5nZXRJbmRleGVkUmVnaW9uKDApOwotCQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0SW5kZXhlZFJlZ2lvbnMoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCQkvLyBub3QgaW1wbGVtZW50ZWQgeWV0Li4uCi0JCQkvLyBtb2RlbC5nZXRJbmRleGVkUmVnaW9ucygpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFN0cnVjdHVyZWREb2N1bWVudCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgZG9jID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCQlhc3NlcnROb3ROdWxsKCJkb2N1bWVudCBpcyBudWxsIiwgZG9jKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNEaXJ0eSgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJCWFzc2VydEZhbHNlKCJtb2RlbCBzaG91bGQgbm90IGJlIGRpcnR5IiwgbW9kZWwuaXNEaXJ0eSgpKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb2RlbCAhPSBudWxsKSB7Ci0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNNb2RlbFN0YXRlQ2hhbmdpbmcoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZ2V0VGVzdE1vZGVsKCk7Ci0JCXRyeSB7Ci0JCWFzc2VydEZhbHNlKCJtb2RlbCBzaG91bGQgbm90IGJlIGNoYW5naW5nIiwgbW9kZWwuaXNNb2RlbFN0YXRlQ2hhbmdpbmcoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElzTmV3KCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkvLyB0aGlzIEFQSSBzZWVtcyBzdHJhbmdlCi0JCS8vIGFzc2VydEZhbHNlKCJuZXcgbW9kZWwgY2hlY2sgZmFpbGVkIiwgbW9kZWwuaXNOZXcoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdElzUmVpbml0aWFsaXphdGlvbk5lZWRlZCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBnZXRUZXN0TW9kZWwoKTsKLQkJdHJ5IHsKLQkJYXNzZXJ0RmFsc2UoInJlaW5pdGlhbGl6YXRpb24gc2hvdWxkIG5vdCBiZSBuZWVkZWQiLCBtb2RlbC5pc1JlaW5pdGlhbGl6YXRpb25OZWVkZWQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0SXNTYXZlTmVlZGVkKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJYXNzZXJ0RmFsc2UoInNhdmUgc2hvdWxkIG5vdCBiZSBuZWVkZWQiLCBtb2RlbC5pc1NhdmVOZWVkZWQoKSk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdE5ld0luc3RhbmNlKCkgdGhyb3dzIElPRXhjZXB0aW9uLCBDb3JlRXhjZXB0aW9uIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGdldFRlc3RNb2RlbCgpOwotCQl0cnkgewotCQkJSVN0cnVjdHVyZWRNb2RlbCBuZXdJbnN0YW5jZSA9IG51bGw7Ci0JCQl0cnkgewotCQkJCW5ld0luc3RhbmNlID0gbW9kZWwubmV3SW5zdGFuY2UoKTsKLQkJCX0KLQkJCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiSU9FeGNlcHRpb24gZHVyaW5nIG1vZGVsIG5ldyBpbnN0YW5jZSIsIGZhbHNlKTsKLQkJCX0KLQkJCWFzc2VydE5vdE51bGwoIm5ldyBpbnN0YW5jZSBpcyBudWxsIiwgbmV3SW5zdGFuY2UpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vZGVsICE9IG51bGwpIHsKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJCX0KLQkJfQotCX0KLQotCS8qKgotCSAqIEJlIHN1cmUgdG8gcmVsZWFzZSBhbnkgbW9kZWxzIG9idGFpbmVkIGZyb20gdGhpcyBtZXRob2QuCi0JICogCi0JICovCi0JSVN0cnVjdHVyZWRNb2RlbCBnZXRUZXN0TW9kZWwoKSB0aHJvd3MgSU9FeGNlcHRpb24sIENvcmVFeGNlcHRpb24gewotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QoZlByb2plY3ROYW1lKTsKLQkJSUZpbGUgaUZpbGUgPSAoSUZpbGUpIHByb2plY3QuZmluZE1lbWJlcigiL2ZpbGVzL3NpbXBsZS54bWwiKTsKLQkJLy8gZlByb2plY3ROYW1lICsgIi9maWxlcy9zaW1wbGUueG1sIgotCi0KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQotCQltb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoaUZpbGUpOwotCi0KLQkJcmV0dXJuIG1vZGVsOwotCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvbW9kZWwvVGVzdFhNTE1vZGVsTG9hZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0WE1MTW9kZWxMb2FkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ2ODMyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy9tb2RlbC9UZXN0WE1MTW9kZWxMb2FkZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyOSArMCwwIEBACi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy5tb2RlbDsKLQotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5vc2dpLnNlcnZpY2UuZGF0YWxvY2F0aW9uLkxvY2F0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JU3RydWN0dXJlZE1vZGVsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC50ZXh0LklTdHJ1Y3R1cmVkRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLm1vZGVsaGFuZGxlci5YTUxNb2RlbExvYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5GaWxlVXRpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0vKioKLSAqCi0gKiAKLSAqLwotcHVibGljIGNsYXNzIFRlc3RYTUxNb2RlbExvYWRlciBleHRlbmRzIFRlc3RDYXNlIHsKLQkKLQlwcml2YXRlIGJvb2xlYW4gaXNTZXR1cCA9IGZhbHNlOwotCXByaXZhdGUgWE1MTW9kZWxMb2FkZXIgZkxvYWRlciA9IG51bGw7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmUHJvamVjdE5hbWUgPSJET0NVTUVOVC1MT0FERVIiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZaaXBGaWxlTmFtZSA9ICJ4bWwtZG9jdW1lbnQtbG9hZGVyLXRlc3RzLnppcCI7Ci0JCi0JCi0gICAgcHVibGljIFRlc3RYTUxNb2RlbExvYWRlcigpIHsKLSAgICAgICAgc3VwZXIoIlRlc3RNb2RlbExvYWRlciIpOwotICAgIH0KLQkKLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLSAgICAJc3VwZXIuc2V0VXAoKTsKLQkJaWYoIXRoaXMuaXNTZXR1cCl7Ci0JCQlmTG9hZGVyID0gbmV3IFhNTE1vZGVsTG9hZGVyKCk7Ci0JCQlkb1NldHVwKCk7Ci0JCQl0aGlzLmlzU2V0dXAgPSB0cnVlOwotCQl9Ci0gICAgfQotCQotCXByaXZhdGUgdm9pZCBkb1NldHVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CQotCQotCQkvLyByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJTG9jYXRpb24gcGxhdGZvcm1Mb2NhdGlvbiA9IFBsYXRmb3JtLmdldEluc3RhbmNlTG9jYXRpb24oKTsKLQkJCi0JCVByb2plY3RVbnppcFV0aWxpdHkgdW56aXBVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJRmlsZSB6aXBGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IoUHJvamVjdFVuemlwVXRpbGl0eS5QUk9KRUNUX1pJUFNfRk9MREVSLCBmWmlwRmlsZU5hbWUsIFByb2plY3RVbnppcFV0aWxpdHkuUFJPSkVDVF9aSVBTX0ZPTERFUik7Ci0JCXVuemlwVXRpbC51bnppcEFuZEltcG9ydCh6aXBGaWxlLCBwbGF0Zm9ybUxvY2F0aW9uLmdldFVSTCgpLmdldEZpbGUoKSk7Ci0JCXVuemlwVXRpbC5pbml0SmF2YVByb2plY3QoZlByb2plY3ROYW1lKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZUVtcHR5TW9kZWwoKSB7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBmTG9hZGVyLmNyZWF0ZU1vZGVsKCk7Ci0JCWFzc2VydE5vdE51bGwoIm1vZGVsIGlzIG51bGwiLCBtb2RlbCk7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGVNb2RlbFdpdGhEb2N1bWVudCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBlbXB0eU1vZGVsID0gZkxvYWRlci5jcmVhdGVNb2RlbCgpOwotCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBlbXB0eU1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQlzRG9jLnNldCgiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cbjx0ZXN0PlxuPGl0ZW0gYXR0cj1cInZhbFwiIC8+PC90ZXN0PlxuIik7Ci0JCQotCQkvLyBudWxsIGhhbmRsZGVyIGlzIG5vcm1hbGx5IG5vdCB2YWxpZCwgaW5jbHVkaW5nIG9ubHkgZm9yIHRoaXMgdGVzdC4KLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbEZyb21Eb2MgPSBmTG9hZGVyLmNyZWF0ZU1vZGVsKHNEb2MsICIvdGVzdCIsIG51bGwpOwotCQlhc3NlcnROb3ROdWxsKCJtb2RlbCBmcm9tIGRvYyBpcyBudWxsIiwgbW9kZWxGcm9tRG9jKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZU1vZGVsV2l0aE1vZGVsKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIGVtcHR5TW9kZWwgPSBmTG9hZGVyLmNyZWF0ZU1vZGVsKCk7Ci0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IGVtcHR5TW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCXNEb2Muc2V0KCI8P3htbCB2ZXJzaW9uPVwiMS4wXCI/PlxuPHRlc3Q+XG48aXRlbSBhdHRyPVwidmFsXCIgLz48L3Rlc3Q+XG4iKTsKLQkJLy8gVE9ETzogbmVlZCBhbiBleGlzdGluZyBmdWxsIG1vZGVsCi0JCS8vSVN0cnVjdHVyZWRNb2RlbCBtb2RlbEZyb21Nb2RlbCA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoZW1wdHlNb2RlbCk7Ci0JCS8vYXNzZXJ0Tm90TnVsbCgibW9kZWwgZnJvbSBtb2RlbCBpcyBudWxsIiwgbW9kZWxGcm9tTW9kZWwpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0QWRhcHRlckZhY3RvcmllcygpIHsKLQkJTGlzdCBmYWN0b3JpZXMgPSBmTG9hZGVyLmdldEFkYXB0ZXJGYWN0b3JpZXMoKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgd2VyZSBubyBhZGFwdGVyIGZhY3RvcmllcyBmb3IgWE1MIiwgZmFjdG9yaWVzLnNpemUoKSA+IDApOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0TG9hZCgpIHsKLQkJLy8gZnJvbSBhIGZpbGUJCi0JCUlGaWxlIGYgPSBnZXRGaWxlKCk7Ci0JCQotCQl0cnkgewotCQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IGZMb2FkZXIuY3JlYXRlTW9kZWwoKTsKLQkJCWZMb2FkZXIubG9hZChmLCBtb2RlbCk7Ci0JCQlTdHJpbmcgdGV4dCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotCQkJYXNzZXJ0VHJ1ZSgiZmFpbGVkIHRvIGxvYWQiLCB0ZXh0Lmxlbmd0aCgpID4gMCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0TG9hZEZyb21TdHJlYW0oKSB7Ci0JCS8vIG5lZWQgdG8gZml4IHRoaXMgdGVzdAotCQkvLyB1bmxlc3MgdGhlIEFQSSBpcyBnb2luZyBhd2F5Li4uCi0vLwkJSUZpbGUgZiA9IGdldEZpbGUoKTsKLS8vCQkKLS8vCQl0cnkgewotLy8JCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gZkxvYWRlci5jcmVhdGVNb2RlbCgpOwotLy8JCQlmTG9hZGVyLmxvYWQoZi5nZXRDb250ZW50cygpLCBtb2RlbCwgRW5jb2RpbmdSdWxlLkZPUkNFX0RFRkFVTFQpOwotLy8JCQlTdHJpbmcgdGV4dCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpLmdldCgpOwotLy8JCQlhc3NlcnRUcnVlKCJmYWlsZWQgdG8gbG9hZCIsIHRleHQubGVuZ3RoKCkgPiAwKTsKLS8vCQl9Ci0vLwkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLS8vCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLS8vCQl9Ci0vLwkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotLy8JCX0KLQl9Ci0JCi0JCi0JcHJpdmF0ZSBJRmlsZSBnZXRGaWxlKCkgewotCQlyZXR1cm4gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZQcm9qZWN0TmFtZSArICIvZmlsZXMvc2ltcGxlLnhtbCIpKTsJCi0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC9OdWxsU3RyZWFtLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L051bGxTdHJlYW0uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJlMjM1ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L051bGxTdHJlYW0uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudGV4dDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotCi1wdWJsaWMgY2xhc3MgTnVsbFN0cmVhbSBleHRlbmRzIElucHV0U3RyZWFtIHsKLQotCS8qIChub24tSmF2YWRvYykKLQkgKiBAc2VlIGphdmEuaW8uSW5wdXRTdHJlYW0jcmVhZCgpCi0JICovCi0JcHVibGljIGludCByZWFkKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJcmV0dXJuIC0xOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNjMzIzYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC9UZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudGV4dDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb24zOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSURvY3VtZW50UGFydGl0aW9uZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JVHlwZWRSZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLklTdHJ1Y3R1cmVkTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbmluZzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwudGV4dC5JU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudXRpbHMuU3RyaW5nVXRpbHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRleHQuSVhNTFBhcnRpdGlvbnM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LkRlY2ltYWxGb3JtYXQ7Ci0KLXB1YmxpYyBjbGFzcyBUZXN0U3RydWN0dXJlZFBhcnRpdGlvbmVyWE1MIGV4dGVuZHMgVGVzdENhc2UgewotCQotCXByaXZhdGUgYm9vbGVhbiBERUJVR19QUklOVF9SRVNVTFQgPSBmYWxzZTsKLQlwcm90ZWN0ZWQgSVR5cGVkUmVnaW9uW10gcGFydGl0aW9ucyA9IG51bGw7Ci0KLQlwcml2YXRlIGJvb2xlYW4gdXNlRm9ybWF0dGVyID0gdHJ1ZTsKLQlwcm90ZWN0ZWQgRGVjaW1hbEZvcm1hdCBmb3JtYXR0ZXI7Ci0KLQlwdWJsaWMgVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lclhNTChTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpCi0JCQlmb3JtYXR0ZXIgPSBuZXcgRGVjaW1hbEZvcm1hdCgpOwotCX0KLQkKLQkvKioKLQkgKiBtdXN0IHJlbGVhc2UgbW9kZWwgKGZyb20gZWRpdCkgYWZ0ZXIKLQkgKiBAcGFyYW0gZmlsZW5hbWUgcmVsYXRpdmUgdG8gdGhpcyBjbGFzcyAoVGVzdFN0cnVjdHVyZWRQYXJ0aXRpb25lcikKLQkgKi8KLQlwcml2YXRlIElTdHJ1Y3R1cmVkTW9kZWwgZ2V0TW9kZWxGb3JFZGl0KFN0cmluZyBmaWxlbmFtZSkgewotCi0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBudWxsOwotCQl0cnkgewotCQkJSU1vZGVsTWFuYWdlciBtb2RlbE1hbmFnZXIgPSBTdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyLmdldE1vZGVsTWFuYWdlcigpOwotCQkJSW5wdXRTdHJlYW0gaW5TdHJlYW0gPSBnZXRDbGFzcygpLmdldFJlc291cmNlQXNTdHJlYW0oZmlsZW5hbWUpOwotCQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQkJaW5TdHJlYW0gPSBuZXcgTnVsbFN0cmVhbSgpOwotCQkJbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGV4KSB7Ci0JCQlleC5wcmludFN0YWNrVHJhY2UoKTsKLQkJfQotCQlyZXR1cm4gbW9kZWw7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3REaXNjb25uZWN0Q29ubmVjdCgpIHsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG51bGw7Ci0JCXRyeSB7Ci0JCQltb2RlbCA9Z2V0TW9kZWxGb3JFZGl0KCJ0ZXN0ZmlsZXMveG1sL2V4YW1wbGUwMS54bWwiKTsKLQkJCWlmKG1vZGVsICE9IG51bGwpIHsKLQkJCQlJU3RydWN0dXJlZERvY3VtZW50IHNEb2MgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJCQlhc3NlcnRUcnVlKCJzRG9jIGltcGxlbWVudGF0aW9uIG5vdCBpbnN0YW5jZSBvZiBJRG9jdW1lbnRFeHRlbnNpb24zIiwgc0RvYyBpbnN0YW5jZW9mIElEb2N1bWVudEV4dGVuc2lvbjMpOwotCQkJCi0JCQkJSURvY3VtZW50UGFydGl0aW9uZXIgcGFydGl0aW9uZXIgPSAoKElEb2N1bWVudEV4dGVuc2lvbjMpc0RvYykuZ2V0RG9jdW1lbnRQYXJ0aXRpb25lcihJU3RydWN0dXJlZFBhcnRpdGlvbmluZy5ERUZBVUxUX1NUUlVDVFVSRURfUEFSVElUSU9OSU5HKTsKLQkJCQlhc3NlcnRUcnVlKCJwYXJ0aXRpb25lciBkb2Vzbid0IGltcGxlbWVudCBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciIsIHBhcnRpdGlvbmVyIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpOwotCQkJCQotCQkJCUlTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIHN0cCA9IChJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcilwYXJ0aXRpb25lcjsKLQkJCQlhc3NlcnROb3ROdWxsKCJwYXJ0aXRpb25lciB3YXMgbnVsbCBmb3Igc0RvYzoiICsgc0RvYywgcGFydGl0aW9uZXIpOwotCQkJCXRyeSB7Ci0JCQkJCXN0cC5kaXNjb25uZWN0KCk7Ci0JCQkJfQotCQkJCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWFzc2VydFRydWUoInByb2JsZW0gZGlzY29ubmVjdGluZyB3LzoiICtzRG9jICsgIi9uIiArIGUsIGZhbHNlKTsKLQkJCQl9Ci0JCQkJdHJ5IHsKLQkJCQkJc3RwLmNvbm5lY3Qoc0RvYyk7Ci0JCQkJfQotCQkJCWNhdGNoKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWFzc2VydFRydWUoInByb2JsZW0gY29ubmVjdGluZyB3LzoiICsgc0RvYyArICIvbiIgKyBlLCBmYWxzZSk7Ci0JCQkJfQotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwiLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSAgewotCQkJaWYobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERlZmF1bHRQYXJ0aXRpb25UeXBlKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbCIpOwotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCWFzc2VydFRydWUoInNEb2MgaW1wbGVtZW50YXRpb24gbm90IGluc3RhbmNlIG9mIElEb2N1bWVudEV4dGVuc2lvbjMiLCBzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCQkKLQkJCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMylzRG9jKS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJCWFzc2VydFRydWUoInBhcnRpdGlvbmVyIGRvZXNuJ3QgaW1wbGVtZW50IElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyIiwgcGFydGl0aW9uZXIgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lcik7Ci0JCQkJCi0JCQkJSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIgc3RwID0gKElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKXBhcnRpdGlvbmVyOwotCQkJCVN0cmluZyBkZWZhdWx0UGFydGl0aW9uVHlwZSA9IHN0cC5nZXREZWZhdWx0UGFydGl0aW9uVHlwZSgpOwotCQkJCWFzc2VydFRydWUoIndyb25nIGRlZmF1bHQgcGFydGl0aW9uIHR5cGUgd2FzOiBbIiArIGRlZmF1bHRQYXJ0aXRpb25UeXBlICsgIl0gc2hvdWxkIGJlOiBbIiArIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUICsgIl0iLCBkZWZhdWx0UGFydGl0aW9uVHlwZS5lcXVhbHMoSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQpKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWFzc2VydFRydWUoImNvdWxkIG5vdCByZXRyaWV2ZSBzdHJ1Y3R1cmVkIG1vZGVsIiwgZmFsc2UpOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgIHsKLQkJCWlmKG1vZGVsICE9IG51bGwpCi0JCQkJbW9kZWwucmVsZWFzZUZyb21FZGl0KCk7Ci0JCX0JCi0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RHZXRQYXJ0aXRpb25UeXBlKCkgewotCQlJU3RydWN0dXJlZE1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID1nZXRNb2RlbEZvckVkaXQoInRlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbCIpOwotCQkJaWYobW9kZWwgIT0gbnVsbCkgewotCQkJCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc0RvYyA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCQkJCWFzc2VydFRydWUoInNEb2MgaW1wbGVtZW50YXRpb24gbm90IGluc3RhbmNlIG9mIElEb2N1bWVudEV4dGVuc2lvbjMiLCBzRG9jIGluc3RhbmNlb2YgSURvY3VtZW50RXh0ZW5zaW9uMyk7Ci0JCQkKLQkJCQlJRG9jdW1lbnRQYXJ0aXRpb25lciBwYXJ0aXRpb25lciA9ICgoSURvY3VtZW50RXh0ZW5zaW9uMylzRG9jKS5nZXREb2N1bWVudFBhcnRpdGlvbmVyKElTdHJ1Y3R1cmVkUGFydGl0aW9uaW5nLkRFRkFVTFRfU1RSVUNUVVJFRF9QQVJUSVRJT05JTkcpOwotCQkJCWFzc2VydFRydWUoInBhcml0aW9uZXIgZG9lc24ndCBpbXBsZW1lbnQgSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIiLCBwYXJ0aXRpb25lciBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkVGV4dFBhcnRpdGlvbmVyKTsKLQkJCQkKLQkJCQlJU3RydWN0dXJlZFRleHRQYXJ0aXRpb25lciBzdHAgPSAoSVN0cnVjdHVyZWRUZXh0UGFydGl0aW9uZXIpcGFydGl0aW9uZXI7Ci0JCQkJU3RyaW5nIGRlZmF1bHRQYXJ0aXRpb25UeXBlID0gc3RwLmdldERlZmF1bHRQYXJ0aXRpb25UeXBlKCk7Ci0JCQkJYXNzZXJ0VHJ1ZSgid3JvbmcgZGVmYXVsdCBwYXJ0aXRpb24gdHlwZSB3YXM6IFsiICsgZGVmYXVsdFBhcnRpdGlvblR5cGUgKyAiXSBzaG91bGQgYmU6IFsiICsgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQgKyAiXSIsIGRlZmF1bHRQYXJ0aXRpb25UeXBlLmVxdWFscyhJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVCkpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJYXNzZXJ0VHJ1ZSgiY291bGQgbm90IHJldHJpZXZlIHN0cnVjdHVyZWQgbW9kZWwiLCBmYWxzZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSAgewotCQkJaWYobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQkKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFhNTDEoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDY7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbCIpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgZXhwZWN0ZWRQYXJ0aXRpb25zLCBuUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lYTUxQYXJ0aXRpb25zLlhNTF9QSSwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9ERUNMQVJBVElPTiwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9DT01NRU5ULCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH0pOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0RW1wdHkoKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJaW50IGV4cGVjdGVkUGFydGl0aW9ucyA9IDE7Ci0JCWludCBuUGFydGl0aW9ucyA9IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoInRlc3RmaWxlcy94bWwvZW1wdHkueG1sIik7Ci0JCWFzc2VydEVxdWFscygid3JvbmcgbnVtYmVyIG9mIHBhcnRpdGlvbnMiLCBleHBlY3RlZFBhcnRpdGlvbnMsIG5QYXJ0aXRpb25zKTsKLQkJY2hlY2tTZWFtcygpOwotCQl2ZXJpZnlQYXJ0aXRpb25UeXBlcyhwYXJ0aXRpb25zLCBuZXcgU3RyaW5nW117SVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFR9KTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UGVyZlhNTCgpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlpbnQgZXhwZWN0ZWRQYXJ0aXRpb25zID0gNjsKLQkJaW50IG5QYXJ0aXRpb25zID0gZG9UaW1lZENvbXB1dGVQYXJ0aXRpb25pbmdUZXN0KCJ0ZXN0ZmlsZXMveG1sL2NvbXBhbnkzMDBrLnhtbCIpOwotCQlhc3NlcnRFcXVhbHMoIndyb25nIG51bWJlciBvZiBwYXJ0aXRpb25zIiwgZXhwZWN0ZWRQYXJ0aXRpb25zLCBuUGFydGl0aW9ucyk7Ci0JCWNoZWNrU2VhbXMoKTsKLQkJdmVyaWZ5UGFydGl0aW9uVHlwZXMocGFydGl0aW9ucywgbmV3IFN0cmluZ1tde0lYTUxQYXJ0aXRpb25zLlhNTF9QSSwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9ERUNMQVJBVElPTiwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFQsIElYTUxQYXJ0aXRpb25zLlhNTF9DT01NRU5ULCBJWE1MUGFydGl0aW9ucy5YTUxfREVGQVVMVH0pOwotCX0KLQkKLQkvKioKLQkgKiBFbnN1cmUgdGhhdCB0aGUgY3VycmVudCBsaXN0IG9mIHBhcnRpdGlvbnMgYXJlIGFsbCBhZGphY2VudCB0byBvbmUgYW5vdGhlcgotCSAqLwotCXByb3RlY3RlZCB2b2lkIGNoZWNrU2VhbXMoKSB7Ci0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm47Ci0JCWludCBvZmZzZXQgPSAwOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCWFzc2VydEVxdWFscygicGFydGl0aW9ucyBhcmUgbm90IGNvbnRpZ3VvdXMhIiwgb2Zmc2V0LCBwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpKTsKLQkJCW9mZnNldCA9IHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkgKyBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogQ29tcHV0ZSB0aGUgcGFydGl0aW9ucyBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRpdGlvbmVyCi0JICogZm9yIHRoYXQgZmlsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gaW50Ci0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGRvQ29tcHV0ZVBhcnRpdGlvbmluZ1Rlc3QoU3RyaW5nIGZpbGVuYW1lKSB0aHJvd3MgSU9FeGNlcHRpb24sIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQlpblN0cmVhbSA9IG5ldyBOdWxsU3RyZWFtKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0KLQkJSVN0cnVjdHVyZWREb2N1bWVudCBzdHJ1Y3R1cmVkRG9jdW1lbnQgPSBtb2RlbC5nZXRTdHJ1Y3R1cmVkRG9jdW1lbnQoKTsKLQkJaWYgKERFQlVHX1BSSU5UX1JFU1VMVCAmJiB1c2VGb3JtYXR0ZXIpIHsKLQkJCWRvdWJsZSBiYXNlVGVuID0gTWF0aC5sb2coMTApOwotCQkJZm9ybWF0dGVyLnNldE1pbmltdW1JbnRlZ2VyRGlnaXRzKChpbnQpIChNYXRoLmxvZyhzdHJ1Y3R1cmVkRG9jdW1lbnQuZ2V0TGVuZ3RoKCkpIC8gYmFzZVRlbikgKyAxKTsKLQkJCWZvcm1hdHRlci5zZXRHcm91cGluZ1VzZWQoZmFsc2UpOwotCQl9Ci0KLQkJcGFydGl0aW9ucyA9IHN0cnVjdHVyZWREb2N1bWVudC5jb21wdXRlUGFydGl0aW9uaW5nKDAsIHN0cnVjdHVyZWREb2N1bWVudC5nZXRMZW5ndGgoKSk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCVN0cmluZyBjb250ZW50cyA9IG51bGw7Ci0KLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcGFydGl0aW9ucy5sZW5ndGg7IGkrKykgewotCQkJCXRyeSB7Ci0JCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpLCBwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKTsKLQkJCQl9Ci0JCQkJY2F0Y2ggKEJhZExvY2F0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCQkJY29udGVudHMgPSAiKmVycm9yKiI7Ci0JCQkJfQotCQkJCWlmICh1c2VGb3JtYXR0ZXIpCi0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihmb3JtYXR0ZXIuZm9ybWF0KHBhcnRpdGlvbnNbaV0uZ2V0T2Zmc2V0KCkpICsgIjoiICsgZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldExlbmd0aCgpKSArICIgLSAiICsgcGFydGl0aW9uc1tpXS5nZXRUeXBlKCkgKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQkJZWxzZQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4ocGFydGl0aW9uc1tpXSArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJCX0KLQkJfQotCQljaGVja1NlYW1zKCk7Ci0JCW1vZGVsLnJlbGVhc2VGcm9tRWRpdCgpOwotCQlpblN0cmVhbS5jbG9zZSgpOwotCi0JCWlmIChwYXJ0aXRpb25zID09IG51bGwpCi0JCQlyZXR1cm4gLTE7Ci0JCXJldHVybiBwYXJ0aXRpb25zLmxlbmd0aDsKLQl9Ci0KLQkvKioKLQkgKiBSZXRyaWV2ZXMgdGhlIHNpbmdsZSBwYXJ0aXRpb24gYXQgdGhlIGdpdmVuIG9mZnNldCBmb3IgdGhlIGdpdmVuIGZpbGUsIHVzaW5nIHRoZQotCSAqIGRlZmF1bHQgcGFydGl0aW9uZXIgZm9yIHRoYXQgZmlsZSB0eXBlLiAgVGhpcyB0ZXN0IGFsbG93cyBmb3IgdmVyaWZ5aW5nIHRoZSB6ZXJvLWxlbmd0aAotCSAqIHBhcnRpdGlvbmluZyBiZWhhdmlvci4KLQkgKiAKLQkgKiBAcGFyYW0gZmlsZW5hbWUKLQkgKiBAcGFyYW0gb2Zmc2V0Ci0JICogQHJldHVybiBJVHlwZWRSZWdpb24KLQkgKiBAdGhyb3dzIElPRXhjZXB0aW9uCi0JICogQHRocm93cyBCYWRMb2NhdGlvbkV4Y2VwdGlvbgotCSAqLwotCXByb3RlY3RlZCBJVHlwZWRSZWdpb24gZ2V0UGFydGl0aW9uVGVzdChTdHJpbmcgZmlsZW5hbWUsIGludCBvZmZzZXQpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSVN0cnVjdHVyZWRNb2RlbCBtb2RlbCA9IG1vZGVsTWFuYWdlci5nZXRNb2RlbEZvckVkaXQoZmlsZW5hbWUsIGluU3RyZWFtLCBudWxsKTsKLQotCQlJU3RydWN0dXJlZERvY3VtZW50IHN0cnVjdHVyZWREb2N1bWVudCA9IG1vZGVsLmdldFN0cnVjdHVyZWREb2N1bWVudCgpOwotCi0JCXBhcnRpdGlvbnMgPSBudWxsOwotCQlJVHlwZWRSZWdpb24gcGFydGl0aW9uID0gc3RydWN0dXJlZERvY3VtZW50LmdldFBhcnRpdGlvbihvZmZzZXQpOwotCQlpZiAoREVCVUdfUFJJTlRfUkVTVUxUKSB7Ci0JCQlTdHJpbmcgY29udGVudHMgPSBudWxsOwotCi0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIlxuZmlsZW5hbWU6ICIgKyBmaWxlbmFtZSk7Ci0JCQl0cnkgewotCQkJCWNvbnRlbnRzID0gc3RydWN0dXJlZERvY3VtZW50LmdldChwYXJ0aXRpb24uZ2V0T2Zmc2V0KCksIHBhcnRpdGlvbi5nZXRMZW5ndGgoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQmFkTG9jYXRpb25FeGNlcHRpb24gZSkgewotCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJfQotCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbiArICIgWyIgKyBTdHJpbmdVdGlscy5lc2NhcGUoY29udGVudHMpICsgIl0iKTsKLQkJfQotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQotCQlyZXR1cm4gcGFydGl0aW9uOwotCX0KLQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHBhcnRpdGlvbnMgYXJlIG9mIHRoZSBnaXZlbiBwYXJ0aXRpb24gdHlwZXMKLQkgKiBAcGFyYW0gdHlwZWRSZWdpb25zCi0JICogQHBhcmFtIHR5cGVzCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdmVyaWZ5UGFydGl0aW9uVHlwZXMoSVR5cGVkUmVnaW9uIGFjdHVhbFR5cGVkUmVnaW9uc1tdLCBTdHJpbmcgZXhwZWN0ZWRUeXBlc1tdKSB7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgZXhwZWN0ZWRUeXBlcy5sZW5ndGg7IGkrKykKLQkJCWFzc2VydEVxdWFscygicGFydGl0aW9uIHR5cGUgbWlzbWF0Y2hlZCIsIGV4cGVjdGVkVHlwZXNbaV0sIGFjdHVhbFR5cGVkUmVnaW9uc1tpXS5nZXRUeXBlKCkpOwotCX0KLQotCS8qKgotCSAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHBhcnRpdGlvbnMgYmVnaW4gYXQgdGhlIGdpdmVuIG9mZnNldHMKLQkgKiBAcGFyYW0gdHlwZWRSZWdpb25zCi0JICogQHBhcmFtIHR5cGVzCi0JICovCi0JcHJvdGVjdGVkIHZvaWQgdmVyaWZ5UGFydGl0aW9uUmVnaW9ucyhJVHlwZWRSZWdpb24gdHlwZWRSZWdpb25zW10sIGludCBvZmZzZXRzW10pIHsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7Ci0JCQlhc3NlcnRFcXVhbHMoIm9mZnNldCBtaXNtYXRjaGVkIiwgdHlwZWRSZWdpb25zW2ldLmdldE9mZnNldCgpLCBvZmZzZXRzW2ldKTsKLQkJCWlmIChpID4gMCkgewotCQkJCWFzc2VydEVxdWFscygibGVuZ3RocyBtaXNhbGlnbmVkIiwgdHlwZWRSZWdpb25zW2ldLmdldE9mZnNldCgpLCB0eXBlZFJlZ2lvbnNbaSAtIDFdLmdldE9mZnNldCgpICsgdHlwZWRSZWdpb25zW2kgLSAxXS5nZXRMZW5ndGgoKSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JCi0JLyoqCi0JICogQ29tcHV0ZSB0aGUgcGFydGl0aW9ucyBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIHVzaW5nIHRoZSBkZWZhdWx0IHBhcnRpdGlvbmVyCi0JICogZm9yIHRoYXQgZmlsZSB0eXBlLgotCSAqIAotCSAqIEBwYXJhbSBmaWxlbmFtZQotCSAqIEByZXR1cm4gaW50Ci0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqIEB0aHJvd3MgQmFkTG9jYXRpb25FeGNlcHRpb24KLQkgKi8KLQlwcm90ZWN0ZWQgaW50IGRvVGltZWRDb21wdXRlUGFydGl0aW9uaW5nVGVzdChTdHJpbmcgZmlsZW5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiwgQmFkTG9jYXRpb25FeGNlcHRpb24gewotCQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0JCUlucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJaWYgKGluU3RyZWFtID09IG51bGwpCi0JCQlpblN0cmVhbSA9IG5ldyBOdWxsU3RyZWFtKCk7Ci0JCUlTdHJ1Y3R1cmVkTW9kZWwgbW9kZWwgPSBtb2RlbE1hbmFnZXIuZ2V0TW9kZWxGb3JFZGl0KGZpbGVuYW1lLCBpblN0cmVhbSwgbnVsbCk7Ci0JCi0JCUlTdHJ1Y3R1cmVkRG9jdW1lbnQgc3RydWN0dXJlZERvY3VtZW50ID0gbW9kZWwuZ2V0U3RydWN0dXJlZERvY3VtZW50KCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQgJiYgdXNlRm9ybWF0dGVyKSB7Ci0JCQlkb3VibGUgYmFzZVRlbiA9IE1hdGgubG9nKDEwKTsKLQkJCWZvcm1hdHRlci5zZXRNaW5pbXVtSW50ZWdlckRpZ2l0cygoaW50KSAoTWF0aC5sb2coc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKSAvIGJhc2VUZW4pICsgMSk7Ci0JCQlmb3JtYXR0ZXIuc2V0R3JvdXBpbmdVc2VkKGZhbHNlKTsKLQkJfQotCQlsb25nIHN0YXJ0VGltZSA9IFN5c3RlbS5jdXJyZW50VGltZU1pbGxpcygpOwotCQlwYXJ0aXRpb25zID0gc3RydWN0dXJlZERvY3VtZW50LmNvbXB1dGVQYXJ0aXRpb25pbmcoMCwgc3RydWN0dXJlZERvY3VtZW50LmdldExlbmd0aCgpKTsKLQkJbG9uZyBlbmRUaW1lID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCWlmIChERUJVR19QUklOVF9SRVNVTFQpIHsKLQkJCQotCQkJU3RyaW5nIGNvbnRlbnRzID0gbnVsbDsKLQkKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiXG5maWxlbmFtZTogIiArIGZpbGVuYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiVGltZSB0byBjb21wdXRlICIgKyBwYXJ0aXRpb25zLmxlbmd0aCArICI6ICIgKyAoZW5kVGltZS1zdGFydFRpbWUpICsgIiAobXNlY3MpIik7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCQl0cnkgewotCQkJCQljb250ZW50cyA9IHN0cnVjdHVyZWREb2N1bWVudC5nZXQocGFydGl0aW9uc1tpXS5nZXRPZmZzZXQoKSwgcGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSk7Ci0JCQkJfQotCQkJCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQkJCWNvbnRlbnRzID0gIiplcnJvcioiOwotCQkJCX0KLQkJCQlpZiAodXNlRm9ybWF0dGVyKQotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oZm9ybWF0dGVyLmZvcm1hdChwYXJ0aXRpb25zW2ldLmdldE9mZnNldCgpKSArICI6IiArIGZvcm1hdHRlci5mb3JtYXQocGFydGl0aW9uc1tpXS5nZXRMZW5ndGgoKSkgKyAiIC0gIiArIHBhcnRpdGlvbnNbaV0uZ2V0VHlwZSgpICsgIiBbIiArIFN0cmluZ1V0aWxzLmVzY2FwZShjb250ZW50cykgKyAiXSIpOwotCQkJCWVsc2UKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKHBhcnRpdGlvbnNbaV0gKyAiIFsiICsgU3RyaW5nVXRpbHMuZXNjYXBlKGNvbnRlbnRzKSArICJdIik7Ci0JCQl9Ci0JCX0KLQkJY2hlY2tTZWFtcygpOwotCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJaW5TdHJlYW0uY2xvc2UoKTsKLQkKLQkJaWYgKHBhcnRpdGlvbnMgPT0gbnVsbCkKLQkJCXJldHVybiAtMTsKLQkJcmV0dXJuIHBhcnRpdGlvbnMubGVuZ3RoOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvY29tcGFueTMwMGsueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2NvbXBhbnkzMDBrLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiYTU1Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvY29tcGFueTMwMGsueG1sCisrKyAvZGV2L251bGwKQEAgLTEsODEwMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4KLSAgICAgICAgPGhlYWQ+Ci0gICAgICAgICAgICAgICAgPHRpdGxlPlRoZSBVbHRpbWF0ZSBBIENvbXBhbnk8L3RpdGxlPgotICAgICAgICA8L2hlYWQ+Ci0gICAgICAgIDxib2R5PgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJhbm5lci5naWYiIGhlaWdodD0iNTEiIHdpZHRoPSI2NTkiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9Ijg0JSI+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgcm93c3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJsZWZ0cGFuZWwuanBnIiBoZWlnaHQ9IjQ5OCIgd2lkdGg9IjEyNCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlNvbWUgcGVvcGxlIHRoaW5rIHRoYXQgQSBpcyBqdXN0IGFub3RoZXIgbGV0dGVyLiBXZSBhcmUgbm90IHNvbWUgcGVvcGxlLiBXZSBhdCB0aGUgVWx0aW1hdGUgQSBDb21wYW55IHRoaW5rIHRoYXQgQSBpcyBzcGVjaWFsLiBXaGVuIGFwcHJvYWNoZWQgYnkgYSB0ZWFtIHVuaXRlZCBieSB0aGUgY29tbW9uIHBhc3Npb24sIHNraWxscyBhbmQgZGV2b3Rpb24gdG8gdGhlIHdvcmxkIG9mIGxldHRlcnMsIGEgaHVtYmxlIEEgY2FuIGJlY29tZSBhIHRydWUgd29yayBvZiBhcnQuJm5ic3A7PC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGFrZSBhIGxvb2sgYXQgb3VyIHByb2R1Y3QgY2F0YWxvZyBhbmQgd2UgYXJlIHN1cmUgeW91IHdpbGwgYWdyZWUuIFdlIGRlc2lnbiwgbWFudWZhY3R1cmUgYW5kIHNoaXAgQXMgb2YgYW55IHNoYXBlLCBzaXplIGFuZCBjb2xvciwgZmluaXNoZWQgaW4gYW55IHdheSBpbWFnaW5hYmxlLiBBbmQgd2Ugd2lsbCBiZSBoYXBweSB0byBjYXRlciB0byB5b3VyIGV2ZXJ5IGRlc2lyZSBhbmQgbWFrZSBhIGN1c3RvbSwgb25lLW9mLWEta2luZCBBIHRoYXQgd2lsbCBsYXN0IGZvciBhIGxpZmV0aW1lLiBPdXIgcGFzc2lvbiBhbmQgb3VyIGF0dGVudGlvbiB0byBkZXRhaWwgYWxsIHdvcmsgdG93YXJkcyBvbmUgZmluYWwgZ29hbCAtIHRvIGRlbGl2ZXIgc3RhdGUgb2YgdGhlICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGI+QTwvYj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J0LiZuYnNwOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oND4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5Eb24ndCBzZXR0bGUgZm9yIG9yZGluYXJ5LiBZb3UgZGVzZXJ2ZSBvbmx5IHRoZSBiZXN0LjwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4mbmJzcDs8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2R1Y3RzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2hhdCdzIE5ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yZGVyIE9ubGluZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImJ1bGxldC5naWYiIGhlaWdodD0iMzAiIHdpZHRoPSIzOCIgYWx0PSIiIC8+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBwcm9ibGVtcyBhbmQgc3VnZ2VzdGlvbnMgcmVsYXRlZCB0byB0aGlzIHdlYiBzaXRlLCB3cml0ZSB0byBXZWJtYXN0ZXI6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJtYWlsdG86d2VibWFzdGVyQHRoZXVsdGltYXRlYWNvbXBhbnkuY29tIj53ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb208L2E+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+Ci0gICAgICAgICAgICAgICAgPC90YWJsZT4KLSAgICAgICAgICAgICAgICA8IS0tIGNvbW1lbnQgYWRkZWQgdG8gdGVzdHMgNiBwYXJ0aXRpb25zIC0tPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iODQlIj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIyIj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImxlZnRwYW5lbC5qcGciIGhlaWdodD0iNDk4IiB3aWR0aD0iMTI0IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+U29tZSBwZW9wbGUgdGhpbmsgdGhhdCBBIGlzIGp1c3QgYW5vdGhlciBsZXR0ZXIuIFdlIGFyZSBub3Qgc29tZSBwZW9wbGUuIFdlIGF0IHRoZSBVbHRpbWF0ZSBBIENvbXBhbnkgdGhpbmsgdGhhdCBBIGlzIHNwZWNpYWwuIFdoZW4gYXBwcm9hY2hlZCBieSBhIHRlYW0gdW5pdGVkIGJ5IHRoZSBjb21tb24gcGFzc2lvbiwgc2tpbGxzIGFuZCBkZXZvdGlvbiB0byB0aGUgd29ybGQgb2YgbGV0dGVycywgYSBodW1ibGUgQSBjYW4gYmVjb21lIGEgdHJ1ZSB3b3JrIG9mIGFydC4mbmJzcDs8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlIGEgbG9vayBhdCBvdXIgcHJvZHVjdCBjYXRhbG9nIGFuZCB3ZSBhcmUgc3VyZSB5b3Ugd2lsbCBhZ3JlZS4gV2UgZGVzaWduLCBtYW51ZmFjdHVyZSBhbmQgc2hpcCBBcyBvZiBhbnkgc2hhcGUsIHNpemUgYW5kIGNvbG9yLCBmaW5pc2hlZCBpbiBhbnkgd2F5IGltYWdpbmFibGUuIEFuZCB3ZSB3aWxsIGJlIGhhcHB5IHRvIGNhdGVyIHRvIHlvdXIgZXZlcnkgZGVzaXJlIGFuZCBtYWtlIGEgY3VzdG9tLCBvbmUtb2YtYS1raW5kIEEgdGhhdCB3aWxsIGxhc3QgZm9yIGEgbGlmZXRpbWUuIE91ciBwYXNzaW9uIGFuZCBvdXIgYXR0ZW50aW9uIHRvIGRldGFpbCBhbGwgd29yayB0b3dhcmRzIG9uZSBmaW5hbCBnb2FsIC0gdG8gZGVsaXZlciBzdGF0ZSBvZiB0aGUgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Yj5BPC9iPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnQuJm5ic3A7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2g0PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPkRvbid0IHNldHRsZSBmb3Igb3JkaW5hcnkuIFlvdSBkZXNlcnZlIG9ubHkgdGhlIGJlc3QuPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiZuYnNwOzwvdGQ+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZHVjdHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvaDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDM+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJidWxsZXQuZ2lmIiBoZWlnaHQ9IjMwIiB3aWR0aD0iMzgiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaGF0J3MgTmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JkZXIgT25saW5lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2gzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz0iYnVsbGV0LmdpZiIgaGVpZ2h0PSIzMCIgd2lkdGg9IjM4IiBhbHQ9IiIgLz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIHByb2JsZW1zIGFuZCBzdWdnZXN0aW9ucyByZWxhdGVkIHRvIHRoaXMgd2ViIHNpdGUsIHdyaXRlIHRvIFdlYm1hc3RlcjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Im1haWx0bzp3ZWJtYXN0ZXJAdGhldWx0aW1hdGVhY29tcGFueS5jb20iPndlYm1hc3RlckB0aGV1bHRpbWF0ZWFjb21wYW55LmNvbTwvYT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgotICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KLSAgICAgICAgICAgICAgICA8L3RhYmxlPgotICAgICAgICAgICAgICAgIDxwPgotICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9ImZvb3Rlci5naWYiIGhlaWdodD0iMjUiIHdpZHRoPSI2NTkiIGFsdD0iIiAvPgotICAgICAgICAgICAgICAgIDwvcD4KLSAgICAgICAgPC9ib2R5PgotPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9lbXB0eS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvZW1wdHkueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3RleHQvdGVzdGZpbGVzL3htbC9lbXB0eS54bWwKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL2V4YW1wbGUwMS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ2Y2NlZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvZXhhbXBsZTAxLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+Ci08IURPQ1RZUEUgdGVzdGNhc2UgU1lTVEVNICJ0ZXN0Y2FzZS5kdGQiPgotPCEtLSB0aGlzIGRvY3VtZW50IHdpbGwgbm90IHZhbGlkYXRlIC0tPgotPHRlc3RjYXNlPjwvdGVzdGNhc2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvdGVzdGNhc2UuZHRkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdGV4dC90ZXN0ZmlsZXMveG1sL3Rlc3RjYXNlLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmQ0NDA5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy90ZXh0L3Rlc3RmaWxlcy94bWwvdGVzdGNhc2UuZHRkCisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotPD94bWwgZW5jb2Rpbmc9IlVTLUFTQ0lJIj8+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT0gRW50aXRpZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PS0tPgotPCFFTlRJVFkgJSBFZHRQYWdlU3ViQ2F0ICJPdXRsaW5lVmlldyB8IFByb3BlcnR5U2hlZXQgfCBTb3VyY2VWaWV3Ij4KLTwhRU5USVRZICUgV2ViU3ViQ2F0ICJBY2Nlc3NhYmlsaXR5IHwgQW5pbUdJRkRlc2lnbmVyIHwgQXBwU2VydmVyQ29uZmlnIHwgQ1NTRWRpdG9yIHwgREJXaXphcmQgfCBGVFBJbXBvcnQgfCBGVFBFeHBvcnQgfCBIVFRQSW1wb3J0IHwgSmF2YUJlYW5XaXphcmQgfCBMaW5rU3R5bGVDb252V2l6YXJkIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpbmtzVmlldyB8IE1pc2NlbGxhbmVvdXMgfCBIVE1MRmlsZVdpemFyZCB8IEpTUEZpbGVXaXphcmQgfCBTZXJ2bGV0RmlsZVdpemFyZCB8IFdlYlByb2pXaXphcmQgfCBOTFMgfCBTYW1wbGVzIHwgV2ViQXBwRGVwbG95RGVzYyI+Ci08IUVOVElUWSAlIEhUTUxTdWJDYXQgICJQYWdlRGVzaWduZXIgfCBEZXNpZ25WaWV3IHwgICVFZHRQYWdlU3ViQ2F0OyB8IFByZXZpZXciPgotPCFFTlRJVFkgJSBYTUxTdWJDYXQgICIlRWR0UGFnZVN1YkNhdDsiPgotPCFFTlRJVFkgJSBTdWJDYXQgIiglV2ViU3ViQ2F0OyB8ICVIVE1MU3ViQ2F0OyB8ICVYTUxTdWJDYXQ7KSI+Ci08IUVOVElUWSAlIENhdCAiKHdlYnRvb2wgfCBodG1sIHwgeG1sKSI+Ci0KLTwhRU5USVRZICUgU3RhdGUgIihVbmRlZmluZWQgfCBVbmRlckNvbnN0cnVjdGlvbiB8IFVuZGVyUmV2aWV3IHwgUmV2aWV3Q29tcGxldGVkIHwgQXBwcm92ZWQgfCBSZWFkeSB8IENvbXBsZXRlIHwgT2Jzb2xldGUpIj4KLTwhRU5USVRZICUgQnVja2V0ICIoQ29tcG9uZW50VGVzdCB8IFByb2R1Y3RUZXN0IHwgSW50ZWdyYXRpb25UZXN0IHwgVHJhbnNsYXRpb25UZXN0IHwgVW5pdFRlc3QpIj4KLTwhRU5USVRZICUgUGxhdGZvcm0gIihBbGwgfCBXaW4yMDAwIHwgV2luTUUgfCBXaW5OVCB8IFdpbjk4IHwgTGludXhSZWRIYXQgfCBDYWxkZXJhIHwgU3VTZSB8IFR1cmJvTGludXgpIj4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09IEVsZW1lbnRzID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09LS0+Ci08IUVMRU1FTlQgdGVzdGNhc2UKLSAgCSgoaGVhZGVyLCBzdW1tYXJ5LCBkZWZpbml0aW9uLCBleGVjdXRpb24qKSx2YXJpYXRpb24qKT4KLTwhRUxFTUVOVCB2YXJpYXRpb24KLSAgCShoZWFkZXIsIHN1bW1hcnksIGRlZmluaXRpb24sIGV4ZWN1dGlvbiopPgotCi08IUVMRU1FTlQgaGVhZGVyIChzdWJqZWN0LCBhdXRob3IsIGNvYXV0aG9yKiwgY3JlYXRpb25fZGF0ZSk+Ci08IUVMRU1FTlQgc3ViamVjdCAoI1BDREFUQSk+Ci08IUVMRU1FTlQgYXV0aG9yICgjUENEQVRBKT4KLTwhRUxFTUVOVCBjb2F1dGhvciAoI1BDREFUQSk+Ci08IUVMRU1FTlQgY3JlYXRpb25fZGF0ZSAoI1BDREFUQSk+Ci0KLTwhLS0gRXhhbXBsZSBvZiBoYXZpbmcgbW9yZSB0aGFuIG9uZSBhdHRyaWJ1dGUgbGlzdCBkZWZpbmVkIGZvciBhIGdpdmVuIGVsZW1lbnQgLS0+Ci08IUFUVExJU1QgaGVhZGVyCi0JbnVtYmVyCQkJSUQJCSNSRVFVSVJFRAotCXN0YXRlCQkJJVN0YXRlOyAgICAgICAgICJVbmRlckNvbnN0cnVjdGlvbiIKLT4KLTwhQVRUTElTVCBoZWFkZXIKLQljYXRlZ29yeQkJJUNhdDsJCSNSRVFVSVJFRAotCXN1YkNhdGVnb3J5CQklU3ViQ2F0OwkjUkVRVUlSRUQKLQlzdWJTdWJDYXRlb2dvcnkJICAgICAgICBDREFUQSAgICAgICAgIAkjSU1QTElFRAotCT4KLQotPCFFTEVNRU5UIHN1bW1hcnkgKHRlc3RCdWNrZXQrLCBwbGF0Zm9ybSssIHBhcnQqLCByZWxlYXNlKyk+Ci08IUVMRU1FTlQgdGVzdEJ1Y2tldCBFTVBUWT4KLTwhQVRUTElTVCB0ZXN0QnVja2V0Ci0JdHlwZQkJIAklQnVja2V0OwkjUkVRVUlSRUQKLT4KLTwhRUxFTUVOVCBwbGF0Zm9ybSBFTVBUWT4KLTwhQVRUTElTVCBwbGF0Zm9ybQotCXR5cGUJCSAJJVBsYXRmb3JtOwkjUkVRVUlSRUQKLT4KLTwhRUxFTUVOVCBwYXJ0ICgjUENEQVRBKT4KLTwhRUxFTUVOVCByZWxlYXNlICgjUENEQVRBKT4KLQotCi08IUVMRU1FTlQgZGVmaW5pdGlvbiAocHVycG9zZSwgcHJlcmVxdWlzaXRlKiwgcHJvY2VkdXJlLCBleHBlY3RlZF9yZXN1bHRzKT4KLTwhRUxFTUVOVCBwdXJwb3NlICgjUENEQVRBKT4KLTwhRUxFTUVOVCBwcmVyZXF1aXNpdGUgRU1QVFk+Ci08IUFUVExJU1QgcHJlcmVxdWlzaXRlCi0JbnVtYmVyCQkJSURSRUYJCSNSRVFVSVJFRAotPgotPCFFTEVNRU5UIHByb2NlZHVyZSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgZXhwZWN0ZWRfcmVzdWx0cyAoI1BDREFUQSk+Ci0KLTwhRUxFTUVOVCBleGVjdXRpb24gQU5ZPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9Db21tb25YTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvQ29tbW9uWE1MLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhNzc5ZDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9Db21tb25YTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLQotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKLQotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLkRvY3VtZW50QnVpbGRlcjsKLWltcG9ydCBqYXZheC54bWwucGFyc2Vycy5Eb2N1bWVudEJ1aWxkZXJGYWN0b3J5OwotaW1wb3J0IGphdmF4LnhtbC5wYXJzZXJzLlBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5PdXRwdXRLZXlzOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uU291cmNlOwotaW1wb3J0IGphdmF4LnhtbC50cmFuc2Zvcm0uVHJhbnNmb3JtZXI7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckNvbmZpZ3VyYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5UcmFuc2Zvcm1lckV4Y2VwdGlvbjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeTsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLlRyYW5zZm9ybWVyRmFjdG9yeUNvbmZpZ3VyYXRpb25FcnJvcjsKLWltcG9ydCBqYXZheC54bWwudHJhbnNmb3JtLmRvbS5ET01Tb3VyY2U7Ci1pbXBvcnQgamF2YXgueG1sLnRyYW5zZm9ybS5zdHJlYW0uU3RyZWFtUmVzdWx0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLkxvZ2dlcjsKLWltcG9ydCBvcmcudzNjLmRvbS5Eb2N1bWVudDsKLQotCi0KLS8qKgotICovCi1wdWJsaWMgY2xhc3MgQ29tbW9uWE1MIHsKLQotCXB1YmxpYyBzeW5jaHJvbml6ZWQgc3RhdGljIERvY3VtZW50QnVpbGRlciBnZXREb2N1bWVudEJ1aWxkZXIoKSB7Ci0JCURvY3VtZW50QnVpbGRlciByZXN1bHQgPSBudWxsOwotCQl0cnkgewotCQkJcmVzdWx0ID0gRG9jdW1lbnRCdWlsZGVyRmFjdG9yeS5uZXdJbnN0YW5jZSgpLm5ld0RvY3VtZW50QnVpbGRlcigpOwotCQl9Ci0JCWNhdGNoIChQYXJzZXJDb25maWd1cmF0aW9uRXhjZXB0aW9uIGUpIHsKLQkJCUxvZ2dlci5sb2dFeGNlcHRpb24oZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQlwdWJsaWMgc3luY2hyb25pemVkIHN0YXRpYyBEb2N1bWVudEJ1aWxkZXIgZ2V0RG9jdW1lbnRCdWlsZGVyKGJvb2xlYW4gdmFsaWRhdGluZykgewotCQlEb2N1bWVudEJ1aWxkZXIgcmVzdWx0ID0gbnVsbDsKLQkJdHJ5IHsKLQkJCURvY3VtZW50QnVpbGRlckZhY3RvcnkgaW5zdGFuY2UgPSBEb2N1bWVudEJ1aWxkZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCk7Ci0JCQlpbnN0YW5jZS5zZXRWYWxpZGF0aW5nKHZhbGlkYXRpbmcpOwotCQkJcmVzdWx0ID0gaW5zdGFuY2UubmV3RG9jdW1lbnRCdWlsZGVyKCk7Ci0JCX0KLQkJY2F0Y2ggKFBhcnNlckNvbmZpZ3VyYXRpb25FeGNlcHRpb24gZSkgewotCQkJTG9nZ2VyLmxvZ0V4Y2VwdGlvbihlKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBzZXJpYWxpemUoRG9jdW1lbnQgZG9jdW1lbnQsIE91dHB1dFN0cmVhbSBvc3RyZWFtKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTb3VyY2UgZG9tU291cmNlID0gbmV3IERPTVNvdXJjZShkb2N1bWVudCk7Ci0JCXRyeSB7Ci0JCQlUcmFuc2Zvcm1lciBzZXJpYWxpemVyID0gVHJhbnNmb3JtZXJGYWN0b3J5Lm5ld0luc3RhbmNlKCkubmV3VHJhbnNmb3JtZXIoKTsKLQkJCXRyeSB7Ci0JCQkJc2VyaWFsaXplci5zZXRPdXRwdXRQcm9wZXJ0eShPdXRwdXRLZXlzLklOREVOVCwgInllcyIpOwotCQkJCXNlcmlhbGl6ZXIuc2V0T3V0cHV0UHJvcGVydHkoIntodHRwOi8veG1sLmFwYWNoZS5vcmcveHNsdH1pbmRlbnQtYW1vdW50IiwgIjQiKTsKLQkJCQlzZXJpYWxpemVyLnNldE91dHB1dFByb3BlcnR5KE91dHB1dEtleXMuRU5DT0RJTkcsICJVVEYtMTYiKTsKLQkJCX0KLQkJCWNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewotCQkJCS8vIHVuc3VwcG9ydGVkIHByb3BlcnRpZXMKLQkJCX0KLQkJCXNlcmlhbGl6ZXIudHJhbnNmb3JtKGRvbVNvdXJjZSwgbmV3IFN0cmVhbVJlc3VsdChvc3RyZWFtKSk7Ci0JCX0KLQkJY2F0Y2ggKFRyYW5zZm9ybWVyQ29uZmlndXJhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQl0aHJvdyBuZXcgSU9FeGNlcHRpb24oZS5nZXRNZXNzYWdlKCkpOwotCQl9Ci0JCWNhdGNoIChUcmFuc2Zvcm1lckZhY3RvcnlDb25maWd1cmF0aW9uRXJyb3IgZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCQljYXRjaCAoVHJhbnNmb3JtZXJFeGNlcHRpb24gZSkgewotCQkJdGhyb3cgbmV3IElPRXhjZXB0aW9uKGUuZ2V0TWVzc2FnZSgpKTsKLQkJfQotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0RhdGVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL0RhdGVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZDhjZDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9EYXRlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEudXRpbC5DYWxlbmRhcjsKLWltcG9ydCBqYXZhLnV0aWwuRGF0ZTsKLQotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuRGF0ZUZvcm1hdDsKLWltcG9ydCBjb20uaWJtLmljdS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKiBUbyBjaGFuZ2UgdGhpcyBnZW5lcmF0ZWQgY29tbWVudCBlZGl0IHRoZSB0ZW1wbGF0ZSB2YXJpYWJsZSAidHlwZWNvbW1lbnQiOgotICogV2luZG93PlByZWZlcmVuY2VzPkphdmE+VGVtcGxhdGVzLgotICogVG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZiB0eXBlIGNvbW1lbnRzIGdvIHRvCi0gKiBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5Db2RlIEdlbmVyYXRpb24uCi0gKi8KLXB1YmxpYyBjbGFzcyBEYXRlVXRpbCB7Ci0KLQkvKioKLQkgKiBDb25zdHJ1Y3RvciBmb3IgQWxsVGVzdHMuCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgbm93ID0gbnVsbDsKLQotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgbm93KCkgewotCQkvLyBqdXN0IGNhbGN1bGF0ZSBvbmNlLCBzbyB3aG9sZSBydW4gYXMgc2FtZSB0aW1lc3RhbXAKLQkJaWYgKERhdGVVdGlsLm5vdyA9PSBudWxsKSB7Ci0JCQlEYXRlRm9ybWF0IGZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5Jy0nTU0nLSdkZCctJ2trJy0nbW0nLSdzcyIpOwotCQkJQ2FsZW5kYXIgY2FsZW5kYXIgPSBDYWxlbmRhci5nZXRJbnN0YW5jZSgpOwotCQkJRGF0ZSB0b2RheSA9IGNhbGVuZGFyLmdldFRpbWUoKTsKLQkJCURhdGVVdGlsLm5vdyA9IGZvcm1hdC5mb3JtYXQodG9kYXkpOwotCQl9Ci0JCXJldHVybiBEYXRlVXRpbC5ub3c7Ci0JfQotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9GaWxlVXRpbC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYzQ2ZWQ0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvRmlsZVV0aWwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZW5hbWVGaWx0ZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqCi0gKi8KLXB1YmxpYyBjbGFzcyBGaWxlVXRpbCB7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZkxpbmVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZlBhdGhTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInBhdGguc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZkZpbGVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgWE1MX0NPUkVfVEVTVFNfUExVR0lOX0lEID0gIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cyI7Ci0KLQlzdGF0aWMgRmlsZSBwcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkgPSBudWxsOwotCXN0YXRpYyBwcml2YXRlIFN0cmluZyBsb2dTdWJEaXJlY3RvcnlQYXRoOwotCi0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBub3RUcmllZFlldCA9IHRydWU7Ci0KLQlwdWJsaWMgc3RhdGljIGNsYXNzIERpckZpbGVuYW1lRmlsdGVyIGltcGxlbWVudHMgRmlsZW5hbWVGaWx0ZXIgewotCQlTdHJpbmcgc3RhcnRPZkFjY2VwdGFibGVOYW1lczsKLQotCQlwdWJsaWMgRGlyRmlsZW5hbWVGaWx0ZXIoU3RyaW5nIHN0YXJ0T2ZEaXJOYW1lKSB7Ci0JCQlzdGFydE9mQWNjZXB0YWJsZU5hbWVzID0gc3RhcnRPZkRpck5hbWU7Ci0JCX0KLQotCQkvKioKLQkJICogQHNlZSBqYXZhLmlvLkZpbGVGaWx0ZXIjYWNjZXB0KEZpbGUpCi0JCSAqLwotCQlwdWJsaWMgYm9vbGVhbiBhY2NlcHQoRmlsZSBwYXRobmFtZSwgU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCQkvLyB3ZSdsbCBqdXN0IGFzc3VtZSBpZiBpdCBzdGFydHMgd2l0aCByaWdodCBrZXksIGl0IGlzIGEgZGlyZWN0b3J5IC4uLiBmb3Igbm93Ci0JCQlyZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aChzdGFydE9mQWNjZXB0YWJsZU5hbWVzKTsKLQkJfQotCi0JfQotCi0JcHVibGljIHN0YXRpYyBGaWxlIGdldFByZXZpb3VzUmVzdWx0c0RpcmVjdG9yeShTdHJpbmcgZGlyZWN0b3J5Um9vdE5hbWUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChwcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkgPT0gbnVsbCAmJiBub3RUcmllZFlldCkgewotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShYTUxfQ09SRV9URVNUU19QTFVHSU5fSUQpOwotCQkJVVJMIHVybCA9IGJ1bmRsZS5nZXRFbnRyeSgiLyIpOwotCQkJLy9TdHJpbmcgaW5zdGFsbFBhdGggPSB1cmwuZ2V0UGF0aCgpOwotCQkJLy8gYWRkIGtub3duIGZpbGUgc28gVVJMIG1ldGhvZCBiZWxvdyBjYW4gYmUgdXNlZAotCQkJLy8gKGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGZvciBkaXJlY3Rvcnk/KQotCQkJVVJMIHRvdGFsVVJMID0gbmV3IFVSTCh1cmwsICJwbHVnaW4ueG1sIik7Ci0JCQlVUkwgZmluYWx1cmwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodG90YWxVUkwpOwotCQkJU3RyaW5nIGZpbmFsRmlsZSA9IGZpbmFsdXJsLmdldEZpbGUoKTsKLQkJCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7Ci0JCQlTdHJpbmcgZmluYWxQYXRoID0gZmlsZS5nZXRQYXJlbnQoKTsKLQkJCUZpbGUgcGx1Z2luSG9tZURpciA9IG5ldyBGaWxlKGZpbmFsUGF0aCk7Ci0JCQlGaWxlbmFtZUZpbHRlciBkaXJGaWx0ZXIgPSBuZXcgRGlyRmlsZW5hbWVGaWx0ZXIoZGlyZWN0b3J5Um9vdE5hbWUpOwotCQkJRmlsZVtdIGFsbERpcnMgPSBwbHVnaW5Ib21lRGlyLmxpc3RGaWxlcyhkaXJGaWx0ZXIpOwotCi0JCQkvLyBhc3N1bWUgZmlyc3QgaW4gbGlzdCBpcyBuZXdlc3QsIHRoZW4gc3RhcnQgbG9va2luZyB3aXRoIHRoZSAKLQkJCS8vIHNlY29uZCBpdGVtIC4uLiBqdXN0IHRvIGF2b2lkICJudWxsIiBjYXNlIGNoZWNraW5nCi0JCQlpZiAoYWxsRGlycy5sZW5ndGggPiAwKSB7Ci0JCQkJRmlsZSBjdXJyZW50TmV3ZXN0ID0gYWxsRGlyc1swXTsKLQkJCQlmb3IgKGludCBpID0gMTsgaSA8IGFsbERpcnMubGVuZ3RoOyBpKyspIHsKLQkJCQkJRmlsZSBjdXJyZW50ID0gYWxsRGlyc1tpXTsKLQkJCQkJLy8gTk9URTogd2UgZ28gYnkgbW9kaWZpZWQgZGF0ZSwgbm90IGJ5IHRoZSBhY3R1YWwgdGltZSBzdGFtcCBpbiBuYW1lLgotCQkJCQkvLyBUaGlzIHNob3VsZCB3b3JrIGZvciBhbGwgbm9ybWFsIGNhc2VzLCBidXQgbWF5IG5vdCBpZiBzb21lb25lIGRvZXMgc29tZQotCQkJCQkvLyAiZnVubnkiIGNvcHlpbmcsIG9yIHVwZGF0aW5nIGZyb20gcmVwb3NpdG9yeS4KLQkJCQkJaWYgKGN1cnJlbnQubGFzdE1vZGlmaWVkKCkgPiBjdXJyZW50TmV3ZXN0Lmxhc3RNb2RpZmllZCgpKSB7Ci0JCQkJCQljdXJyZW50TmV3ZXN0ID0gY3VycmVudDsKLQkJCQkJfQotCQkJCX0KLQkJCQlwcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkgPSBjdXJyZW50TmV3ZXN0OwotCQkJfQotCQkJbm90VHJpZWRZZXQgPSBmYWxzZTsKLQkJfQotCQlyZXR1cm4gcHJldmlvdXNSZXN1bHRzRGlyZWN0b3J5OwotCX0KLQotCXB1YmxpYyBzdGF0aWMgRmlsZSBtYWtlRmlsZUZvcihTdHJpbmcgZGlyZWN0b3J5LCBTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyB0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShYTUxfQ09SRV9URVNUU19QTFVHSU5fSUQpOwotCQlVUkwgdXJsID0gYnVuZGxlLmdldEVudHJ5KCIvIik7Ci0JCVVSTCBsb2NhbFVSTCA9IEZpbGVMb2NhdG9yLnRvRmlsZVVSTCh1cmwpOwotCQlTdHJpbmcgaW5zdGFsbFBhdGggPSBsb2NhbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyB0b3RhbERpcmVjdG9yeSA9IGluc3RhbGxQYXRoICsgZGlyZWN0b3J5OwotCQlTdHJpbmcgdG90YWxQYXRoID0gdG90YWxEaXJlY3RvcnkgKyAiLyIgKyBmaWxlbmFtZTsKLQkJVVJMIHRvdGFsVVJMID0gbmV3IFVSTCh1cmwsIHRvdGFsUGF0aCk7Ci0JCS8vVVJMIGZpbmFsdXJsID0gUGxhdGZvcm0uYXNMb2NhbFVSTCh0b3RhbFVSTCk7Ci0JCVN0cmluZyBmaW5hbEZpbGUgPSB0b3RhbFVSTC5nZXRGaWxlKCk7Ci0JCUZpbGUgZmlsZSA9IG5ldyBGaWxlKGZpbmFsRmlsZSk7Ci0JCVN0cmluZyBmaW5hbFBhdGggPSBmaWxlLmdldFBhcmVudCgpOwotCQlGaWxlIGRpciA9IG5ldyBGaWxlKGZpbmFsUGF0aCk7Ci0JCWlmICghZGlyLmV4aXN0cygpKSB7Ci0JCQkvLyBhIGxpdHRsZSBzYWZldHkgbmV0LCBiZSBzdXJlIHRoZSBwcmV2aW91cyBuZXdlc3QgZGlyZWN0b3J5Ci0JCQkvLyBpcyBpbml0aWFsaXplZCwganVzdCBpbiBjYXNlIG5vIG9uZSBlbHNlIGhhcyBkb25lIHNvCi0JCQlpZiAodGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXggIT0gbnVsbCAmJiB0ZXN0UmVzdWx0c0RpcmVjdG9yeVByZWZpeC5sZW5ndGgoKSA+IDApIHsKLQkJCQlGaWxlVXRpbC5nZXRQcmV2aW91c1Jlc3VsdHNEaXJlY3RvcnkodGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgpOwotCQkJfQotCQkJLy8gbm93IGl0cyAic2FmZSIgdG8gbWFrZSB0aGUgbmV3IG9uZQotCQkJZGlyLm1rZGlycygpOwotCQl9Ci0JCXJldHVybiBmaWxlOwotCX0KLQotCS8qKgotCSAqIEp1c3QgYSBnZW5lcmFsIHV0aWxpdHkgbWV0aG9kCi0JICogQHBhcmFtIGZpbGVuYW1lCi0JICogQHJldHVybiBTdHJpbmcKLQkgKi8KLQlwdWJsaWMgc3RhdGljIFN0cmluZyBnZXRFeHRlbnNpb24oU3RyaW5nIGZpbGVuYW1lKSB7Ci0JCVN0cmluZyBleHRlbnNpb24gPSBudWxsOwotCQlpbnQgZG90UG9zdGlvbiA9IGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJyk7Ci0JCWlmIChkb3RQb3N0aW9uID4gLTEpIHsKLQkJCWV4dGVuc2lvbiA9IGZpbGVuYW1lLnN1YnN0cmluZyhkb3RQb3N0aW9uICsgMSk7Ci0JCX0KLQkJZWxzZSB7Ci0JCQlleHRlbnNpb24gPSBuZXcgU3RyaW5nKCk7Ci0JCX0KLQkJcmV0dXJuIGV4dGVuc2lvbjsKLQl9Ci0KLQkvKioKLQkgKiBHZW5lcmFsIHB1cnBvc2UgdXRpbGl0eSBtZXRob2QgdG8gZW5zdXJlIHRoZSBsb2cKLQkgKiBkaXJlY3RvcnkgZXhpc3RzLCBhbmQgcmV0dXJucyB0aGUgbmFtZS4gCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0TG9nRGlyZWN0b3J5KCkgewotCQlpZiAobG9nU3ViRGlyZWN0b3J5UGF0aCA9PSBudWxsKSB7Ci0JCQlTdHJpbmcgbWFpbkRpcmVjdG9yeSA9ICIvbG9ncyI7Ci0JCQlGaWxlIGRpciA9IG5ldyBGaWxlKG1haW5EaXJlY3RvcnkpOwotCQkJZW5zdXJlRXhpc3RzKGRpcik7Ci0JCQlTdHJpbmcgc3ViRGlyZWN0b3J5ID0gVGltZXN0YW1wVXRpbC50aW1lc3RhbXAoKTsKLQkJCWxvZ1N1YkRpcmVjdG9yeVBhdGggPSBtYWluRGlyZWN0b3J5ICsgIi8iICsgc3ViRGlyZWN0b3J5OwotCQkJRmlsZSBzdWJkaXIgPSBuZXcgRmlsZShsb2dTdWJEaXJlY3RvcnlQYXRoKTsKLQkJCWVuc3VyZUV4aXN0cyhzdWJkaXIpOwotCQl9Ci0JCXJldHVybiBsb2dTdWJEaXJlY3RvcnlQYXRoOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBlbnN1cmVFeGlzdHMoRmlsZSBkaXIpIHsKLQkJaWYgKCFkaXIuZXhpc3RzKCkpIHsKLQkJCWRpci5ta2RpcnMoKTsKLQkJfQotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBlcmZvcm1hbmNlT3V0cHV0TG9nTmFtZSgpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCVN0cmluZyBkaXJlY3RvcnlOYW1lID0gRmlsZVV0aWwuZ2V0TG9nRGlyZWN0b3J5KCk7Ci0JCVN0cmluZyBleHRlbnNpb24gPSAiLm91dCI7Ci0JCVN0cmluZyBiYXNlTmFtZSA9ICJzZWRUZXN0cyI7Ci0JCWxvbmcgbm93ID0gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCk7Ci0JCVN0cmluZyBub3dTdHIgPSBTdHJpbmcudmFsdWVPZihub3cpOwotCQlyZXN1bHQgPSBkaXJlY3RvcnlOYW1lICsgRmlsZVV0aWwuZkZpbGVTZXBhcmF0b3IgKyBiYXNlTmFtZSArIG5vd1N0ciArIGV4dGVuc2lvbjsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMzY4MTQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvUHJvamVjdFVuemlwVXRpbGl0eS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzc0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzLnV0aWw7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5CdWZmZXJlZE91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBGaWxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JT3ZlcndyaXRlUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuRmlsZVN5c3RlbVN0cnVjdHVyZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLklJbXBvcnRTdHJ1Y3R1cmVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5JbXBvcnRPcGVyYXRpb247Ci0KLS8qKgotICogSW1wb3J0cyB6aXBwZWQgZmlsZXMgaW50byB0aGUgdGVzdCB3b3Jrc3BhY2UuIERlbGV0ZXMgYWxsIHByb2plY3RzIGluCi0gKiB3b3Jrc3BhY2UuCi0gKiAKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VW56aXBVdGlsaXR5IHsKLQljbGFzcyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wbGVtZW50cyBJUHJvZ3Jlc3NNb25pdG9yIHsKLQkJcHJpdmF0ZSBib29sZWFuIGZpbmlzaGVkID0gZmFsc2U7Ci0KLQkJcHVibGljIHZvaWQgYmVnaW5UYXNrKFN0cmluZyBuYW1lLCBpbnQgdG90YWxXb3JrKSB7Ci0JCQkvLyBub29wCi0JCX0KLQotCQlwdWJsaWMgdm9pZCBkb25lKCkgewotCQkJZmluaXNoZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNGaW5pc2hlZCgpIHsKLQkJCXJldHVybiBmaW5pc2hlZDsKLQkJfQotCi0JCXB1YmxpYyB2b2lkIGludGVybmFsV29ya2VkKGRvdWJsZSB3b3JrKSB7Ci0JCQkvLyBub29wCi0JCX0KLQotCQlwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGVkKCkgewotCQkJcmV0dXJuIGZpbmlzaGVkOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0Q2FuY2VsZWQoYm9vbGVhbiB2YWx1ZSkgewotCQkJaWYgKHZhbHVlID09IHRydWUpCi0JCQkJZmluaXNoZWQgPSB0cnVlOwotCQl9Ci0KLQkJcHVibGljIHZvaWQgc2V0VGFza05hbWUoU3RyaW5nIG5hbWUpIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHN1YlRhc2soU3RyaW5nIG5hbWUpIHsKLQkJCS8vIG5vb3AKLQkJfQotCi0JCXB1YmxpYyB2b2lkIHdvcmtlZChpbnQgd29yaykgewotCQkJLy8gbm9vcAotCQl9Ci0JfQotCi0JY2xhc3MgTXlPdmVyd3JpdGVRdWVyeSBpbXBsZW1lbnRzIElPdmVyd3JpdGVRdWVyeSB7Ci0JCXB1YmxpYyBTdHJpbmcgcXVlcnlPdmVyd3JpdGUoU3RyaW5nIHBhdGhTdHJpbmcpIHsKLQkJCXJldHVybiBBTEw7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgZmluYWwgc3RhdGljIFN0cmluZyBQUk9KRUNUX1pJUFNfRk9MREVSID0gInByb2plY3R0ZXN0ZmlsZXMiOwotCXByaXZhdGUgTGlzdCBmQ3JlYXRlZFByb2plY3RzID0gbnVsbDsKLQotCXB1YmxpYyBQcm9qZWN0VW56aXBVdGlsaXR5KCkgewotCQkvLyBmb3IgZGVsZXRpb24gbGF0ZXIKLQkJZkNyZWF0ZWRQcm9qZWN0cyA9IG5ldyBBcnJheUxpc3QoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZmlsZVRvSW1wb3J0Ci0JICogICAgICAgICAgICB0aGUgZmlsZSB5b3Ugd2lzaCB0byBpbXBvcnQKLQkgKiBAcGFyYW0gZm9sZGVyUGF0aAotCSAqICAgICAgICAgICAgdGhlIGNvbnRhaW5lciBwYXRoIHdpdGhpbiB0aGUgd29ya3NwYWNlCi0JICovCi0JcHVibGljIHZvaWQgaW1wb3J0RmlsZShGaWxlIGZpbGVUb0ltcG9ydCwgU3RyaW5nIGZvbGRlclBhdGgpIHsKLQkJV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yIGltcG9ydFByb2dyZXNzID0gbmV3IFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvcigpOwotCQl0cnkgewotCQkJaWYgKGZpbGVUb0ltcG9ydC5leGlzdHMoKSkgewotCQkJCUlQYXRoIGNvbnRhaW5lclBhdGggPSBuZXcgUGF0aChmb2xkZXJQYXRoKTsKLQkJCQkvL2ZDcmVhdGVkUHJvamVjdHMuYWRkKGZvbGRlclBhdGgpOwotCQkJCUlJbXBvcnRTdHJ1Y3R1cmVQcm92aWRlciBwcm92aWRlciA9IEZpbGVTeXN0ZW1TdHJ1Y3R1cmVQcm92aWRlci5JTlNUQU5DRTsKLQkJCQlJT3ZlcndyaXRlUXVlcnkgb3ZlcndyaXRlSW1wbGVtZW50b3IgPSBuZXcgTXlPdmVyd3JpdGVRdWVyeSgpOwotCQkJCUZpbGVbXSBmaWxlc1RvSW1wb3J0ID0ge2ZpbGVUb0ltcG9ydH07Ci0JCQkJSW1wb3J0T3BlcmF0aW9uIGltcG9ydE9wID0gbmV3IEltcG9ydE9wZXJhdGlvbihjb250YWluZXJQYXRoLCBudWxsLCBwcm92aWRlciwgb3ZlcndyaXRlSW1wbGVtZW50b3IsIEFycmF5cy5hc0xpc3QoZmlsZXNUb0ltcG9ydCkpOwotCQkJCWltcG9ydE9wLnNldENyZWF0ZUNvbnRhaW5lclN0cnVjdHVyZShmYWxzZSk7Ci0JCQkJaW1wb3J0T3Auc2V0T3ZlcndyaXRlUmVzb3VyY2VzKHRydWUpOwotCQkJCWltcG9ydE9wLnJ1bihpbXBvcnRQcm9ncmVzcyk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImhhbmRsZSBzb3VyY2UgZG9lc24ndCBleGlzdCIpOwotCQkJfQotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZXgpIHsKLQkJCWV4LnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaW1wb3J0UHJvZ3Jlc3MuZG9uZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogdGhlIGZvbGxvd2luZyBpcyBsb2dpYyBmcm9tCi0JICogaHR0cDovL3d3dy5kZXZzaGVkLmNvbS9jL2EvSmF2YS9aaXAtTWVldHMtSmF2YS8yLwotCSAqLwotCS8vIHNwZWNpZnkgYnVmZmVyIHNpemUgZm9yIGV4dHJhY3Rpb24KLQlzdGF0aWMgZmluYWwgaW50IEJVRkZFUiA9IDIwNDg7Ci0KLQlwdWJsaWMgdm9pZCB1bnppcEFuZEltcG9ydChGaWxlIGluRmlsZSwgU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5KSB7Ci0JCXRyeSB7Ci0JCQkvLyBTcGVjaWZ5IGZpbGUgdG8gZGVjb21wcmVzcwotCQkJU3RyaW5nIGluRmlsZU5hbWUgPSBpbkZpbGUuZ2V0QWJzb2x1dGVQYXRoKCk7IC8vImM6L2V4YW1wbGUuemlwIjsKLQkJCS8vIFNwZWNpZnkgZGVzdGluYXRpb24gd2hlcmUgZmlsZSB3aWxsIGJlIHVuemlwcGVkCi0JCQkvL1N0cmluZyBkZXN0aW5hdGlvbkRpcmVjdG9yeSA9Ci0JCQkvLyAiZDovZWNsaXBzZWRldi9NNV9TU0VfVEVTVFNfV09SS1NQQUNFLyI7IC8vImM6L3RlbXAvIjsKLQkJCUZpbGUgc291cmNlWmlwRmlsZSA9IG5ldyBGaWxlKGluRmlsZU5hbWUpOwotCQkJRmlsZSB1bnppcERlc3RpbmF0aW9uRGlyZWN0b3J5ID0gbmV3IEZpbGUoZGVzdGluYXRpb25EaXJlY3RvcnkpOwotCQkJLy8gT3BlbiBaaXAgZmlsZSBmb3IgcmVhZGluZwotCQkJWmlwRmlsZSB6aXBGaWxlID0gbmV3IFppcEZpbGUoc291cmNlWmlwRmlsZSwgWmlwRmlsZS5PUEVOX1JFQUQpOwotCQkJLy8gQ3JlYXRlIGFuIGVudW1lcmF0aW9uIG9mIHRoZSBlbnRyaWVzIGluIHRoZSB6aXAgZmlsZQotCQkJRW51bWVyYXRpb24gemlwRmlsZUVudHJpZXMgPSB6aXBGaWxlLmVudHJpZXMoKTsKLQkJCVN0cmluZyBwcm9qZWN0Rm9sZGVyTmFtZSA9IG51bGw7Ci0JCQlJUHJvamVjdCBjdXJyZW50UHJvamVjdCA9IG51bGw7Ci0JCQkvLyBQcm9jZXNzIGVhY2ggZW50cnkKLQkJCXdoaWxlICh6aXBGaWxlRW50cmllcy5oYXNNb3JlRWxlbWVudHMoKSkgewotCQkJCS8vIGdyYWIgYSB6aXAgZmlsZSBlbnRyeQotCQkJCVppcEVudHJ5IGVudHJ5ID0gKFppcEVudHJ5KSB6aXBGaWxlRW50cmllcy5uZXh0RWxlbWVudCgpOwotCQkJCVN0cmluZyBjdXJyZW50RW50cnkgPSBlbnRyeS5nZXROYW1lKCk7Ci0JCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4oIkV4dHJhY3Rpbmc6ICIgKyBlbnRyeSk7Ci0JCQkJRmlsZSBkZXN0RmlsZSA9IG5ldyBGaWxlKHVuemlwRGVzdGluYXRpb25EaXJlY3RvcnksIGN1cnJlbnRFbnRyeSk7Ci0JCQkJLy8gZ3JhYiBmaWxlJ3MgcGFyZW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUKLQkJCQlGaWxlIGRlc3RpbmF0aW9uUGFyZW50ID0gZGVzdEZpbGUuZ2V0UGFyZW50RmlsZSgpOwotCQkJCS8vIGNyZWF0ZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgaWYgbmVlZGVkCi0JCQkJZGVzdGluYXRpb25QYXJlbnQubWtkaXJzKCk7Ci0JCQkJLy8gZXh0cmFjdCBmaWxlIGlmIG5vdCBhIGRpcmVjdG9yeQotCQkJCWlmICghZW50cnkuaXNEaXJlY3RvcnkoKSkgewotCQkJCQlCdWZmZXJlZElucHV0U3RyZWFtIGlzID0gbmV3IEJ1ZmZlcmVkSW5wdXRTdHJlYW0oemlwRmlsZS5nZXRJbnB1dFN0cmVhbShlbnRyeSkpOwotCQkJCQlpbnQgY3VycmVudEJ5dGU7Ci0JCQkJCS8vIGVzdGFibGlzaCBidWZmZXIgZm9yIHdyaXRpbmcgZmlsZQotCQkJCQlieXRlIGRhdGFbXSA9IG5ldyBieXRlW0JVRkZFUl07Ci0JCQkJCS8vIHdyaXRlIHRoZSBjdXJyZW50IGZpbGUgdG8gZGlzawotCQkJCQlGaWxlT3V0cHV0U3RyZWFtIGZvcyA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGRlc3RGaWxlKTsKLQkJCQkJQnVmZmVyZWRPdXRwdXRTdHJlYW0gZGVzdCA9IG5ldyBCdWZmZXJlZE91dHB1dFN0cmVhbShmb3MsIEJVRkZFUik7Ci0JCQkJCS8vIHJlYWQgYW5kIHdyaXRlIHVudGlsIGxhc3QgYnl0ZSBpcyBlbmNvdW50ZXJlZAotCQkJCQl3aGlsZSAoKGN1cnJlbnRCeXRlID0gaXMucmVhZChkYXRhLCAwLCBCVUZGRVIpKSAhPSAtMSkgewotCQkJCQkJZGVzdC53cml0ZShkYXRhLCAwLCBjdXJyZW50Qnl0ZSk7Ci0JCQkJCX0KLQkJCQkJZGVzdC5mbHVzaCgpOwotCQkJCQlkZXN0LmNsb3NlKCk7Ci0JCQkJCWlzLmNsb3NlKCk7Ci0JCQkJCWlmIChwcm9qZWN0Rm9sZGVyTmFtZSAhPSBudWxsKQotCQkJCQkJaW1wb3J0RmlsZShkZXN0RmlsZSwgcHJvamVjdEZvbGRlck5hbWUpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJLy8gbmVlZCBoYW5kbGUgdG8gdGhlIG1haW4gcHJvamVjdCBmb2xkZXIgdG8gY3JlYXRlCi0JCQkJCS8vIGNvbnRhaW5lclBhdGgKLQkJCQkJLy8gdW5saWtlIHZlcnNpb24gaW4gc3NlLnRlc3RzLCB3ZSBkb24ndCBjcmVhdGUgcHJvamVjdAotCQkJCQkvLyBmb3IKLQkJCQkJLy8gZXZlcnkgZGlyZWN0b3J5Ci0JCQkJCS8vCQkJCQlpZihwcm9qZWN0Rm9sZGVyTmFtZSA9PSBudWxsKSB7Ci0JCQkJCS8vCQkJCQkJcHJvamVjdEZvbGRlck5hbWUgPSBkZXN0RmlsZS5nZXROYW1lKCk7Ci0JCQkJCS8vCQkJCQkJZkNyZWF0ZWRQcm9qZWN0cy5hZGQocHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkvLwkJCQkJCQotCQkJCQkvLwkJCQkJCWN1cnJlbnRQcm9qZWN0ID0KLQkJCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RGb2xkZXJOYW1lKTsKLQkJCQkJLy8JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQl6aXBGaWxlLmNsb3NlKCk7Ci0JCQkvLyBmaXhlcyB3b3Jrc3BhY2UgbWV0YWRhdGEgZm9yIHRoZSBwcm9qZWN0Ci0JCQkvLyBmb3IgY2xlYW4gc3RhcnR1cCBuZXh0IHJ1bgotCQkJaWYgKGN1cnJlbnRQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQlQYXRoIHByb2plY3RMb2NhdGlvbiA9IG5ldyBQYXRoKFBsYXRmb3JtLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpKTsKLQkJCQkJY3JlYXRlUHJvamVjdChjdXJyZW50UHJvamVjdCwgcHJvamVjdExvY2F0aW9uLCBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZXgpIHsKLQkJCQkJY2V4LnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7Ci0JCQlpb2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaFdvcmtzcGFjZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IHdzUm9vdC5nZXRQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQlwcm9qZWN0c1tpXS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJfQotCQl3c1Jvb3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogRGVsZXRlIHByb2plY3RzIGNyZWF0ZWQgKHVuemlwcGVkIGFuZCBpbXBvcnRlZCkgYnkgdGhpcyB1dGlsaXR5Ci0JICogCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdFtdIHByb2plY3RzID0gZ2V0Q3JlYXRlZFByb2plY3RzKCk7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCQkJcHJvamVjdHNbaV0uY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQlwcm9qZWN0c1tpXS5jbG9zZShudWxsKTsKLQkJCQkJcHJvamVjdHNbaV0uZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKHByb2dyZXNzKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBTdHJpbmcgbmFtZSA9IHByb2plY3ROYW1lOwotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLwkJCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8JCQkJSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy9wcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQl0cnkgewotCQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkvLyBqdXN0IHRyeSBhZ2FpbiAobm90IHN1cmUgd2h5IHRoZXkgYXJlIG5vdCBiZWluZwotCQkJCQkJLy8gZGVsZXRlZCkKLQkJCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQkvL3Byb2ogPSBudWxsOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKHByb2dyZXNzKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBJUHJvamVjdHMgdGhhdCB3ZXJlIHVuemlwcGVkIGFuZCBpbXBvcnRlZCBpbnRvIHRoZSB3b3Jrc3BhY2UgYnkKLQkgKiAgICAgICAgIHRoaXMgdXRpbGl0eQotCSAqLwotCXB1YmxpYyBJUHJvamVjdFtdIGdldENyZWF0ZWRQcm9qZWN0cygpIHsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJU3RyaW5nW10gcHJvamVjdE5hbWVzID0gKFN0cmluZ1tdKSBmQ3JlYXRlZFByb2plY3RzLnRvQXJyYXkobmV3IFN0cmluZ1tmQ3JlYXRlZFByb2plY3RzLnNpemUoKV0pOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gbmV3IElQcm9qZWN0W3Byb2plY3ROYW1lcy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3ROYW1lcy5sZW5ndGg7IGkrKykgewotCQkJcHJvamVjdHNbaV0gPSB3c1Jvb3QuZ2V0UHJvamVjdChwcm9qZWN0TmFtZXNbaV0pOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0czsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0SmF2YVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIHJlc3luY2gKLQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkvL2NoYW5nZSBwcmVyZXFzIHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmFjayBpbgotCQlJUHJvamVjdCBwcm9qID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJaWYgKCFwcm9qLmV4aXN0cygpKSB7Ci0JCQlwcm9qLmNyZWF0ZShuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQkvLyBuZWVkIHRvIGFkZCBqYXZhIG5hdHVyZSwgb3IgZWxzZSBwcm9qZWN0IHdvbid0ICJleGlzdCgpIiBpbiB0aGUKLQkJLy8gamF2YQotCQkvLyBlbGVtZW50IHNlbnNlCi0JCVN0cmluZ1tdIG5hdHVyZUlkcyA9IHsib3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZSJ9OwotCQlpZiAoIXByb2ouaXNPcGVuKCkpIHsKLQkJCXByb2oub3BlbihudWxsKTsKLQkJfQotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qLmdldERlc2NyaXB0aW9uKCk7Ci0JCWRlc2Muc2V0TmF0dXJlSWRzKG5hdHVyZUlkcyk7Ci0JCXByb2ouc2V0RGVzY3JpcHRpb24oZGVzYywgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoSVByb2plY3QgcHJvamVjdCwgSVBhdGggbG9jYXRpb25QYXRoLCBJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJaWYgKG1vbml0b3IgPT0gbnVsbCkgewotCQkJbW9uaXRvciA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0KElQcm9qZWN0IGZQcm9qZWN0KSB0aHJvd3MgSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbiwgSW50ZXJydXB0ZWRFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gZlByb2plY3Q7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLwkJCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8JCQkJSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy9wcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJLy9wcm9qID0gbnVsbDsKLQkJCQl9Ci0JCQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkJfQotCQl9OwotCQkvL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKG51bGwpOwotCQkvLyBzYXZlcyB0aGUgbmV3IHdvcmtzcGFjZSBtZXRhZGF0YQotCQkvL1Jlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5zYXZlKHRydWUsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS90ZXN0cy91dGlsL1N0cmluZ0NvbXBhcmVVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViNTYwNDAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9TdHJpbmdDb21wYXJlVXRpbC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5TdHJpbmdSZWFkZXI7Ci0KLXB1YmxpYyBjbGFzcyBTdHJpbmdDb21wYXJlVXRpbCB7Ci0KLQlwdWJsaWMgYm9vbGVhbiBlcXVhbHNJZ25vcmVMaW5lU2VwZXJhdG9yKFN0cmluZyBzdHJpbmcxLCBTdHJpbmcgc3RyaW5nMikgewotCi0JCWlmIChzdHJpbmcxID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCWlmIChzdHJpbmcyID09IG51bGwpCi0JCQlyZXR1cm4gZmFsc2U7Ci0KLQkJU3RyaW5nUmVhZGVyIHMxUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcxKTsKLQkJU3RyaW5nUmVhZGVyIHMyUmVhZGVyID0gbmV3IFN0cmluZ1JlYWRlcihzdHJpbmcyKTsKLQotCQkvLyBhc3N1bWUgdHJ1ZSB1bmxlc3MgZmluZCBldmlkZW5jZSB0byB0aGUgY29udHJhcnkKLQkJYm9vbGVhbiByZXN1bHQgPSB0cnVlOwotCQlpbnQgczFDaGFyID0gLTE7Ci0JCWludCBzMkNoYXIgPSAtMTsKLQkJZG8gewotCi0JCQlzMUNoYXIgPSBnZXROZXh0Q2hhcihzMVJlYWRlcik7Ci0KLQkJCXMyQ2hhciA9IGdldE5leHRDaGFyKHMyUmVhZGVyKTsKLQotCQkJaWYgKHMxQ2hhciAhPSBzMkNoYXIpIHsKLQkJCQlyZXN1bHQgPSBmYWxzZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl3aGlsZSAoczFDaGFyICE9IC0xICYmIHMyQ2hhciAhPSAtMSk7Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBNZXRob2QgZ2V0TmV4dENoYXIuCi0JICogQHBhcmFtIHMxUmVhZGVyCi0JICogQHJldHVybiBjaGFyCi0JICovCi0JcHJpdmF0ZSBpbnQgZ2V0TmV4dENoYXIoU3RyaW5nUmVhZGVyIHJlYWRlcikgewotCQlpbnQgbmV4dENoYXIgPSAtMTsKLQkJdHJ5IHsKLQkJCW5leHRDaGFyID0gcmVhZGVyLnJlYWQoKTsKLQkJCXdoaWxlIChpc0VPTChuZXh0Q2hhcikpIHsKLQkJCQluZXh0Q2hhciA9IHJlYWRlci5yZWFkKCk7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJcmV0dXJuIG5leHRDaGFyOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBpc0VPTChpbnQgYUNoYXIpIHsKLQkJcmV0dXJuIChhQ2hhciA9PSAnXG4nIHx8IGFDaGFyID09ICdccicpOwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL3Rlc3RzL3V0aWwvVGltZXN0YW1wVXRpbC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMjAxZjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvdGVzdHMvdXRpbC9UaW1lc3RhbXBVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy51dGlsOwotCi1pbXBvcnQgamF2YS51dGlsLkNhbGVuZGFyOwotaW1wb3J0IGphdmEudXRpbC5EYXRlOwotCi1pbXBvcnQgY29tLmlibS5pY3UudGV4dC5EYXRlRm9ybWF0OwotaW1wb3J0IGNvbS5pYm0uaWN1LnRleHQuU2ltcGxlRGF0ZUZvcm1hdDsKLQotLyoqCi0gKiBAYXV0aG9yIGRhdmlkdwotICoKLSAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgb25lIHRpbWVzdGFtcCBwZXIgVk0gcnVuLgotICogKFRlY2huaWNhbGx5LCBwZXIgY2xhc3MgbG9hZGluZy4pCi0gKi8KLXB1YmxpYyBjbGFzcyBUaW1lc3RhbXBVdGlsIHsKLQotCXByaXZhdGUgc3RhdGljIERhdGUgdGltZXN0YW1wID0gbnVsbDsKLQlwcml2YXRlIHN0YXRpYyBEYXRlRm9ybWF0IHNob3J0Rm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXknLSdNTSctJ2RkIik7Ci0JLy8JcHJpdmF0ZSBzdGF0aWMgRGF0ZUZvcm1hdCBsb25nRm9ybWF0ID0gbmV3IFNpbXBsZURhdGVGb3JtYXQoInl5eXknLSdNTSctJ2RkJy0na2snLSdtbSctJ3NzIik7Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgbm93U2hvcnQgPSBudWxsOwotCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgdGltZXN0YW1wKCkgewotCi0JCWlmIChUaW1lc3RhbXBVdGlsLm5vd1Nob3J0ID09IG51bGwpIHsKLQkJCVRpbWVzdGFtcFV0aWwubm93U2hvcnQgPSBzaG9ydEZvcm1hdC5mb3JtYXQoZW5zdXJlVGltZXN0YW1wKCkpOwotCQl9Ci0JCXJldHVybiBUaW1lc3RhbXBVdGlsLm5vd1Nob3J0OwotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgRGF0ZSBlbnN1cmVUaW1lc3RhbXAoKSB7Ci0JCS8vIGp1c3QgY2FsY3VsYXRlICd0aW1lc3RhbXAnIG9uY2UgcGVyIGNsYXNzIGxvYWRpbmcsIAotCQkvLyBzbyB0aGlzICd0aW1lc3RhbXAnIHJlbWFpbnMgdGhlIHNhbWUgZHVyaW5nIAotCQkvLyBlbnRpcmUgcnVuLiAKLQkJaWYgKFRpbWVzdGFtcFV0aWwudGltZXN0YW1wID09IG51bGwpIHsKLQkJCUNhbGVuZGFyIGNhbGVuZGFyID0gQ2FsZW5kYXIuZ2V0SW5zdGFuY2UoKTsKLQkJCVRpbWVzdGFtcFV0aWwudGltZXN0YW1wID0gY2FsZW5kYXIuZ2V0VGltZSgpOwotCQl9Ci0JCXJldHVybiBUaW1lc3RhbXBVdGlsLnRpbWVzdGFtcDsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMjFhYWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzL3Rlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci0KLTxwcm9qZWN0Ci0gICAgbmFtZT0idGVzdHN1aXRlIgotICAgIGRlZmF1bHQ9InJ1biIKLSAgICBiYXNlZGlyPSIuIj4KLSAgICAKLSAgICA8IS0tIFRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBzaG91bGQgYmUgcGFzc2VkIGludG8gdGhpcyBzY3JpcHQgLS0+Ci0gICAgPCEtLSAke2VjbGlwc2UtaG9tZX0gICAtLT4KLSAgICA8IS0tICR7YnVpbGREaXJlY3Rvcnl9ICAtLT4KLSAgICA8IS0tICR7YnVpbGRMYWJlbH0gICAgICAgIC0tPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBhYm92ZSAgLS0+Ci0gICAgCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMuU1NFTW9kZWxYTUxUZXN0U3VpdGUiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLmNvcmUudGVzdHMvdGVzdGZpbGVzLnppcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy90ZXN0ZmlsZXMuemlwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODRmMzMyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXN0cy90ZXN0ZmlsZXMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDhiYWY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU3NzYzZWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdGVtcC5mb2xkZXIKLXRlc3RzLmphcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYzM3MGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8ucHJvamVjdAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cHJvamVjdERlc2NyaXB0aW9uPgotCTxuYW1lPm9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz48L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWZhNWM5MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZWM1NzUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1saW5lLnNlcGFyYXRvcj1cclxuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjdiYWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1NhdCBBdWcgMTkgMTY6MzE6NDMgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMwMWM3YWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0Ci1vcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/PlxyXG48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1OTM2OGMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYzUyMmJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNNb24gQXByIDE3IDAyOjAxOjMzIEVEVCAyMDA2Ci1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTAKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vRW5jb2RpbmcuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTGFyZ2VOb0VuY29kaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vRW5jb2RpbmcuaHRtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL0xhcmdlTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9MYXJnZU5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL0xhcmdlTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTEyYzAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZwotQnVuZGxlLVZlcnNpb246IDEuMC4wLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJlZiwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByb3BlcnRpZXMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbCwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLndyaXRlLAotIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sCi1SZXF1aXJlLUJ1bmRsZTogb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gsCi0gb3JnLmVjbGlwc2UudWkuaWRlLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9hYm91dC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZWM1OTg5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvYnVpbGQucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjQxYzJmZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotIyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSMgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSMgaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSMgCi0jIENvbnRyaWJ1dG9yczoKLSMgICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotYmluLmluY2x1ZGVzID0gdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIHRlc3RmaWxlcy8sXAotICAgICAgICAgICAgICAgdGVzdGZpbGVzLnppcCxcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc291cmNlLnRlc3RzLmphciA9IHNyYy8KLW91dHB1dC50ZXN0cy5qYXIgPSBiaW4vCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvSUJNMTRfMDEyOC50eHQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL291dHB1dEZyb21MaXN0Q2hhcnNldHMvSUJNMTRfMDEyOC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkZmIxZDIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9vdXRwdXRGcm9tTGlzdENoYXJzZXRzL0lCTTE0XzAxMjgudHh0CisrKyAvZGV2L251bGwKQEAgLTEsODU3ICswLDAgQEAKLQotQ3VycmVudCBMb2NhbGU6IGVuX1VTCi0KLUpSRSB2ZXJzaW9uOiBKMlJFIDEuNC4yIElCTSBXaW5kb3dzIDMyIGJ1aWxkIGNuZGV2LTIwMDQwMTI4IChKSVQgZW5hYmxlZDogaml0YykKLS0tIGxpc3RpbmcgcHJvcGVydGllcyAtLQotamF2YS5hc3Npc3RpdmU9T04KLWphdmEucnVudGltZS5uYW1lPUphdmEoVE0pIDIgUnVudGltZSBFbnZpcm9ubWVudCwgU3RhbmQuLi4KLXN1bi5ib290LmxpYnJhcnkucGF0aD1EOlxidWlsZHNcRGFpbHlcd3N3Yi1TREstSTIwMDQwMjI2LXdpLi4uCi1qYXZhLnZtLnZlcnNpb249MS40LjIKLWphdmEudm0udmVuZG9yPUlCTSBDb3Jwb3JhdGlvbgotamF2YS52ZW5kb3IudXJsPWh0dHA6Ly93d3cuaWJtLmNvbS8KLXBhdGguc2VwYXJhdG9yPTsKLWphdmEudm0ubmFtZT1DbGFzc2ljIFZNCi1maWxlLmVuY29kaW5nLnBrZz1zdW4uaW8KLXVzZXIuY291bnRyeT1VUwotc3VuLm9zLnBhdGNoLmxldmVsPVNlcnZpY2UgUGFjayAxCi1qYXZhLnZtLnNwZWNpZmljYXRpb24ubmFtZT1KYXZhIFZpcnR1YWwgTWFjaGluZSBTcGVjaWZpY2F0aW9uCi11c2VyLmRpcj1EOlxidWlsZHNcRGFpbHlcZWNsaXBzZS1TREstSTIwMDQwMzA0Li4uCi1qYXZhLnJ1bnRpbWUudmVyc2lvbj0xLjQuMgotamF2YS5mdWxsdmVyc2lvbj1KMlJFIDEuNC4yIElCTSBXaW5kb3dzIDMyIGJ1aWxkIGNuZGV2Li4uCi1qYXZhLmF3dC5ncmFwaGljc2Vudj1zdW4uYXd0LldpbjMyR3JhcGhpY3NFbnZpcm9ubWVudAotamF2YS5lbmRvcnNlZC5kaXJzPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLW9zLmFyY2g9eDg2Ci1qYXZhLmlvLnRtcGRpcj1DOlxET0NVTUV+MVxEQVZJRFd+MS5ETVdcTE9DQUxTfjFcVGVtcFwKLWxpbmUuc2VwYXJhdG9yPQotCi1qYXZhLnZtLnNwZWNpZmljYXRpb24udmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotdXNlci52YXJpYW50PQotamF2YS5hd3QuZm9udHM9Ci1vcy5uYW1lPVdpbmRvd3MgWFAKLXN1bi5qYXZhMmQuZm9udHBhdGg9Ci1qYXZhLmxpYnJhcnkucGF0aD1EOlxidWlsZHNcRGFpbHlcd3N3Yi1TREstSTIwMDQwMjI2LXdpLi4uCi1qYXZhLnNwZWNpZmljYXRpb24ubmFtZT1KYXZhIFBsYXRmb3JtIEFQSSBTcGVjaWZpY2F0aW9uCi1qYXZhLmNsYXNzLnZlcnNpb249NDguMAotaWJtLnN5c3RlbS5lbmNvZGluZz1DcDEyNTIKLWphdmEudXRpbC5wcmVmcy5QcmVmZXJlbmNlc0ZhY3Rvcnk9amF2YS51dGlsLnByZWZzLldpbmRvd3NQcmVmZXJlbmNlc0ZhYy4uLgotaW52b2tlZHZpYWphdmE9Ci1vcy52ZXJzaW9uPTUuMQotdXNlci5ob21lPUM6XERvY3VtZW50cyBhbmQgU2V0dGluZ3NcZGF2aWR3LkRNVzJUMjMKLXVzZXIudGltZXpvbmU9Ci1qYXZhLmF3dC5wcmludGVyam9iPXN1bi5hd3Qud2luZG93cy5XUHJpbnRlckpvYgotamF2YS5zcGVjaWZpY2F0aW9uLnZlcnNpb249MS40Ci1maWxlLmVuY29kaW5nPUNwMTI1MgotdXNlci5uYW1lPWRhdmlkdwotamF2YS5jbGFzcy5wYXRoPUQ6XGJ1aWxkc1xEYWlseVxlY2xpcHNlLVNESy1JMjAwNDAzMDQuLi4KLWphdmEudm0uc3BlY2lmaWNhdGlvbi52ZXJzaW9uPTEuMAotc3VuLmFyY2guZGF0YS5tb2RlbD0zMgotamF2YS5ob21lPUQ6XGJ1aWxkc1xEYWlseVx3c3diLVNESy1JMjAwNDAyMjYtd2kuLi4KLWphdmEuc3BlY2lmaWNhdGlvbi52ZW5kb3I9U3VuIE1pY3Jvc3lzdGVtcyBJbmMuCi11c2VyLmxhbmd1YWdlPWVuCi1hd3QudG9vbGtpdD1zdW4uYXd0LndpbmRvd3MuV1Rvb2xraXQKLWphdmEudm0uaW5mbz1KMlJFIDEuNC4yIElCTSBXaW5kb3dzIDMyIGJ1aWxkIGNuZGV2Li4uCi1qYXZhLnZlcnNpb249MS40LjIKLWphdmEuZXh0LmRpcnM9RDpcYnVpbGRzXERhaWx5XHdzd2ItU0RLLUkyMDA0MDIyNi13aS4uLgotc3VuLmJvb3QuY2xhc3MucGF0aD1EOlxidWlsZHNcRGFpbHlcd3N3Yi1TREstSTIwMDQwMjI2LXdpLi4uCi1qYXZhLnZlbmRvcj1JQk0gQ29ycG9yYXRpb24KLWZpbGUuc2VwYXJhdG9yPVwKLWphdmEudmVuZG9yLnVybC5idWc9Ci1qYXZhLmNvbXBpbGVyPWppdGMKLXN1bi5pby51bmljb2RlLmVuY29kaW5nPVVuaWNvZGVMaXR0bGUKLUF2YWlsYWJsZSBMb2NhbGVzCi1hcgotYXJfQUUKLWFyX0JICi1hcl9EWgotYXJfRUcKLWFyX0lRCi1hcl9KTwotYXJfS1cKLWFyX0xCCi1hcl9MWQotYXJfTUEKLWFyX09NCi1hcl9RQQotYXJfU0EKLWFyX1NECi1hcl9TWQotYXJfVE4KLWFyX1lFCi1iZQotYmVfQlkKLWJnCi1iZ19CRwotYm5fSU4KLWNhCi1jYV9FUwotY2FfRVNfUFJFRVVSTwotY3MKLWNzX0NaCi1kYQotZGFfREsKLWRhX0RLX0VVUk8KLWRlCi1kZV9BVAotZGVfQVRfUFJFRVVSTwotZGVfQ0gKLWRlX0RFCi1kZV9ERV9QUkVFVVJPCi1kZV9MVQotZGVfTFVfUFJFRVVSTwotZWwKLWVsX0dSCi1lbF9HUl9QUkVFVVJPCi1lbgotZW5fQVUKLWVuX0JFCi1lbl9CRV9QUkVFVVJPCi1lbl9DQQotZW5fR0IKLWVuX0dCX0VVUk8KLWVuX0hLCi1lbl9JRQotZW5fSUVfUFJFRVVSTwotZW5fSU4KLWVuX05aCi1lbl9QSAotZW5fU0cKLWVuX1VTCi1lbl9aQQotZXMKLWVzX0FSCi1lc19CTwotZXNfQ0wKLWVzX0NPCi1lc19DUgotZXNfRE8KLWVzX0VDCi1lc19FUwotZXNfRVNfUFJFRVVSTwotZXNfR1QKLWVzX0hOCi1lc19NWAotZXNfTkkKLWVzX1BBCi1lc19QRQotZXNfUFIKLWVzX1BZCi1lc19TVgotZXNfVVMKLWVzX1VZCi1lc19WRQotZXQKLWV0X0VFCi1maQotZmlfRkkKLWZpX0ZJX1BSRUVVUk8KLWZyCi1mcl9CRQotZnJfQkVfUFJFRVVSTwotZnJfQ0EKLWZyX0NICi1mcl9GUgotZnJfRlJfUFJFRVVSTwotZnJfTFUKLWZyX0xVX1BSRUVVUk8KLWd1Ci1ndV9JTgotaGkKLWhpX0lOCi1ocgotaHJfSFIKLWh1Ci1odV9IVQotaW4KLWluX0lECi1pcwotaXNfSVMKLWl0Ci1pdF9DSAotaXRfSVQKLWl0X0lUX1BSRUVVUk8KLWl3Ci1pd19JTAotamEKLWphX0pQCi1rawota2tfS1oKLWtuCi1rbl9JTgota28KLWtva19JTgota29fS1IKLWx0Ci1sdF9MVAotbHYKLWx2X0xWCi1tawotbWtfTUsKLW1sX0lOCi1tcgotbXJfSU4KLW1zCi1tc19NWQotbmJfTk8KLW5sCi1ubF9CRQotbmxfQkVfUFJFRVVSTwotbmxfTkwKLW5sX05MX1BSRUVVUk8KLW5vCi1ub19OTwotbm9fTk9fTlkKLW9yX0lOCi1wYQotcGFfSU4KLXBsCi1wbF9QTAotcHQKLXB0X0JSCi1wdF9QVAotcHRfUFRfUFJFRVVSTwotcm8KLXJvX1JPCi1ydQotcnVfUlUKLXNhCi1zYV9JTgotc2gKLXNoX1lVCi1zawotc2tfU0sKLXNsCi1zbF9TSQotc3EKLXNxX0FMCi1zcgotc3JfWVUKLXN2Ci1zdl9TRQotc3ZfU0VfRVVSTwotdGEKLXRhX0lOCi10ZQotdGVfSU4KLXRoCi10aF9USAotdGhfVEhfVEgKLXRyCi10cl9UUgotdWsKLXVrX1VBCi12aQotdmlfVk4KLXpoCi16aF9DTgotemhfQ05fSEsKLXpoX0hLCi16aF9TRwotemhfVFcKLWZpbGUuZW5jb2RpbmcucGtnOiBzdW4uaW8KLWZpbGUuZW5jb2Rpbmc6IENwMTI1MgotCi0KLUF2YWlsYWJsZSBDaGFyc2V0cwotMS4gIENoYXJzZXRuYW1lOiBCaWc1Ci0JZGlzcGxheU5hbWU6IEJpZzU6IFBDIFRhaXdhbiBCaWcgNQotCWFsaWFzZXM6IFtiaWc1LCBCaWc1LUhLU0NTXQotMi4gIENoYXJzZXRuYW1lOiBDRVNVLTgKLQlkaXNwbGF5TmFtZTogQ0VTVS04OiBVbmljb2RlIFVURi04ICh3aXRob3V0IHN1cnJvZ2F0ZXMpCi0JYWxpYXNlczogW0NFU1U4XQotMy4gIENoYXJzZXRuYW1lOiBDT01QT1VORF9URVhUCi0JZGlzcGxheU5hbWU6IENPTVBPVU5EX1RFWFQ6IFgxMSBDb21wb3VuZCBUZXh0Ci0JYWxpYXNlczogW3gtY29tcG91bmQtdGV4dCwgeDExLWNvbXBvdW5kLXRleHRdCi00LiAgQ2hhcnNldG5hbWU6IEVVQy1DTgotCWRpc3BsYXlOYW1lOiBFVUMtQ046IEVVQyBDaGluYQotCWFsaWFzZXM6IFtldWNfY24sIGV1Y2NuLCBpYm0tZXVjY25dCi01LiAgQ2hhcnNldG5hbWU6IEVVQy1KUAotCWRpc3BsYXlOYW1lOiBFVUMtSlA6IEVVQyBKYXBhbgotCWFsaWFzZXM6IFtldWMtanAtbGludXgsIHgtZXVjLWpwLCB4LWV1Y2pwLCBldWNfanBfbGludXgsIGV1Y2pwLCBldWNfanBdCi02LiAgQ2hhcnNldG5hbWU6IEVVQy1LUgotCWRpc3BsYXlOYW1lOiBFVUMtS1I6IEVVQyBLb3JlYQotCWFsaWFzZXM6IFs1NjAxLCBrc2M1NjAxXzE5ODcsIGtzY181NjAxLCBpYm0tZXVja3IsIGtzYzU2MDEtMTk4NywgaWJtLTk3MCwgZXVjX2tyLCBDcDk3MCwga3NfY181NjAxLTE5ODcsIGV1Y2tyXQotNy4gIENoYXJzZXRuYW1lOiBFVUMtVFcKLQlkaXNwbGF5TmFtZTogRVVDLVRXOiBFVUMgVGFpd2FuCi0JYWxpYXNlczogW2V1Y190dywgY25zMTE2NDMsIGV1Y3R3XQotOC4gIENoYXJzZXRuYW1lOiBHQjE4MDMwCi0JZGlzcGxheU5hbWU6IEdCMTgwMzA6IFBDIENoaW5hIEdCMTgwMzAKLQlhbGlhc2VzOiBbd2luZG93cy01NDkzNiwgaWJtLTEzOTIsIGdiMTgwMzAtMjAwMF0KLTkuICBDaGFyc2V0bmFtZTogR0IyMzEyCi0JZGlzcGxheU5hbWU6IEdCMjMxMgotCWFsaWFzZXM6IFtnYjIzMTItODAsIGdiMjMxMi0xOTgwXQotMTAuICBDaGFyc2V0bmFtZTogR0JLCi0JZGlzcGxheU5hbWU6IEdCSzogUEMgQ2hpbmEgR0JLCi0JYWxpYXNlczogW0dCS10KLTExLiAgQ2hhcnNldG5hbWU6IGhwLXJvbWFuOAotCWRpc3BsYXlOYW1lOiBocC1yb21hbjg6IEhQIFJvbWFuIDgKLQlhbGlhc2VzOiBbQ3AxMDUxLCBpYm0tMTA1MSwgcm9tYW44LCByOF0KLTEyLiAgQ2hhcnNldG5hbWU6IElCTS0wMzcKLQlkaXNwbGF5TmFtZTogSUJNLTAzNzogRUJDRElDIFVuaXRlZCBTdGF0ZXMKLQlhbGlhc2VzOiBbaWJtLTM3XQotMTMuICBDaGFyc2V0bmFtZTogSUJNLTEwMDYKLQlkaXNwbGF5TmFtZTogSUJNLTEwMDY6IElTTyBVcmR1Ci0JYWxpYXNlczogW2libTEwMDYsIENwMTAwNl0KLTE0LiAgQ2hhcnNldG5hbWU6IElCTS0xMDI1Ci0JZGlzcGxheU5hbWU6IElCTS0xMDI1OiBFQkNESUMgQ3lyaWxsaWMKLQlhbGlhc2VzOiBbaWJtMTAyNSwgQ3AxMDI1XQotMTUuICBDaGFyc2V0bmFtZTogSUJNLTEwMjYKLQlkaXNwbGF5TmFtZTogSUJNLTEwMjY6IEVCQ0RJQyBMYXRpbiA1IChUdXJrZXkpCi0JYWxpYXNlczogW0NwMTAyNiwgaWJtMTAyNl0KLTE2LiAgQ2hhcnNldG5hbWU6IElCTS0xMDI3Ci0JZGlzcGxheU5hbWU6IElCTS0xMDI3OiBFQkNESUMgU0JDUyBKYXBhbgotCWFsaWFzZXM6IFtpYm0xMDI3LCBDcDEwMjddCi0xNy4gIENoYXJzZXRuYW1lOiBJQk0tMTA0MQotCWRpc3BsYXlOYW1lOiBJQk0tMTA0MTogUEMgU0JDUy1vbmx5IEphcGFuCi0JYWxpYXNlczogW0NwMTA0MSwgaWJtMTA0MV0KLTE4LiAgQ2hhcnNldG5hbWU6IElCTS0xMDQzCi0JZGlzcGxheU5hbWU6IElCTS0xMDQzOiBQQyBTQkNTLW9ubHkgVGFpd2FuCi0JYWxpYXNlczogW0NwMTA0MywgaWJtMTA0M10KLTE5LiAgQ2hhcnNldG5hbWU6IElCTS0xMDQ2Ci0JZGlzcGxheU5hbWU6IElCTS0xMDQ2OiBFQkNESUMgQXJhYmljCi0JYWxpYXNlczogW2libTEwNDYsIENwMTA0Nl0KLTIwLiAgQ2hhcnNldG5hbWU6IElCTS0xMDQ2UwotCWRpc3BsYXlOYW1lOiBJQk0tMTA0NlM6IEVCQ0RJQyBBcmFiaWMgKHNoYXBlZCkKLQlhbGlhc2VzOiBbQ3AxMDQ2UywgaWJtMTA0NlNdCi0yMS4gIENoYXJzZXRuYW1lOiBJQk0tMTA0NwotCWRpc3BsYXlOYW1lOiBJQk0tMTA0NzogRUJDRElDIE9wZW4gRWRpdGlvbgotCWFsaWFzZXM6IFtDcDEwNDcsIGlibTEwNDddCi0yMi4gIENoYXJzZXRuYW1lOiBJQk0tMTA4OAotCWRpc3BsYXlOYW1lOiBJQk0tMTA4ODogUEMgU0JDUy1vbmx5IEtvcmVhbiBLUwotCWFsaWFzZXM6IFtDcDEwODgsIGlibTEwODhdCi0yMy4gIENoYXJzZXRuYW1lOiBJQk0tMTA5NwotCWRpc3BsYXlOYW1lOiBJQk0tMTA5NzogRUJDRElDIEZhcnNpCi0JYWxpYXNlczogW0NwMTA5NywgaWJtMTA5N10KLTI0LiAgQ2hhcnNldG5hbWU6IElCTS0xMDk4Ci0JZGlzcGxheU5hbWU6IElCTS0xMDk4OiBJU08gRmFyc2kKLQlhbGlhc2VzOiBbQ3AxMDk4LCBpYm0xMDk4XQotMjUuICBDaGFyc2V0bmFtZTogSUJNLTExMTIKLQlkaXNwbGF5TmFtZTogSUJNLTExMTI6IEVCQ0RJQyBCYWx0aWMKLQlhbGlhc2VzOiBbQ3AxMTEyLCBpYm0xMTEyXQotMjYuICBDaGFyc2V0bmFtZTogSUJNLTExMTQKLQlkaXNwbGF5TmFtZTogSUJNLTExMTQ6IFBDIFNCQ1Mtb25seSBUYWl3YW4KLQlhbGlhc2VzOiBbQ3AxMTE0LCBpYm0xMTE0XQotMjcuICBDaGFyc2V0bmFtZTogSUJNLTExMTUKLQlkaXNwbGF5TmFtZTogSUJNLTExMTU6IFBDIFNCQ1Mtb25seSBDaGluYQotCWFsaWFzZXM6IFtDcDExMTUsIGlibTExMTVdCi0yOC4gIENoYXJzZXRuYW1lOiBJQk0tMTEyMgotCWRpc3BsYXlOYW1lOiBJQk0tMTEyMjogRUJDRElDIEVzdG9uaWEKLQlhbGlhc2VzOiBbQ3AxMTIyLCBpYm0xMTIyXQotMjkuICBDaGFyc2V0bmFtZTogSUJNLTExMjMKLQlkaXNwbGF5TmFtZTogSUJNLTExMjM6IEVCQ0RJQyBVa3JhaW5lCi0JYWxpYXNlczogW0NwMTEyMywgaWJtMTEyM10KLTMwLiAgQ2hhcnNldG5hbWU6IElCTS0xMTI0Ci0JZGlzcGxheU5hbWU6IElCTS0xMTI0OiBQQyBVa3JhaW5lCi0JYWxpYXNlczogW0NwMTEyNCwgaWJtMTEyNF0KLTMxLiAgQ2hhcnNldG5hbWU6IElCTS0xMTQwCi0JZGlzcGxheU5hbWU6IElCTS0xMTQwOiBFQkNESUMgVW5pdGVkIFN0YXRlcyAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQwLCBpYm0xMTQwXQotMzIuICBDaGFyc2V0bmFtZTogSUJNLTExNDEKLQlkaXNwbGF5TmFtZTogSUJNLTExNDE6IEVCQ0RJQyBHZXJtYW55IChldXJvKQotCWFsaWFzZXM6IFtDcDExNDEsIGlibTExNDFdCi0zMy4gIENoYXJzZXRuYW1lOiBJQk0tMTE0MgotCWRpc3BsYXlOYW1lOiBJQk0tMTE0MjogRUJDRElDIERlbm1hcmssIE5vcndheSAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQyLCBpYm0xMTQyXQotMzQuICBDaGFyc2V0bmFtZTogSUJNLTExNDMKLQlkaXNwbGF5TmFtZTogSUJNLTExNDM6IEVCQ0RJQyBGaW5sYW5kLCBTd2VkZW4gKGV1cm8pCi0JYWxpYXNlczogW2libTExNDMsIENwMTE0M10KLTM1LiAgQ2hhcnNldG5hbWU6IElCTS0xMTQ0Ci0JZGlzcGxheU5hbWU6IElCTS0xMTQ0OiBFQkNESUMgSXRhbHkgKGV1cm8pCi0JYWxpYXNlczogW0NwMTE0NCwgaWJtMTE0NF0KLTM2LiAgQ2hhcnNldG5hbWU6IElCTS0xMTQ1Ci0JZGlzcGxheU5hbWU6IElCTS0xMTQ1OiBFQkNESUMgU3BhaW4gKGV1cm8pCi0JYWxpYXNlczogW2libTExNDUsIENwMTE0NV0KLTM3LiAgQ2hhcnNldG5hbWU6IElCTS0xMTQ2Ci0JZGlzcGxheU5hbWU6IElCTS0xMTQ2OiBFQkNESUMgVUssIElyZWxhbmQgKGV1cm8pCi0JYWxpYXNlczogW0NwMTE0NiwgaWJtMTE0Nl0KLTM4LiAgQ2hhcnNldG5hbWU6IElCTS0xMTQ3Ci0JZGlzcGxheU5hbWU6IElCTS0xMTQ3OiBFQkNESUMgRnJhbmNlIChldXJvKQotCWFsaWFzZXM6IFtDcDExNDcsIGlibTExNDddCi0zOS4gIENoYXJzZXRuYW1lOiBJQk0tMTE0OAotCWRpc3BsYXlOYW1lOiBJQk0tMTE0ODogRUJDRElDIE11bHRpbGluZ3VhbCAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMTQ4LCBpYm0xMTQ4XQotNDAuICBDaGFyc2V0bmFtZTogSUJNLTExNDkKLQlkaXNwbGF5TmFtZTogSUJNLTExNDk6IEVCQ0RJQyBJY2VsYW5kCi0JYWxpYXNlczogW0NwMTE0OSwgaWJtMTE0OV0KLTQxLiAgQ2hhcnNldG5hbWU6IElCTS0xMzUxCi0JZGlzcGxheU5hbWU6IElCTS0xMzUxOiBQQyBEQkNTLW9ubHkgSmFwYW4KLQlhbGlhc2VzOiBbQ3AxMzUxLCBpYm0xMzUxXQotNDIuICBDaGFyc2V0bmFtZTogSUJNLTEzNjIKLQlkaXNwbGF5TmFtZTogSUJNLTEzNjI6IFBDIERCQ1Mtb25seSBLb3JlYSBLUyBleHRlbmRlZAotCWFsaWFzZXM6IFtDcDEzNjIsIGlibTEzNjJdCi00My4gIENoYXJzZXRuYW1lOiBJQk0tMTM2MwotCWRpc3BsYXlOYW1lOiBJQk0tMTM2MzogUEMgS29yZWEgS1MgZXh0ZW5kZWQKLQlhbGlhc2VzOiBbQ3AxMzYzLCBpYm0xMzYzXQotNDQuICBDaGFyc2V0bmFtZTogSUJNLTEzNjNDCi0JZGlzcGxheU5hbWU6IElCTS0xMzYzQzogUEMgS29yZWEgS1MgZXh0ZW5kZWQgKHN5bnRheCkKLQlhbGlhc2VzOiBbaWJtMTM2M0MsIENwMTM2M0NdCi00NS4gIENoYXJzZXRuYW1lOiBJQk0tMTM2NAotCWRpc3BsYXlOYW1lOiBJQk0tMTM2NDogRUJDRElDIEtvcmVhIEtTIGV4dGVuZGVkCi0JYWxpYXNlczogW2libTEzNjQsIENwMTM2NF0KLTQ2LiAgQ2hhcnNldG5hbWU6IElCTS0xMzcwCi0JZGlzcGxheU5hbWU6IElCTS0xMzcwOiBQQyBUYWl3YW4gKGV1cm8pCi0JYWxpYXNlczogW0NwMTM3MCwgaWJtMTM3MF0KLTQ3LiAgQ2hhcnNldG5hbWU6IElCTS0xMzcxCi0JZGlzcGxheU5hbWU6IElCTS0xMzcxOiBFQkNESUMgVGFpd2FuIChldXJvKQotCWFsaWFzZXM6IFtDcDEzNzEsIGlibTEzNzFdCi00OC4gIENoYXJzZXRuYW1lOiBJQk0tMTM4MAotCWRpc3BsYXlOYW1lOiBJQk0tMTM4MDogUEMgREJDUy1vbmx5IENoaW5hIEdCCi0JYWxpYXNlczogW2libTEzODAsIENwMTM4MF0KLTQ5LiAgQ2hhcnNldG5hbWU6IElCTS0xMzgxCi0JZGlzcGxheU5hbWU6IElCTS0xMzgxOiBQQyBDaGluYSBHQgotCWFsaWFzZXM6IFtDcDEzODEsIGlibTEzODFdCi01MC4gIENoYXJzZXRuYW1lOiBJQk0tMTM4MgotCWRpc3BsYXlOYW1lOiBJQk0tMTM4MjogRVVDIERCQ1Mtb25seSBDaGluYSBHQgotCWFsaWFzZXM6IFtpYm0xMzgyLCBDcDEzODJdCi01MS4gIENoYXJzZXRuYW1lOiBJQk0tMTM4MwotCWRpc3BsYXlOYW1lOiBJQk0tMTM4MzogRVVDIENoaW5hCi0JYWxpYXNlczogW0NwMTM4MywgaWJtMTM4M10KLTUyLiAgQ2hhcnNldG5hbWU6IElCTS0xMzg1Ci0JZGlzcGxheU5hbWU6IElCTS0xMzg1OiBQQyBEQkNTLW9ubHkgQ2hpbmEgR0JLCi0JYWxpYXNlczogW0NwMTM4NSwgaWJtMTM4NV0KLTUzLiAgQ2hhcnNldG5hbWU6IElCTS0xMzg2Ci0JZGlzcGxheU5hbWU6IElCTS0xMzg2OiBQQyBDaGluYSBHQksKLQlhbGlhc2VzOiBbQ3AxMzg2LCBpYm0xMzg2XQotNTQuICBDaGFyc2V0bmFtZTogSUJNLTEzODgKLQlkaXNwbGF5TmFtZTogSUJNLTEzODg6IEVCQ0RJQyBDaGluYSBHQksKLQlhbGlhc2VzOiBbaWJtMTM4OCwgQ3AxMzg4XQotNTUuICBDaGFyc2V0bmFtZTogSUJNLTEzOTAKLQlkaXNwbGF5TmFtZTogSUJNLTEzOTA6IEVCQ0RJQyBKYXBhbiBLYXRha2FuYSAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMzkwLCBpYm0xMzkwXQotNTYuICBDaGFyc2V0bmFtZTogSUJNLTEzOTkKLQlkaXNwbGF5TmFtZTogSUJNLTEzOTk6IEVCQ0RJQyBKYXBhbiBMYXRpbiAoZXVybykKLQlhbGlhc2VzOiBbQ3AxMzk5LCBpYm0xMzk5XQotNTcuICBDaGFyc2V0bmFtZTogSUJNLTI3MwotCWRpc3BsYXlOYW1lOiBJQk0tMjczOiBFQkNESUMgR2VybWFueQotCWFsaWFzZXM6IFtpYm0yNzMsIENwMjczXQotNTguICBDaGFyc2V0bmFtZTogSUJNLTI3NwotCWRpc3BsYXlOYW1lOiBJQk0tMjc3OiBFQkNESUMgRGVubWFyaywgTm9yd2F5Ci0JYWxpYXNlczogW0NwMjc3LCBpYm0yNzddCi01OS4gIENoYXJzZXRuYW1lOiBJQk0tMjc4Ci0JZGlzcGxheU5hbWU6IElCTS0yNzg6IEVCQ0RJQyBGaW5sYW5kLCBTd2VkZW4KLQlhbGlhc2VzOiBbaWJtMjc4LCBDcDI3OF0KLTYwLiAgQ2hhcnNldG5hbWU6IElCTS0yODAKLQlkaXNwbGF5TmFtZTogSUJNLTI4MDogRUJDRElDIEl0YWx5IAotCWFsaWFzZXM6IFtpYm0yODAsIENwMjgwXQotNjEuICBDaGFyc2V0bmFtZTogSUJNLTI4NAotCWRpc3BsYXlOYW1lOiBJQk0tMjg0OiBFQkNESUMgU3BhaW4sIExhdGluIEFtZXJpY2EKLQlhbGlhc2VzOiBbQ3AyODQsIGlibTI4NF0KLTYyLiAgQ2hhcnNldG5hbWU6IElCTS0yODUKLQlkaXNwbGF5TmFtZTogSUJNLTI4NTogRUJDRElDIFVLLCBJcmVsYW5kCi0JYWxpYXNlczogW0NwMjg1LCBpYm0yODVdCi02My4gIENoYXJzZXRuYW1lOiBJQk0tMjkwCi0JZGlzcGxheU5hbWU6IElCTS0yOTA6IEVCQ0RJQyBTQkNTIEphcGFuIEthdGFrYW5hCi0JYWxpYXNlczogW0NwMjkwLCBpYm0yOTBdCi02NC4gIENoYXJzZXRuYW1lOiBJQk0tMjk3Ci0JZGlzcGxheU5hbWU6IElCTS0yOTc6IEVCQ0RJQyBGcmFuY2UKLQlhbGlhc2VzOiBbQ3AyOTcsIGlibTI5N10KLTY1LiAgQ2hhcnNldG5hbWU6IElCTS0zMDAKLQlkaXNwbGF5TmFtZTogSUJNLTMwMDogRUJDRElDIERCQ1Mtb25seSBKYXBhbgotCWFsaWFzZXM6IFtDcDMwMCwgaWJtMzAwXQotNjYuICBDaGFyc2V0bmFtZTogSUJNLTMwMQotCWRpc3BsYXlOYW1lOiBJQk0tMzAxOiBQQyBEQkNTLW9ubHkgSmFwYW4KLQlhbGlhc2VzOiBbaWJtMzAxLCBDcDMwMV0KLTY3LiAgQ2hhcnNldG5hbWU6IElCTS0zMzcyMgotCWRpc3BsYXlOYW1lOiBJQk0tMzM3MjI6IEVVQyBKYXBhbgotCWFsaWFzZXM6IFtDcDMzNzIyLCBpYm0zMzcyMl0KLTY4LiAgQ2hhcnNldG5hbWU6IElCTS0zMzcyMkMKLQlkaXNwbGF5TmFtZTogSUJNLTMzNzIyQzogRVVDIEphcGFuIHN5bnRheAotCWFsaWFzZXM6IFtpYm0zMzcyMkMsIENwMzM3MjJDXQotNjkuICBDaGFyc2V0bmFtZTogSUJNLTQyMAotCWRpc3BsYXlOYW1lOiBJQk0tNDIwOiBFQkNESUMgQXJhYmljCi0JYWxpYXNlczogW0NwNDIwLCBpYm00MjBdCi03MC4gIENoYXJzZXRuYW1lOiBJQk0tNDIwUwotCWRpc3BsYXlOYW1lOiBJQk0tNDIwUzogRUJDRElDIEFyYWJpYyBzaGFwZWQKLQlhbGlhc2VzOiBbQ3A0MjBTLCBpYm00MjBTXQotNzEuICBDaGFyc2V0bmFtZTogSUJNLTQyNAotCWRpc3BsYXlOYW1lOiBJQk0tNDI0OiBFQkNESUMgSGVicmV3Ci0JYWxpYXNlczogW2libTQyNCwgQ3A0MjRdCi03Mi4gIENoYXJzZXRuYW1lOiBJQk0tNDM3Ci0JZGlzcGxheU5hbWU6IElCTS00Mzc6IFBDIFVuaXRlZCBTdGF0ZXMKLQlhbGlhc2VzOiBbQ3A0MzcsIGNzcGM4Y29kZXBhZ2U0MzcsIGlibTQzN10KLTczLiAgQ2hhcnNldG5hbWU6IElCTS01MDAKLQlkaXNwbGF5TmFtZTogSUJNLTUwMDogRUJDRElDIExhdGluIDEKLQlhbGlhc2VzOiBbaWJtNTAwLCBDcDUwMF0KLTc0LiAgQ2hhcnNldG5hbWU6IElCTS03MzcKLQlkaXNwbGF5TmFtZTogSUJNLTczNzogTVMtRE9TIEdyZWVrCi0JYWxpYXNlczogW2libTczNywgQ3A3MzddCi03NS4gIENoYXJzZXRuYW1lOiBJQk0tNzc1Ci0JZGlzcGxheU5hbWU6IElCTS03NzU6IE1TLURPUyBCYWx0aWMgUmltCi0JYWxpYXNlczogW2libTc3NSwgQ3A3NzVdCi03Ni4gIENoYXJzZXRuYW1lOiBJQk0tODA4Ci0JZGlzcGxheU5hbWU6IElCTS04MDg6IFBDIFJ1c3NpYW4gKGV1cm8pCi0JYWxpYXNlczogW2libTgwOCwgQ3A4MDhdCi03Ny4gIENoYXJzZXRuYW1lOiBJQk0tODMzCi0JZGlzcGxheU5hbWU6IElCTS04MzM6IEVCQ0RJQyBTQkNTIEtvcmVhbgotCWFsaWFzZXM6IFtpYm04MzMsIENwODMzXQotNzguICBDaGFyc2V0bmFtZTogSUJNLTgzNAotCWRpc3BsYXlOYW1lOiBJQk0tODM0OiBFQkNESUMgREJDUy1vbmx5IEtvcmVhbgotCWFsaWFzZXM6IFtDcDgzNCwgaWJtODM0XQotNzkuICBDaGFyc2V0bmFtZTogSUJNLTgzNQotCWRpc3BsYXlOYW1lOiBJQk0tODM1OiBFQkNESUMgREJDUy1vbmx5IFRhaXdhbgotCWFsaWFzZXM6IFtDcDgzNSwgaWJtODM1XQotODAuICBDaGFyc2V0bmFtZTogSUJNLTgzNgotCWRpc3BsYXlOYW1lOiBJQk0tODM2OiBFQkNESUMgU0JDUyBDaGluYQotCWFsaWFzZXM6IFtDcDgzNiwgaWJtODM2XQotODEuICBDaGFyc2V0bmFtZTogSUJNLTgzNwotCWRpc3BsYXlOYW1lOiBJQk0tODM3OiBFQkNESUMgREJDUy1vbmx5IENoaW5hCi0JYWxpYXNlczogW0NwODM3LCBpYm04MzddCi04Mi4gIENoYXJzZXRuYW1lOiBJQk0tODM4Ci0JZGlzcGxheU5hbWU6IElCTS04Mzg6IEVCQ0RJQyBUaGFpCi0JYWxpYXNlczogW0NwODM4LCBpYm04MzhdCi04My4gIENoYXJzZXRuYW1lOiBJQk0tODUwCi0JZGlzcGxheU5hbWU6IElCTS04NTA6IFBDIExhdGluIDEKLQlhbGlhc2VzOiBbY3NwYzg1MG11bHRpbGluZ3VhbCwgQ3A4NTAsIGlibTg1MF0KLTg0LiAgQ2hhcnNldG5hbWU6IElCTS04NTIKLQlkaXNwbGF5TmFtZTogSUJNLTg1MjogUEMgTGF0aW4gMgotCWFsaWFzZXM6IFtDcDg1MiwgY3NwY3A4NTIsIGlibTg1Ml0KLTg1LiAgQ2hhcnNldG5hbWU6IElCTS04NTUKLQlkaXNwbGF5TmFtZTogSUJNLTg1NTogUEMgQ3lyaWxsaWMKLQlhbGlhc2VzOiBbQ3A4NTUsIGlibTg1NV0KLTg2LiAgQ2hhcnNldG5hbWU6IElCTS04NTYKLQlkaXNwbGF5TmFtZTogSUJNLTg1NjogUEMgSGVicmV3IChvbGQpCi0JYWxpYXNlczogW0NwODU2LCBpYm04NTZdCi04Ny4gIENoYXJzZXRuYW1lOiBJQk0tODU3Ci0JZGlzcGxheU5hbWU6IElCTS04NTc6IFBDIExhdGluIDUKLQlhbGlhc2VzOiBbY3NpYm04NTcsIGlibTg1NywgQ3A4NTddCi04OC4gIENoYXJzZXRuYW1lOiBJQk0tODU4Ci0JZGlzcGxheU5hbWU6IElCTS04NTg6IFBDIExhdGluIDEgKGV1cm8pCi0JYWxpYXNlczogW0NwODU4LCBpYm04NThdCi04OS4gIENoYXJzZXRuYW1lOiBJQk0tODU5Ci0JZGlzcGxheU5hbWU6IElCTS04NTk6IFBDIExhdGluIDkKLQlhbGlhc2VzOiBbQ3A4NTksIGlibTg1OV0KLTkwLiAgQ2hhcnNldG5hbWU6IElCTS04NjAKLQlkaXNwbGF5TmFtZTogSUJNLTg2MDogUEMgUG9ydHVnYWwKLQlhbGlhc2VzOiBbaWJtODYwLCBDcDg2MF0KLTkxLiAgQ2hhcnNldG5hbWU6IElCTS04NjEKLQlkaXNwbGF5TmFtZTogSUJNLTg2MTogUEMgSWNlbGFuZAotCWFsaWFzZXM6IFtDcDg2MSwgaWJtODYxXQotOTIuICBDaGFyc2V0bmFtZTogSUJNLTg2MgotCWRpc3BsYXlOYW1lOiBJQk0tODYyOiBQQyBJc3JhZWwKLQlhbGlhc2VzOiBbQ3A4NjIsIGlibTg2Ml0KLTkzLiAgQ2hhcnNldG5hbWU6IElCTS04NjMKLQlkaXNwbGF5TmFtZTogSUJNLTg2MzogUEMgQ2FuYWRpYW4gRnJlbmNoIAotCWFsaWFzZXM6IFtpYm04NjMsIENwODYzXQotOTQuICBDaGFyc2V0bmFtZTogSUJNLTg2NAotCWRpc3BsYXlOYW1lOiBJQk0tODY0OiBQQyBBcmFiaWMKLQlhbGlhc2VzOiBbaWJtODY0LCBDcDg2NF0KLTk1LiAgQ2hhcnNldG5hbWU6IElCTS04NjRTCi0JZGlzcGxheU5hbWU6IElCTS04NjRTOiBQQyBBcmFiaWMgKHNoYXBlZCkKLQlhbGlhc2VzOiBbaWJtODY0UywgQ3A4NjRTXQotOTYuICBDaGFyc2V0bmFtZTogSUJNLTg2NQotCWRpc3BsYXlOYW1lOiBJQk0tODY1OiBQQyBOb3JkaWMKLQlhbGlhc2VzOiBbQ3A4NjUsIGlibTg2NV0KLTk3LiAgQ2hhcnNldG5hbWU6IElCTS04NjYKLQlkaXNwbGF5TmFtZTogSUJNLTg2NjogUEMgUnVzc2lhCi0JYWxpYXNlczogW0NwODY2LCBpYm04NjZdCi05OC4gIENoYXJzZXRuYW1lOiBJQk0tODY3Ci0JZGlzcGxheU5hbWU6IElCTS04Njc6IFBDIElzcmFlbAotCWFsaWFzZXM6IFtDcDg2NywgaWJtODY3XQotOTkuICBDaGFyc2V0bmFtZTogSUJNLTg2OAotCWRpc3BsYXlOYW1lOiBJQk0tODY4OiBQQyBVcmR1Ci0JYWxpYXNlczogW0NwODY4LCBpYm04NjhdCi0xMDAuICBDaGFyc2V0bmFtZTogSUJNLTg2OQotCWRpc3BsYXlOYW1lOiBJQk0tODY5OiBQQyBHcmVlY2UKLQlhbGlhc2VzOiBbQ3A4NjksIGlibTg2OV0KLTEwMS4gIENoYXJzZXRuYW1lOiBJQk0tODcwCi0JZGlzcGxheU5hbWU6IElCTS04NzA6IEVCQ0RJQyBMYXRpbiAyCi0JYWxpYXNlczogW0NwODcwLCBpYm04NzBdCi0xMDIuICBDaGFyc2V0bmFtZTogSUJNLTg3MQotCWRpc3BsYXlOYW1lOiBJQk0tODcxOiBFQkNESUMgSWNlbGFuZAotCWFsaWFzZXM6IFtDcDg3MSwgaWJtODcxXQotMTAzLiAgQ2hhcnNldG5hbWU6IElCTS04NzQKLQlkaXNwbGF5TmFtZTogSUJNLTg3NDogUEMgVGhhaQotCWFsaWFzZXM6IFtpYm04NzQsIENwODc0XQotMTA0LiAgQ2hhcnNldG5hbWU6IElCTS04NzUKLQlkaXNwbGF5TmFtZTogSUJNLTg3NTogRUJDRElDIEdyZWVrCi0JYWxpYXNlczogW0NwODc1LCBpYm04NzVdCi0xMDUuICBDaGFyc2V0bmFtZTogSUJNLTg5NwotCWRpc3BsYXlOYW1lOiBJQk0tODk3OiBQQyBTQkNTLW9ubHkgSmFwYW4KLQlhbGlhc2VzOiBbQ3A4OTcsIGlibTg5N10KLTEwNi4gIENoYXJzZXRuYW1lOiBJQk0tOTE4Ci0JZGlzcGxheU5hbWU6IElCTS05MTg6IEVCQ0RJQyBVcmR1Ci0JYWxpYXNlczogW2libTkxOCwgQ3A5MThdCi0xMDcuICBDaGFyc2V0bmFtZTogSUJNLTkyMQotCWRpc3BsYXlOYW1lOiBJQk0tOTIxOiBQQyBCYWx0aWMKLQlhbGlhc2VzOiBbaWJtOTIxLCBDcDkyMV0KLTEwOC4gIENoYXJzZXRuYW1lOiBJQk0tOTIyCi0JZGlzcGxheU5hbWU6IElCTS05MjI6IFBDIEVzdG9uaWFuCi0JYWxpYXNlczogW0NwOTIyLCBpYm05MjJdCi0xMDkuICBDaGFyc2V0bmFtZTogSUJNLTkyNAotCWRpc3BsYXlOYW1lOiBJQk0tOTI0OiBFQkNESUMgTGF0aW4gOQotCWFsaWFzZXM6IFtpYm05MjQsIENwOTI0XQotMTEwLiAgQ2hhcnNldG5hbWU6IElCTS05MjcKLQlkaXNwbGF5TmFtZTogSUJNLTkyNzogUEMgREJDUy1vbmx5IFRhaXdhbgotCWFsaWFzZXM6IFtpYm05MjcsIENwOTI3XQotMTExLiAgQ2hhcnNldG5hbWU6IElCTS05MzAKLQlkaXNwbGF5TmFtZTogSUJNLTkzMDogRUJDRElDIEphcGFuIERCQ1MKLQlhbGlhc2VzOiBbQ3A5MzAsIGlibTkzMF0KLTExMi4gIENoYXJzZXRuYW1lOiBJQk0tOTMyCi0JZGlzcGxheU5hbWU6IElCTS05MzI6IFBDIEphcGFuIFNKSVMtNzggc3ludGF4Ci0JYWxpYXNlczogW0NwOTMyLCBpYm05MzJdCi0xMTMuICBDaGFyc2V0bmFtZTogSUJNLTkzMwotCWRpc3BsYXlOYW1lOiBJQk0tOTMzOiBFQkNESUMgS29yZWEgREJDUwotCWFsaWFzZXM6IFtDcDkzMywgaWJtOTMzXQotMTE0LiAgQ2hhcnNldG5hbWU6IElCTS05MzUKLQlkaXNwbGF5TmFtZTogSUJNLTkzNTogRUJDRElDIENoaW5hIERCQ1MKLQlhbGlhc2VzOiBbQ3A5MzUsIGlibTkzNV0KLTExNS4gIENoYXJzZXRuYW1lOiBJQk0tOTM3Ci0JZGlzcGxheU5hbWU6IElCTS05Mzc6IEVCQ0RJQyBUYWl3YW4gREJDUwotCWFsaWFzZXM6IFtDcDkzNywgaWJtOTM3XQotMTE2LiAgQ2hhcnNldG5hbWU6IElCTS05MzkKLQlkaXNwbGF5TmFtZTogSUJNLTkzOTogRUJDRElDIEphcGFuIEV4dGVuZGVkIERCQ1MKLQlhbGlhc2VzOiBbQ3A5MzksIGlibTkzOV0KLTExNy4gIENoYXJzZXRuYW1lOiBJQk0tOTQyCi0JZGlzcGxheU5hbWU6IElCTS05NDI6IFBDIEphcGFuIFNKSVMtNzgKLQlhbGlhc2VzOiBbaWJtOTQyLCBDcDk0Ml0KLTExOC4gIENoYXJzZXRuYW1lOiBJQk0tOTQyQwotCWRpc3BsYXlOYW1lOiBJQk0tOTQyQzogUEMgSmFwYW4gU0pJUy03OCBzeW50YXgKLQlhbGlhc2VzOiBbaWJtOTQyQywgQ3A5NDJDXQotMTE5LiAgQ2hhcnNldG5hbWU6IElCTS05NDMKLQlkaXNwbGF5TmFtZTogSUJNLTk0MzogUEMgSmFwYW4gU0pJUy05MAotCWFsaWFzZXM6IFtpYm05NDMsIENwOTQzXQotMTIwLiAgQ2hhcnNldG5hbWU6IElCTS05NDNDCi0JZGlzcGxheU5hbWU6IElCTS05NDNDOiBQQyBKYXBhbiBTSklTLTkwIHN5bnRheAotCWFsaWFzZXM6IFtDcDk0M0MsIGlibTk0M0NdCi0xMjEuICBDaGFyc2V0bmFtZTogSUJNLTk0NwotCWRpc3BsYXlOYW1lOiBJQk0tOTQ3OiBQQyBEQkNTLW9ubHkgVGFpd2FuCi0JYWxpYXNlczogW2libTk0NywgQ3A5NDddCi0xMjIuICBDaGFyc2V0bmFtZTogSUJNLTk0OAotCWRpc3BsYXlOYW1lOiBJQk0tOTQ4OiBQQyBUYWl3YW4gU0FBCi0JYWxpYXNlczogW2libTk0OCwgQ3A5NDhdCi0xMjMuICBDaGFyc2V0bmFtZTogSUJNLTk0OQotCWRpc3BsYXlOYW1lOiBJQk0tOTQ5OiBQQyBLb3JlYSAoS1MpCi0JYWxpYXNlczogW0NwOTQ5LCBpYm05NDldCi0xMjQuICBDaGFyc2V0bmFtZTogSUJNLTk0OUMKLQlkaXNwbGF5TmFtZTogSUJNLTk0OUM6IFBDIEtvcmVhIChLUykKLQlhbGlhc2VzOiBbQ3A5NDlDLCBpYm05NDlDXQotMTI1LiAgQ2hhcnNldG5hbWU6IElCTS05NTAKLQlkaXNwbGF5TmFtZTogSUJNLTk1MDogUEMgVGFpd2FuCi0JYWxpYXNlczogW2libTk1MCwgQ3A5NTBdCi0xMjYuICBDaGFyc2V0bmFtZTogSUJNLTk1MQotCWRpc3BsYXlOYW1lOiBJQk0tOTUxOiBQQyBEQkNTLW9ubHkgS29yZWFuCi0JYWxpYXNlczogW0NwOTUxLCBpYm05NTFdCi0xMjcuICBDaGFyc2V0bmFtZTogSUJNLTk1NAotCWRpc3BsYXlOYW1lOiBJQk0tOTU0OiBFVUMgSmFwYW4gKGZ1bGwpCi0JYWxpYXNlczogW0NwOTU0LCBpYm05NTRdCi0xMjguICBDaGFyc2V0bmFtZTogSUJNLTk1NEMKLQlkaXNwbGF5TmFtZTogSUJNLTk1NEM6IEVVQyBKYXBhbiAoZnVsbCkgd2l0aCBzeW50YXgKLQlhbGlhc2VzOiBbQ3A5NTRjLCBpYm0tZXVjanBdCi0xMjkuICBDaGFyc2V0bmFtZTogSUJNLTk2NAotCWRpc3BsYXlOYW1lOiBJQk0tOTY0OiBFVUMgVGFpd2FuCi0JYWxpYXNlczogW0NwOTY0LCBpYm0tZXVjdHddCi0xMzAuICBDaGFyc2V0bmFtZTogSUJNLTk3MQotCWRpc3BsYXlOYW1lOiBJQk0tOTcxOiBFVUMgREJDUy1vbmx5IEtvcmVhbgotCWFsaWFzZXM6IFtDcDk3MSwgaWJtOTcxXQotMTMxLiAgQ2hhcnNldG5hbWU6IElTQ0lJOTEKLQlkaXNwbGF5TmFtZTogSVNDSUk5MTogSVNDSUkgRGV2ZW5hZ2FyaSA5MQotCWFsaWFzZXM6IFtpc2NpaV0KLTEzMi4gIENoYXJzZXRuYW1lOiBJU08tMjAyMi1DTgotCWRpc3BsYXlOYW1lOiBJU08tMjAyMi1DTjogSVNPIDIwMjIgVHJhZGl0aW9uYWwgQ2hpbmVzZQotCWFsaWFzZXM6IFtpc28yMDIyLWNuLWNucywgaXNvLTIwMjItY24tY25zLCBpc28yMDIyY24tY25zLCBpc28yMDIyY24sIGlzbzIwMjItY25dCi0xMzMuICBDaGFyc2V0bmFtZTogSVNPLTIwMjItQ04tR0IKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItQ04tR0I6IElTTyAyMDIyIFNpbXBsaWZpZWQgQ2hpbmVzZQotCWFsaWFzZXM6IFtpc28yMDIyY24tZ2IsIGlzbzIwMjItY24tZ2JdCi0xMzQuICBDaGFyc2V0bmFtZTogSVNPLTIwMjItSlAKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItSlA6IElTTyAyMDIyIEphcGFuCi0JYWxpYXNlczogW2ppcywgY3Npc28yMDIyanAyLCBpc28yMDIyLWpwLCBjc2ppc2VuY29kaW5nLCBqaXMtZW5jb2RpbmcsIGlzby0yMDIyLWpwMiwgaXNvMjAyMmpwXQotMTM1LiAgQ2hhcnNldG5hbWU6IElTTy0yMDIyLUtSCi0JZGlzcGxheU5hbWU6IElTTy0yMDIyLUtSOiBJU08gMjAyMiBLb3JlYQotCWFsaWFzZXM6IFtpc28yMDIyLWtyLCBjc2lzbzIwMjJrciwgaXNvMjAyMmtyXQotMTM2LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTogSVNPIExhdGluIDEgLSBXZXN0ZXJuIEV1cm9wZQotCWFsaWFzZXM6IFtjc2lzb2xhdGluMSwgaXNvLWlyLTEwMCwgaXNvODg1OS0xLCBpYm0tODE5LCBpc284ODU5XzEsIGxhdGluMSwgODg1OS0xLCBpYm04MTksIGlzby04ODU5LTE6MTk4NywgQ3A4MTksIGwxXQotMTM3LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEwCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTEwOiBJU08gTGF0aW4gNiAtIE5vcmRpYwotCWFsaWFzZXM6IFtpc284ODU5LTEwLCBJU09fODg1OS0xMDoxOTkyLCBsYXRpbjYsIGlibS05MTksIDg4NTktMTAsIGlzby1pci0xNTcsIGw2LCBpc284ODU5XzEwLCBjc2lzb2xhdGluNl0KLTEzOC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xMwotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xMzogSVNPIExhdGluIDcgLSBCYWx0aWMgUmltCi0JYWxpYXNlczogW2lzbzg4NTktMTMsIGlzbzg4NTlfMTMsIDg4NTktMTNdCi0xMzkuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMTQKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTQ6IElTTyBMYXRpbiA4IC0gQ2VsdGljCi0JYWxpYXNlczogWzg4NTktMTQsIGlzbzg4NTlfMTQsIGlzby1pci0xOTksIElTT184ODU5LTE0OjE5OTgsIGxhdGluOCwgaXNvODg1OS0xNCwgaXNvY2VsdGljLCBsOF0KLTE0MC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xNQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xNTogSVNPIExhdGluIDkgLSBFdXJvCi0JYWxpYXNlczogW2w5LCBpYm05MjMsIGNzaXNvbGF0aW45LCA4ODU5LTksIGlzbzg4NTktMTUsIGlibS05MjMsIGxhdGluOSwgaXNvODg1OV8xNSwgQ3A5MjMsIGlzbzg4NTlfMTVfZmRpcywgbGF0aW4wXQotMTQxLiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTE2Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTE2OiBJU08gUm9tYW5pYW4KLQlhbGlhc2VzOiBbaXNvODg1OV8xNiwgaXNvODg1OS0xNiwgODg1OS0xNl0KLTE0Mi4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0yCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTI6IElTTyBMYXRpbiAyIC0gQ2VudHJhbCBFdXJvcGUKLQlhbGlhc2VzOiBbaWJtOTEyLCBsMiwgaWJtLTkxMiwgaXNvLWlyLTEwMSwgY3Npc29sYXRpbjIsIGlzby04ODU5LTI6MTk4NywgbGF0aW4yLCBpc284ODU5XzIsIENwOTEyLCBpc284ODU5LTIsIDg4NTktMl0KLTE0My4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0zCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTM6IElTTyBMYXRpbiAzIC0gTGF0aW4vRXNwZXJhbnRvCi0JYWxpYXNlczogW2lzby04ODU5LTM6MTk4OCwgY3Npc29sYXRpbjMsIGlzbzg4NTlfMywgODg1OS0zLCBpc284ODU5LTMsIENwOTEzLCBpc28taXItMTA5LCBpYm0tOTEzLCBsMywgbGF0aW4zXQotMTQ0LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTQKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNDogSVNPIExhdGluIDQgLSBCYWx0aWMKLQlhbGlhc2VzOiBbaXNvLWlyLTExMCwgQ3A5MTQsIGw0LCBpYm0tOTE0LCBsYXRpbjQsIGlzbzg4NTlfNCwgaXNvLTg4NTktNDoxOTg4LCBpc284ODU5LTQsIDg4NTktNCwgY3Npc29sYXRpbjRdCi0xNDUuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS01OiBJU08gQ3lyaWxsaWMKLQlhbGlhc2VzOiBbaXNvODg1OV81LCA4ODU5LTUsIGlibTkxNSwgaXNvLTg4NTktNToxOTg4LCBjc2lzb2xhdGluY3lyaWxsaWMsIGN5cmlsbGljLCBDcDkxNSwgaXNvLWlyLTE0NCwgaXNvODg1OS01LCBpYm0tOTE1XQotMTQ2LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTYKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNjogSVNPIEFyYWJpYwotCWFsaWFzZXM6IFtpc28taXItMTI3LCBjc2lzb2xhdGluYXJhYmljLCBpc284ODU5LTYsIGlibTEwODksIGVjbWEtMTE0LCBhc21vLTcwOCwgYXJhYmljLCBpYm0tMTA4OSwgaXNvODg1OV82LCA4ODU5LTYsIENwMTA4OSwgaXNvLTg4NTktNjoxOTg3XQotMTQ3LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTZTCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTZTOiBJU08gQXJhYmljIChzaGFwZWQpCi0JYWxpYXNlczogW2lzbzg4NTktNlMsIGlzbzg4NTlfNlNdCi0xNDguICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNwotCWRpc3BsYXlOYW1lOiBJU08tODg1OS03OiBJU08gR3JlZWsKLQlhbGlhc2VzOiBbaXNvLTg4NTktNzoxOTg3LCBDcDgxMywgODg1OS03LCBpc28taXItMTI2LCBpYm0tODEzLCBpc284ODU5XzcsIGVjbWEtMTE4LCBncmVlazgsIGlibTgxMywgZWxvdC05MjgsIGNzaXNvbGF0aW5ncmVlaywgaXNvODg1OS03LCBncmVla10KLTE0OS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS04Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTg6IElTTyBIZWJyZXcKLQlhbGlhc2VzOiBbaXNvLWlyLTEzOCwgaXNvODg1OS04LCBpYm0tOTE2LCBpc284ODU5XzgsIGNzaXNvbGF0aW5oZWJyZXcsIGhlYnJldywgaXNvLTg4NTktODoxOTg4LCBpYm05MTYsIENwOTE2LCA4ODU5LThdCi0xNTAuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktOQotCWRpc3BsYXlOYW1lOiBJU08tODg1OS05OiBJU08gTGF0aW4gNSAtIFR1cmtleQotCWFsaWFzZXM6IFtDcDkyMCwgbGF0aW41LCBpc28taXItMTQ4LCA4ODU5LTksIGw1LCBjc2lzb2xhdGluNSwgaWJtLTkyMCwgaWJtOTIwLCBpc284ODU5XzksIGlzbzg4NTktOV0KLTE1MS4gIENoYXJzZXRuYW1lOiBKSVMwMjAxCi0JZGlzcGxheU5hbWU6IEpJUzAyMDE6IEphcGFuIEpJUyAwMjAxIChrYXRha2FuYSkKLQlhbGlhc2VzOiBbXQotMTUyLiAgQ2hhcnNldG5hbWU6IEpJUzAyMDgKLQlkaXNwbGF5TmFtZTogSklTMDIwODogSmFwYW4gSklTIDAyMDgKLQlhbGlhc2VzOiBbXQotMTUzLiAgQ2hhcnNldG5hbWU6IEpJUzAyMTIKLQlkaXNwbGF5TmFtZTogSklTMDIxMjogSmFwYW4gSklTIDAyMTIgKGV4dGVuZGVkKQotCWFsaWFzZXM6IFtdCi0xNTQuICBDaGFyc2V0bmFtZTogSm9oYWIKLQlkaXNwbGF5TmFtZTogSm9oYWI6IFBDIEtvcmVhbiBKb2hhYgotCWFsaWFzZXM6IFtdCi0xNTUuICBDaGFyc2V0bmFtZTogS09JOC1SCi0JZGlzcGxheU5hbWU6IEtPSTgtUjogSW50ZXJuZXQgUnVzc2lhCi0JYWxpYXNlczogW2libS04NzgsIGNza29pOHIsIGtvaTgsIGtvaThfcl0KLTE1Ni4gIENoYXJzZXRuYW1lOiBLT0k4LVJVCi0JZGlzcGxheU5hbWU6IEtPSTgtUlU6IEludGVybmV0IEJlbGFydXMKLQlhbGlhc2VzOiBbaWJtLTExNjgsIGtvaThfcnVdCi0xNTcuICBDaGFyc2V0bmFtZTogS09JOC1VCi0JZGlzcGxheU5hbWU6IEtPSTgtVTogSW50ZXJuZXQgVWtyYWluZQotCWFsaWFzZXM6IFtpYm0tMTE2Nywga29pOF91XQotMTU4LiAgQ2hhcnNldG5hbWU6IEtTQzU2MDEKLQlkaXNwbGF5TmFtZTogS1NDNTYwMTogS29yZWEgS1NDCi0JYWxpYXNlczogW10KLTE1OS4gIENoYXJzZXRuYW1lOiBNYWNBcmFiaWMKLQlkaXNwbGF5TmFtZTogTWFjQXJhYmljOiBBcHBsZSBBcmFiaWMKLQlhbGlhc2VzOiBbXQotMTYwLiAgQ2hhcnNldG5hbWU6IE1hY0NlbnRyYWxFdXJvcGUKLQlkaXNwbGF5TmFtZTogTWFjQ2VudHJhbEV1cm9wZTogQXBwbGUgQ2VudHJhbCBFdXJvcGUKLQlhbGlhc2VzOiBbaWJtLTEyODJdCi0xNjEuICBDaGFyc2V0bmFtZTogTWFjQ3JvYXRpYW4KLQlkaXNwbGF5TmFtZTogTWFjQ3JvYXRpYW46IEFwcGxlIENyb2F0aWFuIAotCWFsaWFzZXM6IFtpYm0tMTI4NF0KLTE2Mi4gIENoYXJzZXRuYW1lOiBNYWNDeXJpbGxpYwotCWRpc3BsYXlOYW1lOiBNYWNDeXJpbGxpYzogQXBwbGUgQ3lyaWxsaWMKLQlhbGlhc2VzOiBbaWJtLTEyODNdCi0xNjMuICBDaGFyc2V0bmFtZTogTWFjRGluZ2JhdAotCWRpc3BsYXlOYW1lOiBNYWNEaW5nYmF0OiBBcHBsZSBEaW5nYmF0Ci0JYWxpYXNlczogW10KLTE2NC4gIENoYXJzZXRuYW1lOiBNYWNHcmVlawotCWRpc3BsYXlOYW1lOiBNYWNHcmVlazogQXBwbGUgR3JlZWsKLQlhbGlhc2VzOiBbaWJtLTEyODBdCi0xNjUuICBDaGFyc2V0bmFtZTogTWFjSGVicmV3Ci0JZGlzcGxheU5hbWU6IE1hY0hlYnJldzogQXBwbGUgSGVicmV3IAotCWFsaWFzZXM6IFtdCi0xNjYuICBDaGFyc2V0bmFtZTogTWFjSWNlbGFuZAotCWRpc3BsYXlOYW1lOiBNYWNJY2VsYW5kOiBBcHBsZSBJY2VsYW5kCi0JYWxpYXNlczogW2libS0xMjg2XQotMTY3LiAgQ2hhcnNldG5hbWU6IE1hY1JvbWFuCi0JZGlzcGxheU5hbWU6IE1hY1JvbWFuOiBBcHBsZSBSb21hbgotCWFsaWFzZXM6IFtpYm0tMTI3NV0KLTE2OC4gIENoYXJzZXRuYW1lOiBNYWNSb21hbmlhCi0JZGlzcGxheU5hbWU6IE1hY1JvbWFuaWE6IEFwcGxlIFJvbWFuaWEKLQlhbGlhc2VzOiBbaWJtLTEyODVdCi0xNjkuICBDaGFyc2V0bmFtZTogTWFjU3ltYm9sCi0JZGlzcGxheU5hbWU6IE1hY1N5bWJvbDogQXBwbGUgUG9zdFNjcmlwdCBTeW1ib2wKLQlhbGlhc2VzOiBbQWRvYmUtU3ltYm9sLUVuY29kaW5nLCBpYm0tMTAzOF0KLTE3MC4gIENoYXJzZXRuYW1lOiBNYWNUaGFpCi0JZGlzcGxheU5hbWU6IE1hY1RoYWk6IEFwcGxlIFRoYWkKLQlhbGlhc2VzOiBbXQotMTcxLiAgQ2hhcnNldG5hbWU6IE1hY1R1cmtpc2gKLQlkaXNwbGF5TmFtZTogTWFjVHVya2lzaDogQXBwbGUgVHVya2lzaAotCWFsaWFzZXM6IFtpYm0tMTI4MV0KLTE3Mi4gIENoYXJzZXRuYW1lOiBNYWNVa3JhaW5lCi0JZGlzcGxheU5hbWU6IE1hY1VrcmFpbmU6IEFwcGxlIFVrcmFpbmUKLQlhbGlhc2VzOiBbXQotMTczLiAgQ2hhcnNldG5hbWU6IFBUQ1AxNTQKLQlkaXNwbGF5TmFtZTogUFRDUDE1NDogV2luZG93cyBDeXJpbGxpYyBBc2lhbgotCWFsaWFzZXM6IFtJQk0tMTE2OSwgY3NQVENQMTU0LCBDeXJpbGxpYy1Bc2lhbiwgUFQxNTRdCi0xNzQuICBDaGFyc2V0bmFtZTogU2hpZnRfSklTCi0JZGlzcGxheU5hbWU6IFNoaWZ0X0pJUzogU2hpZnQgSklTIEphcGFuCi0JYWxpYXNlczogW10KLTE3NS4gIENoYXJzZXRuYW1lOiBUSVMtNjIwCi0JZGlzcGxheU5hbWU6IFRJUy02MjA6IFBDIFRoYWlsYW5kCi0JYWxpYXNlczogW3RpczYyMC4yNTMzLCB0aXM2MjBdCi0xNzYuICBDaGFyc2V0bmFtZTogVVMtQVNDSUkKLQlkaXNwbGF5TmFtZTogVVMtQVNDSUk6IEFTQ0lJIDcgYml0Ci0JYWxpYXNlczogW2lzby02NDYuaXJ2OjE5ODMsIElTTzY0Ni1VUywgQVNDSUksIGRlZmF1bHQsIElTTy02NDYuaXJ2OjE5OTEsIGRpcmVjdCwgYXNjaWk3LCBBTlNJX1gzLjQtMTk4NiwgaXNvLWlyLTYsIHVzLCBpYm0tMzY3LCA2NDYsIGNzQVNDSUksIEFOU0lfWDMuNC0xOTY4LCBDcDM2N10KLTE3Ny4gIENoYXJzZXRuYW1lOiBVVEYtMTYKLQlkaXNwbGF5TmFtZTogVVRGLTE2Ci0JYWxpYXNlczogW1VuaWNvZGUsIFVURjE2LCBVVEZfMTYsIFVDUy0yXQotMTc4LiAgQ2hhcnNldG5hbWU6IFVURi0xNkJFCi0JZGlzcGxheU5hbWU6IFVURi0xNkJFOiBVbmljb2RlIFVURi0xNiBCaWctZW5kaWFuCi0JYWxpYXNlczogW1gtVVRGLTE2QkUsIFVuaWNvZGVCaWdVbm1hcmtlZCwgVVRGMTZCRSwgVVRGXzE2QkUsIElTTy0xMDY0Ni1VQ1MtMl0KLTE3OS4gIENoYXJzZXRuYW1lOiBVVEYtMTZMRQotCWRpc3BsYXlOYW1lOiBVVEYtMTZMRTogVW5pY29kZSBVVEYtMTYgTGl0dGxlLWVuZGlhbgotCWFsaWFzZXM6IFtVVEZfMTZMRSwgVVRGMTZMRSwgVW5pY29kZUxpdHRsZVVubWFya2VkLCBYLVVURi0xNkxFXQotMTgwLiAgQ2hhcnNldG5hbWU6IFVURi0zMgotCWRpc3BsYXlOYW1lOiBVVEYtMzI6IFVuaWNvZGUgVVRGLTMyCi0JYWxpYXNlczogW0lTTy0xMDY0Ni1VQ1MtNCwgVVRGMzIsIFVDUy00LCBVVEZfMzJCRV0KLTE4MS4gIENoYXJzZXRuYW1lOiBVVEYtMzJCRQotCWRpc3BsYXlOYW1lOiBVVEYtMzJCRTogVW5pY29kZSBVVEYtMzIgQmlnLWVuZGlhbgotCWFsaWFzZXM6IFtVVEYzMkJFLCBYLVVURi0zMkJFLCBVVEZfMzJCRV0KLTE4Mi4gIENoYXJzZXRuYW1lOiBVVEYtMzJMRQotCWRpc3BsYXlOYW1lOiBVVEYtMzJMRTogVW5pY29kZSBVVEYtMzIgTGl0dGxlLWVuZGlhbgotCWFsaWFzZXM6IFtVVEZfMzJMRSwgVVRGMzJMRSwgWC1VVEYtMzJMRV0KLTE4My4gIENoYXJzZXRuYW1lOiBVVEYtOAotCWRpc3BsYXlOYW1lOiBVVEYtODogVW5pY29kZSBVVEYtOAotCWFsaWFzZXM6IFtVVEZfOCwgVVRGOF0KLTE4NC4gIENoYXJzZXRuYW1lOiBVVEYtOEoKLQlkaXNwbGF5TmFtZTogVVRGLThKOiBVbmljb2RlIFVURi04IChKYXZhKQotCWFsaWFzZXM6IFtVVEY4Sl0KLTE4NS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTAKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUwOiBXaW5kb3dzIExhdGluIDIKLQlhbGlhc2VzOiBbaWJtLTEyNTAsIENwMTI1MF0KLTE4Ni4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTEKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUxOiBXaW5kb3dzIEN5cmlsbGljCi0JYWxpYXNlczogW2libS0xMjUxLCBDcDEyNTFdCi0xODcuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjUyCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1MjogV2luZG93cyBMYXRpbiAxIAotCWFsaWFzZXM6IFtDcDEyNTIsIGlibS0xMjUyXQotMTg4LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MwotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTM6IFdpbmRvd3MgR3JlZWsKLQlhbGlhc2VzOiBbQ3AxMjUzLCBpYm0tMTI1M10KLTE4OS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTQKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU0OiBXaW5kb3dzIExhdGluIDUgKFR1cmtleSkKLQlhbGlhc2VzOiBbQ3AxMjU0LCBpYm0tMTI1NF0KLTE5MC4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTUKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU1OiBXaW5kb3dzIEhlYnJldwotCWFsaWFzZXM6IFtDcDEyNTUsIGlibS0xMjU1XQotMTkxLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NgotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTY6IFdpbmRvd3MgQXJhYmljCi0JYWxpYXNlczogW0NwMTI1NiwgaWJtLTEyNTZdCi0xOTIuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU2UwotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTZTOiBXaW5kb3dzIEFyYWJpYyAoc2hhcGVkKQotCWFsaWFzZXM6IFtpYm0tMTI1NnMsIENwMTI1NnNdCi0xOTMuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU3Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NzogV2luZG93cyBMYXRpbiA0IChCYWx0dGljKQotCWFsaWFzZXM6IFtDcDEyNTcsIGlibS0xMjU3XQotMTk0LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1OAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTg6IFdpbmRvd3MgVmlldG5hbWVzZQotCWFsaWFzZXM6IFtpYm0tMTEyOSwgaWJtLTEyNTgsIENwMTI1OF0KLTE5NS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTg3NAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTg3NDogV2luZG93cyBUaGFpCi0JYWxpYXNlczogW01TODc0XQotMTk2LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtOTMyCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtOTMyOiBXaW5kb3dzIEphcGFuCi0JYWxpYXNlczogW21zX2thbmppLCBjc3dpbmRvd3MzMWosIE1TOTMyLCB3aW5kb3dzLTMxal0KLTE5Ny4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTkzNgotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTkzNjogV2luZG93cyBDaGluYQotCWFsaWFzZXM6IFtNUzkzNiwgOTM2XQotMTk4LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtOTQ5Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtOTQ5OiBXaW5kb3dzIEtvcmVhCi0JYWxpYXNlczogW2libS0xMzYxLCBDcDEzNjEsIGlibTEzNjEsIE1TOTQ5LCBtczEzNjEsIGtzYzU2MDEtMTk5Ml0KLTE5OS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTk1MAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTk1MDogV2luZG93cyBUYWl3YW4KLQlhbGlhc2VzOiBbTVM5NTBdCi0yMDAuICBDaGFyc2V0bmFtZTogWC1Vbmljb2RlQmlnCi0JZGlzcGxheU5hbWU6IFgtVW5pY29kZUJpZzogVW5pY29kZSBVVEYtMTYgQmlnLWVuZGlhbiB3aXRoIG1hcmsKLQlhbGlhc2VzOiBbVW5pY29kZUJpZ10KLTIwMS4gIENoYXJzZXRuYW1lOiBYLVVuaWNvZGVMaXR0bGUKLQlkaXNwbGF5TmFtZTogWC1Vbmljb2RlTGl0dGxlOiBVbmljb2RlIFVURi0xNiBMaXR0bGUtZW5kaWFuIHdpdGggbWFyawotCWFsaWFzZXM6IFtVbmljb2RlTGl0dGxlXQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9vdXRwdXRGcm9tTGlzdENoYXJzZXRzL1N1bjEuNC4zXzAyLnR4dCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvb3V0cHV0RnJvbUxpc3RDaGFyc2V0cy9TdW4xLjQuM18wMi50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3OTIyYWMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9vdXRwdXRGcm9tTGlzdENoYXJzZXRzL1N1bjEuNC4zXzAyLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDM0MyArMCwwIEBACi0KLUN1cnJlbnQgTG9jYWxlOiBlbl9VUwotCi1KUkUgdmVyc2lvbjogMS40LjJfMDMgKDEuNC4yXzAzLWIwMikKLS0tIGxpc3RpbmcgcHJvcGVydGllcyAtLQotamF2YS5ydW50aW1lLm5hbWU9SmF2YShUTSkgMiBSdW50aW1lIEVudmlyb25tZW50LCBTdGFuZC4uLgotc3VuLmJvb3QubGlicmFyeS5wYXRoPUQ6XEpES3NcajJzZGsxLjQuMl8wM1xqcmVcYmluCi1qYXZhLnZtLnZlcnNpb249MS40LjJfMDMtYjAyCi1qYXZhLnZtLnZlbmRvcj1TdW4gTWljcm9zeXN0ZW1zIEluYy4KLWphdmEudmVuZG9yLnVybD1odHRwOi8vamF2YS5zdW4uY29tLwotcGF0aC5zZXBhcmF0b3I9OwotamF2YS52bS5uYW1lPUphdmEgSG90U3BvdChUTSkgQ2xpZW50IFZNCi1maWxlLmVuY29kaW5nLnBrZz1zdW4uaW8KLXVzZXIuY291bnRyeT1VUwotc3VuLm9zLnBhdGNoLmxldmVsPVNlcnZpY2UgUGFjayAxCi1qYXZhLnZtLnNwZWNpZmljYXRpb24ubmFtZT1KYXZhIFZpcnR1YWwgTWFjaGluZSBTcGVjaWZpY2F0aW9uCi11c2VyLmRpcj1EOlxidWlsZHNcRGFpbHlcZWNsaXBzZS1TREstSTIwMDQwMzA0Li4uCi1qYXZhLnJ1bnRpbWUudmVyc2lvbj0xLjQuMl8wMy1iMDIKLWphdmEuYXd0LmdyYXBoaWNzZW52PXN1bi5hd3QuV2luMzJHcmFwaGljc0Vudmlyb25tZW50Ci1qYXZhLmVuZG9yc2VkLmRpcnM9RDpcSkRLc1xqMnNkazEuNC4yXzAzXGpyZVxsaWJcZW5kb3JzZWQKLW9zLmFyY2g9eDg2Ci1qYXZhLmlvLnRtcGRpcj1DOlxET0NVTUV+MVxEQVZJRFd+MS5ETVdcTE9DQUxTfjFcVGVtcFwKLWxpbmUuc2VwYXJhdG9yPQotCi1qYXZhLnZtLnNwZWNpZmljYXRpb24udmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotdXNlci52YXJpYW50PQotb3MubmFtZT1XaW5kb3dzIFhQCi1zdW4uamF2YTJkLmZvbnRwYXRoPQotamF2YS5saWJyYXJ5LnBhdGg9RDpcSkRLc1xqMnNkazEuNC4yXzAzXGJpbjsuO0M6XFdJTkRPVy4uLgotamF2YS5zcGVjaWZpY2F0aW9uLm5hbWU9SmF2YSBQbGF0Zm9ybSBBUEkgU3BlY2lmaWNhdGlvbgotamF2YS5jbGFzcy52ZXJzaW9uPTQ4LjAKLWphdmEudXRpbC5wcmVmcy5QcmVmZXJlbmNlc0ZhY3Rvcnk9amF2YS51dGlsLnByZWZzLldpbmRvd3NQcmVmZXJlbmNlc0ZhYy4uLgotb3MudmVyc2lvbj01LjEKLXVzZXIuaG9tZT1DOlxEb2N1bWVudHMgYW5kIFNldHRpbmdzXGRhdmlkdy5ETVcyVDIzCi11c2VyLnRpbWV6b25lPQotamF2YS5hd3QucHJpbnRlcmpvYj1zdW4uYXd0LndpbmRvd3MuV1ByaW50ZXJKb2IKLWZpbGUuZW5jb2Rpbmc9Q3AxMjUyCi1qYXZhLnNwZWNpZmljYXRpb24udmVyc2lvbj0xLjQKLXVzZXIubmFtZT1kYXZpZHcKLWphdmEuY2xhc3MucGF0aD1EOlxidWlsZHNcRGFpbHlcZWNsaXBzZS1TREstSTIwMDQwMzA0Li4uCi1qYXZhLnZtLnNwZWNpZmljYXRpb24udmVyc2lvbj0xLjAKLXN1bi5hcmNoLmRhdGEubW9kZWw9MzIKLWphdmEuaG9tZT1EOlxKREtzXGoyc2RrMS40LjJfMDNcanJlCi1qYXZhLnNwZWNpZmljYXRpb24udmVuZG9yPVN1biBNaWNyb3N5c3RlbXMgSW5jLgotdXNlci5sYW5ndWFnZT1lbgotYXd0LnRvb2xraXQ9c3VuLmF3dC53aW5kb3dzLldUb29sa2l0Ci1qYXZhLnZtLmluZm89bWl4ZWQgbW9kZQotamF2YS52ZXJzaW9uPTEuNC4yXzAzCi1qYXZhLmV4dC5kaXJzPUQ6XEpES3NcajJzZGsxLjQuMl8wM1xqcmVcbGliXGV4dAotc3VuLmJvb3QuY2xhc3MucGF0aD1EOlxKREtzXGoyc2RrMS40LjJfMDNcanJlXGxpYlxydC5qYXI7Li4uCi1qYXZhLnZlbmRvcj1TdW4gTWljcm9zeXN0ZW1zIEluYy4KLWZpbGUuc2VwYXJhdG9yPVwKLWphdmEudmVuZG9yLnVybC5idWc9aHR0cDovL2phdmEuc3VuLmNvbS9jZ2ktYmluL2J1Z3JlcG9ydC4uLgotc3VuLmNwdS5lbmRpYW49bGl0dGxlCi1zdW4uaW8udW5pY29kZS5lbmNvZGluZz1Vbmljb2RlTGl0dGxlCi1zdW4uY3B1LmlzYWxpc3Q9cGVudGl1bSBpNDg2IGkzODYKLUF2YWlsYWJsZSBMb2NhbGVzCi1hcgotYXJfQUUKLWFyX0JICi1hcl9EWgotYXJfRUcKLWFyX0lRCi1hcl9KTwotYXJfS1cKLWFyX0xCCi1hcl9MWQotYXJfTUEKLWFyX09NCi1hcl9RQQotYXJfU0EKLWFyX1NECi1hcl9TWQotYXJfVE4KLWFyX1lFCi1oaV9JTgotaXcKLWl3X0lMCi1qYQotamFfSlAKLWtvCi1rb19LUgotdGgKLXRoX1RICi10aF9USF9USAotemgKLXpoX0NOCi16aF9ISwotemhfVFcKLWJlCi1iZV9CWQotYmcKLWJnX0JHCi1jYQotY2FfRVMKLWNzCi1jc19DWgotZGEKLWRhX0RLCi1kZQotZGVfQVQKLWRlX0NICi1kZV9ERQotZGVfTFUKLWVsCi1lbF9HUgotZW5fQVUKLWVuX0NBCi1lbl9HQgotZW5fSUUKLWVuX0lOCi1lbl9OWgotZW5fWkEKLWVzCi1lc19BUgotZXNfQk8KLWVzX0NMCi1lc19DTwotZXNfQ1IKLWVzX0RPCi1lc19FQwotZXNfRVMKLWVzX0dUCi1lc19ITgotZXNfTVgKLWVzX05JCi1lc19QQQotZXNfUEUKLWVzX1BSCi1lc19QWQotZXNfU1YKLWVzX1VZCi1lc19WRQotZXQKLWV0X0VFCi1maQotZmlfRkkKLWZyCi1mcl9CRQotZnJfQ0EKLWZyX0NICi1mcl9GUgotZnJfTFUKLWhyCi1ocl9IUgotaHUKLWh1X0hVCi1pcwotaXNfSVMKLWl0Ci1pdF9DSAotaXRfSVQKLWx0Ci1sdF9MVAotbHYKLWx2X0xWCi1tawotbWtfTUsKLW5sCi1ubF9CRQotbmxfTkwKLW5vCi1ub19OTwotbm9fTk9fTlkKLXBsCi1wbF9QTAotcHQKLXB0X0JSCi1wdF9QVAotcm8KLXJvX1JPCi1ydQotcnVfUlUKLXNoCi1zaF9ZVQotc2sKLXNrX1NLCi1zbAotc2xfU0kKLXNxCi1zcV9BTAotc3IKLXNyX1lVCi1zdgotc3ZfU0UKLXRyCi10cl9UUgotdWsKLXVrX1VBCi1lbgotZW5fVVMKLWZpbGUuZW5jb2RpbmcucGtnOiBzdW4uaW8KLWZpbGUuZW5jb2Rpbmc6IENwMTI1MgotCi0KLUF2YWlsYWJsZSBDaGFyc2V0cwotMS4gIENoYXJzZXRuYW1lOiBCaWc1Ci0JZGlzcGxheU5hbWU6IEJpZzUKLQlhbGlhc2VzOiBbY3NCaWc1XQotMi4gIENoYXJzZXRuYW1lOiBCaWc1LUhLU0NTCi0JZGlzcGxheU5hbWU6IEJpZzUtSEtTQ1MKLQlhbGlhc2VzOiBbYmlnNS1oa3NjcywgQmlnNV9IS1NDUywgYmlnNWhrc2NzXQotMy4gIENoYXJzZXRuYW1lOiBFVUMtSlAKLQlkaXNwbGF5TmFtZTogRVVDLUpQCi0JYWxpYXNlczogW2V1Y2ppcywgeC1ldWNqcCwgY3NFVUNQa2RGbXRqYXBhbmVzZSwgZXVjanAsIEV4dGVuZGVkX1VOSVhfQ29kZV9QYWNrZWRfRm9ybWF0X2Zvcl9KYXBhbmVzZSwgeC1ldWMtanAsIGV1Y19qcF0KLTQuICBDaGFyc2V0bmFtZTogRVVDLUtSCi0JZGlzcGxheU5hbWU6IEVVQy1LUgotCWFsaWFzZXM6IFtrc2M1NjAxLCA1NjAxLCBrc2M1NjAxXzE5ODcsIGtzY181NjAxLCBrc2M1NjAxLTE5ODcsIGV1Y19rciwga3NfY181NjAxLTE5ODcsIGV1Y2tyLCBjc0VVQ0tSXQotNS4gIENoYXJzZXRuYW1lOiBHQjE4MDMwCi0JZGlzcGxheU5hbWU6IEdCMTgwMzAKLQlhbGlhc2VzOiBbZ2IxODAzMC0yMDAwXQotNi4gIENoYXJzZXRuYW1lOiBHQksKLQlkaXNwbGF5TmFtZTogR0JLCi0JYWxpYXNlczogW3dpbmRvd3MtOTM2LCBDUDkzNl0KLTcuICBDaGFyc2V0bmFtZTogSVNPLTIwMjItSlAKLQlkaXNwbGF5TmFtZTogSVNPLTIwMjItSlAKLQlhbGlhc2VzOiBbamlzLCBqaXNfZW5jb2RpbmcsIGNzamlzZW5jb2RpbmcsIGNzSVNPMjAyMkpQLCBpc28yMDIyanBdCi04LiAgQ2hhcnNldG5hbWU6IElTTy0yMDIyLUtSCi0JZGlzcGxheU5hbWU6IElTTy0yMDIyLUtSCi0JYWxpYXNlczogW0lTTzIwMjJLUiwgY3NJU08yMDIyS1JdCi05LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTEKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMQotCWFsaWFzZXM6IFtpc28taXItMTAwLCA4ODU5XzEsIElTT184ODU5LTEsIElTTzg4NTlfMSwgODE5LCBjc0lTT0xhdGluMSwgSUJNLTgxOSwgSVNPXzg4NTktMToxOTg3LCBsYXRpbjEsIGNwODE5LCBJU084ODU5LTEsIElCTTgxOSwgSVNPXzg4NTlfMSwgbDFdCi0xMC4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0xMwotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0xMwotCWFsaWFzZXM6IFtpc284ODU5XzEzXQotMTEuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMTUKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktMTUKLQlhbGlhc2VzOiBbODg1OV8xNSwgY3NJU09sYXRpbjksIElCTTkyMywgY3A5MjMsIDkyMywgTDksIElCTS05MjMsIElTTzg4NTktMTUsIExBVElOOSwgSVNPXzg4NTktMTUsIExBVElOMCwgY3NJU09sYXRpbjAsIElTTzg4NTlfMTVfRkRJUywgSVNPLTg4NTktMTVdCi0xMi4gIENoYXJzZXRuYW1lOiBJU08tODg1OS0yCi0JZGlzcGxheU5hbWU6IElTTy04ODU5LTIKLQlhbGlhc2VzOiBbbDIsIGlzby1pci0xMDEsIElTT184ODU5LTI6MTk4NywgSVNPXzg4NTktMiwgbGF0aW4yLCBjc0lTT0xhdGluMiwgaXNvODg1OV8yXQotMTMuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktMwotCWRpc3BsYXlOYW1lOiBJU08tODg1OS0zCi0JYWxpYXNlczogW10KLTE0LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTQKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNAotCWFsaWFzZXM6IFtpc28taXItMTEwLCBsNCwgbGF0aW40LCBjc0lTT0xhdGluNCwgaXNvODg1OV80LCBJU09fODg1OS00OjE5ODgsIElTT184ODU5LTRdCi0xNS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS01Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTUKLQlhbGlhc2VzOiBbY3lyaWxsaWMsIGlzbzg4NTlfNSwgSVNPXzg4NTktNSwgaXNvLWlyLTE0NCwgY3NJU09MYXRpbkN5cmlsbGljXQotMTYuICBDaGFyc2V0bmFtZTogSVNPLTg4NTktNgotCWRpc3BsYXlOYW1lOiBJU08tODg1OS02Ci0JYWxpYXNlczogW10KLTE3LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTcKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktNwotCWFsaWFzZXM6IFtncmVlazgsIEVDTUEtMTE4LCBzdW5fZXVfZ3JlZWssIEVMT1RfOTI4LCBJU09fODg1OS03OjE5ODcsIGlzby1pci0xMjYsIElTT184ODU5LTcsIGlzbzg4NTlfNywgZ3JlZWssIGNzSVNPTGF0aW5HcmVla10KLTE4LiAgQ2hhcnNldG5hbWU6IElTTy04ODU5LTgKLQlkaXNwbGF5TmFtZTogSVNPLTg4NTktOAotCWFsaWFzZXM6IFtdCi0xOS4gIENoYXJzZXRuYW1lOiBJU08tODg1OS05Ci0JZGlzcGxheU5hbWU6IElTTy04ODU5LTkKLQlhbGlhc2VzOiBbaXNvLWlyLTE0OCwgbGF0aW41LCBsNSwgSVNPXzg4NTktOSwgSVNPXzg4NTktOToxOTg5LCBjc0lTT0xhdGluNSwgaXNvODg1OV85XQotMjAuICBDaGFyc2V0bmFtZTogSklTX1gwMjAxCi0JZGlzcGxheU5hbWU6IEpJU19YMDIwMQotCWFsaWFzZXM6IFtKSVNfWDAyMDEsIFgwMjAxLCBKSVMwMjAxLCBjc0hhbGZXaWR0aEthdGFrYW5hXQotMjEuICBDaGFyc2V0bmFtZTogSklTX1gwMjEyLTE5OTAKLQlkaXNwbGF5TmFtZTogSklTX1gwMjEyLTE5OTAKLQlhbGlhc2VzOiBbamlzX3gwMjEyLTE5OTAsIGlzby1pci0xNTksIHgwMjEyLCBKSVMwMjEyLCBjc0lTTzE1OUpJU1gwMjEyMTk5MF0KLTIyLiAgQ2hhcnNldG5hbWU6IEtPSTgtUgotCWRpc3BsYXlOYW1lOiBLT0k4LVIKLQlhbGlhc2VzOiBba29pOCwgY3Nrb2k4cl0KLTIzLiAgQ2hhcnNldG5hbWU6IFNoaWZ0X0pJUwotCWRpc3BsYXlOYW1lOiBTaGlmdF9KSVMKLQlhbGlhc2VzOiBbc2hpZnQtamlzLCB4LXNqaXMsIG1zX2thbmppLCBzaGlmdF9qaXMsIGNzU2hpZnRKSVMsIHNqaXMsIHBja10KLTI0LiAgQ2hhcnNldG5hbWU6IFRJUy02MjAKLQlkaXNwbGF5TmFtZTogVElTLTYyMAotCWFsaWFzZXM6IFtdCi0yNS4gIENoYXJzZXRuYW1lOiBVUy1BU0NJSQotCWRpc3BsYXlOYW1lOiBVUy1BU0NJSQotCWFsaWFzZXM6IFtJU082NDYtVVMsIElCTTM2NywgQVNDSUksIGNwMzY3LCBhc2NpaTcsIEFOU0lfWDMuNC0xOTg2LCBpc28taXItNiwgdXMsIDY0NiwgaXNvXzY0Ni5pcnY6MTk4MywgY3NBU0NJSSwgQU5TSV9YMy40LTE5NjgsIElTT182NDYuaXJ2OjE5OTFdCi0yNi4gIENoYXJzZXRuYW1lOiBVVEYtMTYKLQlkaXNwbGF5TmFtZTogVVRGLTE2Ci0JYWxpYXNlczogW1VURl8xNl0KLTI3LiAgQ2hhcnNldG5hbWU6IFVURi0xNkJFCi0JZGlzcGxheU5hbWU6IFVURi0xNkJFCi0JYWxpYXNlczogW1gtVVRGLTE2QkUsIFVURl8xNkJFLCBJU08tMTA2NDYtVUNTLTJdCi0yOC4gIENoYXJzZXRuYW1lOiBVVEYtMTZMRQotCWRpc3BsYXlOYW1lOiBVVEYtMTZMRQotCWFsaWFzZXM6IFtVVEZfMTZMRSwgWC1VVEYtMTZMRV0KLTI5LiAgQ2hhcnNldG5hbWU6IFVURi04Ci0JZGlzcGxheU5hbWU6IFVURi04Ci0JYWxpYXNlczogW1VURjhdCi0zMC4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTAKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUwCi0JYWxpYXNlczogW2NwMTI1MF0KLTMxLiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1MQotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTEKLQlhbGlhc2VzOiBbY3AxMjUxXQotMzIuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjUyCi0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1MgotCWFsaWFzZXM6IFtjcDEyNTJdCi0zMy4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTMKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjUzCi0JYWxpYXNlczogW2NwMTI1M10KLTM0LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NAotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTQKLQlhbGlhc2VzOiBbY3AxMjU0XQotMzUuICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU1Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1NQotCWFsaWFzZXM6IFtdCi0zNi4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTEyNTYKLQlkaXNwbGF5TmFtZTogd2luZG93cy0xMjU2Ci0JYWxpYXNlczogW10KLTM3LiAgQ2hhcnNldG5hbWU6IHdpbmRvd3MtMTI1NwotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTEyNTcKLQlhbGlhc2VzOiBbY3AxMjU3XQotMzguICBDaGFyc2V0bmFtZTogd2luZG93cy0xMjU4Ci0JZGlzcGxheU5hbWU6IHdpbmRvd3MtMTI1OAotCWFsaWFzZXM6IFtdCi0zOS4gIENoYXJzZXRuYW1lOiB3aW5kb3dzLTMxagotCWRpc3BsYXlOYW1lOiB3aW5kb3dzLTMxagotCWFsaWFzZXM6IFtjc1dpbmRvd3MzMUosIHdpbmRvd3MtOTMyLCBNUzkzMl0KLTQwLiAgQ2hhcnNldG5hbWU6IHgtRVVDLUNOCi0JZGlzcGxheU5hbWU6IHgtRVVDLUNOCi0JYWxpYXNlczogW2diMjMxMiwgRVVDX0NOLCBldWNjbiwgZXVjLWNuLCBnYjIzMTItODAsIGdiMjMxMi0xOTgwXQotNDEuICBDaGFyc2V0bmFtZTogeC1ldWMtanAtbGludXgKLQlkaXNwbGF5TmFtZTogeC1ldWMtanAtbGludXgKLQlhbGlhc2VzOiBbZXVjX2pwX2xpbnV4LCBldWMtanAtbGludXhdCi00Mi4gIENoYXJzZXRuYW1lOiB4LUVVQy1UVwotCWRpc3BsYXlOYW1lOiB4LUVVQy1UVwotCWFsaWFzZXM6IFtjbnMxMTY0MywgZXVjX3R3LCBFVUMtVFcsIGV1Y3R3XQotNDMuICBDaGFyc2V0bmFtZTogeC1JU0NJSTkxCi0JZGlzcGxheU5hbWU6IHgtSVNDSUk5MQotCWFsaWFzZXM6IFtpc2NpaSwgU1RfU0VWXzM1OC04OCwgaXNvLWlyLTE1MywgY3NJU08xNTNHT1NUMTk3Njg3NCwgSVNDSUk5MV0KLTQ0LiAgQ2hhcnNldG5hbWU6IHgtSklTMDIwOAotCWRpc3BsYXlOYW1lOiB4LUpJUzAyMDgKLQlhbGlhc2VzOiBbSklTX0M2NjI2LTE5ODMsIEpJUzAyMDgsIGNzSVNPODdKSVNYMDIwOCwgeDAyMDgsIEpJU19YMDIwOC0xOTgzLCBpc28taXItODddCi00NS4gIENoYXJzZXRuYW1lOiB4LUpvaGFiCi0JZGlzcGxheU5hbWU6IHgtSm9oYWIKLQlhbGlhc2VzOiBbam9oYWIsIG1zMTM2MSwga3NjNTYwMS0xOTkyLCBrc2M1NjAxXzE5OTJdCi00Ni4gIENoYXJzZXRuYW1lOiB4LU1TOTUwLUhLU0NTCi0JZGlzcGxheU5hbWU6IHgtTVM5NTAtSEtTQ1MKLQlhbGlhc2VzOiBbTVM5NTBfSEtTQ1NdCi00Ny4gIENoYXJzZXRuYW1lOiB4LW1zd2luLTkzNgotCWRpc3BsYXlOYW1lOiB4LW1zd2luLTkzNgotCWFsaWFzZXM6IFttczkzNiwgbXNfOTM2XQotNDguICBDaGFyc2V0bmFtZTogeC13aW5kb3dzLTk0OQotCWRpc3BsYXlOYW1lOiB4LXdpbmRvd3MtOTQ5Ci0JYWxpYXNlczogW3dpbmRvd3M5NDksIG1zXzk0OSwgbXM5NDldCi00OS4gIENoYXJzZXRuYW1lOiB4LXdpbmRvd3MtOTUwCi0JZGlzcGxheU5hbWU6IHgtd2luZG93cy05NTAKLQlhbGlhc2VzOiBbd2luZG93cy05NTAsIG1zOTUwXQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvcGx1Z2luLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM5NmYzZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9wbHVnaW4ucHJvcGVydGllcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotIyBwcm9wZXJ0aWVzIGZpbGUgZm9yIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2Uub3JnCi1CdW5kbGUtTmFtZS4wID0gRW5jb2RpbmcgVGVzdHMgUGx1Zy1pbgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYxYTc3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0NyZWF0ZUNvZGVkUmVhZGVyVGVzdGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuSWxsZWdhbENoYXJzZXROYW1lRXhjZXB0aW9uOwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuTWFsZm9ybWVkSW5wdXRFeGNlcHRpb247Ci1pbXBvcnQgamF2YS51dGlsLkl0ZXJhdG9yOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBPdXRwdXRTdHJlYW07Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvZGVkUmVhZGVyQ3JlYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0vKioKLSAqIFRoaXMgY2xhc3MgaXMgaW50ZW5kZWQgdG8gYmUgZXhlY3V0ZWQgb25seSBhdCBkZXZlbG9wbWVudCB0aW1lLCBhbmQgaXQKLSAqIGNyZWF0ZXMgdGhlIGNsYXNzIHRvIEpVbml0IHRlc3QgYWxsIHRoZSBmaWxlcyBmb3VuZCBpbiB0aGUgdGVzdGZpbGVzCi0gKiBkaXJlY3RvcnkuCi0gKi8KLXB1YmxpYyBjbGFzcyBDcmVhdGVDb2RlZFJlYWRlclRlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQkvLwlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlRGlyID0gImh0bWwvIjsKLQkvLwlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlUm9vdCA9Ci0JLy8gIi9idWlsZHMvV29ya3NwYWNlcy9IZWFkV29ya3NwYWNlL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvIjsKLQkvLwlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSBmaWxlUm9vdCArIGZpbGVEaXI7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RGSUxFU19aSVBGSUxFX05BTUUgPSAidGVzdGZpbGVzLnppcCI7IC8vJE5PTi1OTFMtMSQKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRklMRV9ESVIgPSAidGVzdGZpbGVzIjsgLy8kTk9OLU5MUy0xJAotCS8vIG5lZWRzIHRvIGJlIHN0YXRpYywgc2luY2UgSlVuaXQgY3JlYXRlcyBkaWZmZXJlbmNlIGluc3RhbmNlcyBmb3IgZWFjaAotCS8vIHRlc3QKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZUZXN0UHJvamVjdEluaXRpYWxpemVkOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIjsgLy8kTk9OLU5MUy0xJAotCXN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5TZXR1cHMgPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBjdXJyZW50UGxhdGZvcm1DaGFyc2V0ID0gZ2V0UGxhdGZvcm1EZWZhdWx0KCk7Ci0JcHJpdmF0ZSBib29sZWFuIFJFQ1JFQVRFX0ZJTEVTID0gZmFsc2U7Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIENyZWF0ZUNvZGVkUmVhZGVyVGVzdGVyKCkgewotCQlzdXBlcigpOwotCQkvL1N5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50UGxhdGZvcm1DaGFyc2V0KTsKLQl9Ci0KLQkvKioKLQkgKiBAcmV0dXJuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGdldFBsYXRmb3JtRGVmYXVsdCgpIHsKLQkJU3RyaW5nIHBsYXRmb3JtRGVmYXVsdCA9IE5vbkNvbnRlbnRCYXNlZEVuY29kaW5nUnVsZXMudXNlRGVmYXVsdE5hbWVSdWxlcyhudWxsKTsKLQkJcmV0dXJuIHBsYXRmb3JtRGVmYXVsdDsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCS8vCQkJCXRyeSB7Ci0JCS8vCQkJCQluZXcgQ3JlYXRlQ29kZWRSZWFkZXJUZXN0ZXIoKS5kb0NyZWF0ZUFsbEZpbGVzKCk7Ci0JCS8vCQkJCX0gY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkvLwkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJLy8JCQkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkvLwkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJLy8JCQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgY3JlYXRlUHJvamVjdChJUHJvamVjdCBwcm9qZWN0LCBJUGF0aCBsb2NhdGlvblBhdGgsIElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlpZiAobW9uaXRvciA9PSBudWxsKSB7Ci0JCQltb25pdG9yID0gbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKTsKLQkJfQotCQltb25pdG9yLmJlZ2luVGFzaygiY3JlYXRpbmcgdGVzdCBwcm9qZWN0IiwgMTApOwotCQkvLyBjcmVhdGUgdGhlIHByb2plY3QKLQkJdHJ5IHsKLQkJCWlmICghcHJvamVjdC5leGlzdHMoKSkgewotCQkJCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzYyA9IHByb2plY3QuZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2plY3QuZ2V0TmFtZSgpKTsKLQkJCQlpZiAoUGxhdGZvcm0uZ2V0TG9jYXRpb24oKS5lcXVhbHMobG9jYXRpb25QYXRoKSkgewotCQkJCQlsb2NhdGlvblBhdGggPSBudWxsOwotCQkJCX0KLQkJCQlkZXNjLnNldExvY2F0aW9uKGxvY2F0aW9uUGF0aCk7Ci0JCQkJcHJvamVjdC5jcmVhdGUoZGVzYywgbW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCQlpZiAoIXByb2plY3QuaXNPcGVuKCkpIHsKLQkJCQlwcm9qZWN0Lm9wZW4obW9uaXRvcik7Ci0JCQkJbW9uaXRvciA9IG51bGw7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9uaXRvciAhPSBudWxsKSB7Ci0JCQkJbW9uaXRvci5kb25lKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyB2b2lkIGdldEFuZENyZWF0ZVByb2plY3QoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vVGVzdHNQbHVnaW4gdGVzdHNQbHVnaW4gPSAoVGVzdHNQbHVnaW4pCi0JCS8vIFBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZyIpOwotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFRlc3RzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gd29ya3NwYWNlLmdldFJvb3QoKTsKLQkJZlRlc3RQcm9qZWN0ID0gcm9vdC5nZXRQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJLy8gdGhpcyBmb3JtIGNyZWF0ZXMgcHJvamVjdCBhcyAibGlua2VkIiBiYWNrIHRvICdmaWxlUm9vdCcKLQkJLy9jcmVhdGVQcm9qZWN0KHRlc3RQcm9qZWN0LCBuZXcgUGF0aChmaWxlUm9vdCksIG51bGwpOwotCQljcmVhdGVQcm9qZWN0KGZUZXN0UHJvamVjdCwgbnVsbCwgbnVsbCk7Ci0JCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJYXNzZXJ0VHJ1ZShmVGVzdFByb2plY3QuZXhpc3RzKCkpOwotCQkvLwkJSUNvbnRhaW5lciB0ZXN0RmlsZXMgPSB0ZXN0UHJvamVjdC5nZXRGb2xkZXIoInRlc3RmaWxlcyIpOwotCQkvLwkJYXNzZXJ0VHJ1ZSh0ZXN0RmlsZXMuZXhpc3RzKCkpOwotCQkvLwkJSVJlc291cmNlW10gYWxsRm9sZGVycyA9IHRlc3RGaWxlcy5tZW1iZXJzKCk7Ci0JCS8vCQlhc3NlcnROb3ROdWxsKGFsbEZvbGRlcnMpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVUZXN0TWV0aG9kU291cmNlKGludCBjb3VudCwgU3RyaW5nIGZpbGVQYXRoQW5kTmFtZSwgU3RyaW5nIGRldGVjdGVkQ2hhcnNldE5hbWUsIFN0cmluZyBqYXZhQ2hhcnNldE5hbWUsIFN0cmluZyBleHBlY3RlZEV4Y2VwdGlvbikgewotCQlTdHJpbmcgamF2YUNoYXJzZXROYW1lT3JLZXkgPSBqYXZhQ2hhcnNldE5hbWU7Ci0JCWlmIChudWxsICE9IGphdmFDaGFyc2V0TmFtZU9yS2V5ICYmIGphdmFDaGFyc2V0TmFtZU9yS2V5LmVxdWFscyhjdXJyZW50UGxhdGZvcm1DaGFyc2V0KSkKLQkJCWphdmFDaGFyc2V0TmFtZU9yS2V5ID0gImV4cGVjdFBsYXRmb3JtQ2hhcnNldCI7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigicHVibGljIHZvaWQgdGVzdEZpbGUiICsgY291bnQgKyAiICgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7IiArICIgZG9UZXN0KCBcIiIgKyBqYXZhQ2hhcnNldE5hbWVPcktleSArICJcIiwgXCIiICsgZGV0ZWN0ZWRDaGFyc2V0TmFtZSArICJcIiwgIFwiIiArIGZpbGVQYXRoQW5kTmFtZSArICJcIiwgIiArIGV4cGVjdGVkRXhjZXB0aW9uICsgIik7IH0iKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoInRlc3RmaWxlcy56aXAiKTsKLQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJcHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgZGVzdGluYXRpb25Gb2xkZXIpOwotCQkJcHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWZUZXN0UHJvamVjdEluaXRpYWxpemVkID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCW5TZXR1cHMtLTsKLQkJaWYgKG5TZXR1cHMgPT0gMCkgewotCQkJaWYgKCFERUJVRykgewotCQkJCS8vCQkJCURpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOwotCQkJCS8vCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkvLwkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCS8vCQkJCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQkJLy8JCQkJCQlJUHJvamVjdCBwcm9qID0gZlRlc3RQcm9qZWN0OwotCQkJCS8vCQkJCQkJZlRlc3RQcm9qZWN0ID0gbnVsbDsKLQkJCQkvLwkJCQkJCXRyeSB7Ci0JCQkJLy8JCQkJCQkJcHJvalV0aWwuZGVsZXRlUHJvamVjdChwcm9qKTsKLQkJCQkvLwkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8JCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvLwkJCQkJCX0KLQkJCQkvLwkJCQkJfQotCQkJCS8vCQkJCX0pOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENyZWF0ZUFsbEZpbGVzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJaWYgKFJFQ1JFQVRFX0ZJTEVTKSB7Ci0JCQlMaXN0IGFsbEZpbGVzID0gVGVzdHNQbHVnaW4uZ2V0QWxsVGVzdEZpbGVzKFRFU1RfRklMRV9ESVIpOwotCQkJVVJMIG91dHB1dERpclVSTCA9IFRlc3RzUGx1Z2luLmdldEluc3RhbGxMb2NhdGlvbigpOwotCQkJRmlsZSB6aXBvdXRGaWxlID0gbmV3IEZpbGUob3V0cHV0RGlyVVJMLmdldFBhdGgoKSwgVEVTVEZJTEVTX1pJUEZJTEVfTkFNRSk7Ci0JCQlqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW0gemlwT3V0ID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0oemlwb3V0RmlsZSk7Ci0JCQlaaXBPdXRwdXRTdHJlYW0gemlwT3V0cHV0U3RyZWFtID0gbmV3IFppcE91dHB1dFN0cmVhbSh6aXBPdXQpOwotCQkJaW50IGNvdW50ID0gMTsKLQkJCWZvciAoSXRlcmF0b3IgaXRlciA9IGFsbEZpbGVzLml0ZXJhdG9yKCk7IGl0ZXIuaGFzTmV4dCgpOykgewotCQkJCUZpbGUgZmlsZSA9IChGaWxlKSBpdGVyLm5leHQoKTsKLQkJCQljcmVhdGVaaXBFbnRyeSh6aXBPdXRwdXRTdHJlYW0sIGZpbGUpOwotCQkJCUNvZGVkUmVhZGVyQ3JlYXRvciBjb2RlZFJlYWRlckNyZWF0b3IgPSBuZXcgQ29kZWRSZWFkZXJDcmVhdG9yKCk7Ci0JCQkJY29kZWRSZWFkZXJDcmVhdG9yLnNldChmaWxlLmdldE5hbWUoKSwgbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKSk7Ci0JCQkJU3RyaW5nIGRldGVjdGVkQ2hhcnNldE5hbWUgPSBudWxsOwotCQkJCVN0cmluZyBqYXZhQ2hhcnNldE5hbWUgPSBudWxsOwotCQkJCVN0cmluZyBleHBlY3RlZEV4Y2VwdGlvbiA9IG51bGw7Ci0JCQkJdHJ5IHsKLQkJCQkJLy8ganVzdCB1c2VkIGZvciBkZWJ1ZyBpbmZvLCBidXQgY2FuIHRocm93IGV4Y2VwdGlvbgotCQkJCQlqYXZhQ2hhcnNldE5hbWUgPSBjb2RlZFJlYWRlckNyZWF0b3IuZ2V0RW5jb2RpbmdNZW1lbnRvKCkuZ2V0SmF2YUNoYXJzZXROYW1lKCk7Ci0JCQkJCWRldGVjdGVkQ2hhcnNldE5hbWUgPSBjb2RlZFJlYWRlckNyZWF0b3IuZ2V0RW5jb2RpbmdNZW1lbnRvKCkuZ2V0RGV0ZWN0ZWRDaGFyc2V0TmFtZSgpOwotCQkJCX0KLQkJCQljYXRjaCAoVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbCBlKSB7Ci0JCQkJCS8vIGlnbm9yZSBmb3Igc2ltcGx5IGNyZWF0aW5nIHRlc3RzCi0JCQkJCWV4cGVjdGVkRXhjZXB0aW9uID0gZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIuY2xhc3MiOwotCQkJCX0KLQkJCQljYXRjaCAoTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24gZSkgewotCQkJCQkvLyBpZ25vcmUgZm9yIHNpbXBseSBjcmVhdGluZyB0ZXN0cwotCQkJCQlleHBlY3RlZEV4Y2VwdGlvbiA9IGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiLmNsYXNzIjsKLQkJCQl9Ci0JCQkJY2F0Y2ggKElsbGVnYWxDaGFyc2V0TmFtZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJCS8vIGlnbm9yZSBmb3Igc2ltcGx5IGNyZWF0aW5nIHRlc3RzCi0JCQkJCWV4cGVjdGVkRXhjZXB0aW9uID0gZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICIuY2xhc3MiOwotCQkJCX0KLQkJCQlTdHJpbmcgc3VicGF0aCA9IGdldFN1YlBhdGhOYW1lKGZpbGUpOwotCQkJCWNyZWF0ZVRlc3RNZXRob2RTb3VyY2UoY291bnQsIHN1YnBhdGgsIGRldGVjdGVkQ2hhcnNldE5hbWUsIGphdmFDaGFyc2V0TmFtZSwgZXhwZWN0ZWRFeGNlcHRpb24pOwotCQkJCWNvdW50Kys7Ci0JCQl9Ci0JCQl6aXBPdXRwdXRTdHJlYW0uY2xvc2UoKTsKLQkJCXppcE91dC5jbG9zZSgpOwotCQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJfQotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldFN1YlBhdGhOYW1lKEZpbGUgZmlsZSkgewotCQlTdHJpbmcgcGF0aCA9IGZpbGUuZ2V0UGF0aCgpOwotCQlpbnQgbGFzdEluZGV4ID0gcGF0aC5sYXN0SW5kZXhPZihURVNUX0ZJTEVfRElSKTsKLQkJU3RyaW5nIHN1YnBhdGggPSBwYXRoLnN1YnN0cmluZyhsYXN0SW5kZXgpOwotCQlzdWJwYXRoID0gc3VicGF0aC5yZXBsYWNlKCdcXCcsICcvJyk7Ci0JCXJldHVybiBzdWJwYXRoOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB6aXBPdXRwdXRTdHJlYW0KLQkgKiBAcGFyYW0gZWxlbWVudAotCSAqLwotCXByaXZhdGUgdm9pZCBjcmVhdGVaaXBFbnRyeShaaXBPdXRwdXRTdHJlYW0gemlwT3V0cHV0U3RyZWFtLCBGaWxlIGZpbGUpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBzdWJQYXRoTmFtZSA9IGdldFN1YlBhdGhOYW1lKGZpbGUpOwotCQlaaXBFbnRyeSB6aXBFbnRyeSA9IG5ldyBaaXBFbnRyeShzdWJQYXRoTmFtZSk7Ci0JCXppcE91dHB1dFN0cmVhbS5wdXROZXh0RW50cnkoemlwRW50cnkpOwotCQlJbnB1dFN0cmVhbSBpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCWludCBuUmVhZCA9IDA7Ci0JCWJ5dGVbXSBidWZmZXIgPSBuZXcgYnl0ZVsxMDI0ICogOF07Ci0JCXdoaWxlIChuUmVhZCAhPSAtMSkgewotCQkJblJlYWQgPSBpbnB1dFN0cmVhbS5yZWFkKGJ1ZmZlcik7Ci0JCQlpZiAoblJlYWQgPiAwKSB7Ci0JCQkJemlwT3V0cHV0U3RyZWFtLndyaXRlKGJ1ZmZlciwgMCwgblJlYWQpOwotCQkJfQotCQl9Ci0JCXppcE91dHB1dFN0cmVhbS5mbHVzaCgpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0VuY29kaW5nVGVzdFN1aXRlLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0VuY29kaW5nVGVzdFN1aXRlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ODU2ZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9FbmNvZGluZ1Rlc3RTdWl0ZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJvcGVydGllcy5UZXN0Q29tbW9uTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzLlRlc3RPdmVycmlkZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb2RlZFJlYWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQuVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucmVhZC5UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkLlRlc3RDb250ZW50VHlwZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy53cml0ZS5UZXN0Q29kZWRXcml0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnhtbC5YTUxFbmNvZGluZ1Rlc3RzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcueG1sLlhNTEhlYWRUb2tlbml6ZXJUZXN0ZXI7Ci0KLQotcHVibGljIGNsYXNzIEVuY29kaW5nVGVzdFN1aXRlIGV4dGVuZHMgVGVzdFN1aXRlIHsKLQotCS8vIEZJWE1FOiBjb21tZW50ZWQgb3V0IGxhbmcuIHNwZWMuIHRlc3RzLCB1bnRpbCBhbGwgbWlncmF0ZWQgdG8gb3JnLmVjbGlwc2UgCi0JcHJpdmF0ZSBzdGF0aWMgQ2xhc3NbXSBjbGFzc2VzID0gbmV3IENsYXNzW117VGVzdE92ZXJyaWRlcy5jbGFzcywgVGVzdENvZGVkUmVhZGVyLmNsYXNzLCBUZXN0Q29kZWRXcml0ZS5jbGFzcywgWE1MRW5jb2RpbmdUZXN0cy5jbGFzcywgWE1MSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmNsYXNzLCBUZXN0Q29kZWRSZWFkZXJPbkdlbm5lZEZpbGVzLmNsYXNzLCBUZXN0Q29udGVudERlc2NyaXB0aW9uLmNsYXNzLCBUZXN0Q29udGVudFR5cGVzLmNsYXNzLCBUZXN0Q29tbW9uTmFtZXMuY2xhc3MsIFRlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTC5jbGFzc307Ci0JLy9wcml2YXRlIHN0YXRpYyBDbGFzc1tdIGNsYXNzZXMgPSBuZXcgQ2xhc3NbXXtUZXN0T3ZlcnJpZGVzLmNsYXNzLCBDU1NFbmNvZGluZ1Rlc3Rlci5jbGFzcywgQ1NTSGVhZFRva2VuaXplclRlc3Rlci5jbGFzcywgSFRNTEVuY29kaW5nVGVzdHMuY2xhc3MsIEhUTUxIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBKU1BFbmNvZGluZ1Rlc3RzLmNsYXNzLCBKU1BIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBUZXN0Q29kZWRSZWFkZXIuY2xhc3MsIFRlc3RDb2RlZFdyaXRlLmNsYXNzLCBYTUxFbmNvZGluZ1Rlc3RzLmNsYXNzLCBYTUxIZWFkVG9rZW5pemVyVGVzdGVyLmNsYXNzLCBYTUxNYWxmb3JtZWRJbnB1dFRlc3RzLmNsYXNzLCBUZXN0Q29udGVudFR5cGVEZXNjcmlwdGlvbk9uR2VubmVkRmlsZXMuY2xhc3MsIFRlc3RDb2RlZFJlYWRlck9uR2VubmVkRmlsZXMuY2xhc3MsIFRlc3RDb250ZW50VHlwZURldGVjdGlvbi5jbGFzcywgVGVzdENvbnRlbnREZXNjcmlwdGlvbi5jbGFzcywgVGVzdENvbnRlbnRUeXBlcy5jbGFzcywgVGVzdENvbW1vbk5hbWVzLmNsYXNzfTsKLQlwdWJsaWMgRW5jb2RpbmdUZXN0U3VpdGUoKSB7Ci0JCXN1cGVyKCJFbmNvZGluZyBUZXN0IFN1aXRlIik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewotCQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKGNsYXNzZXNbaV0sIGNsYXNzZXNbaV0uZ2V0TmFtZSgpKSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGhlQ2xhc3MKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcywgU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIodGhlQ2xhc3MsIG5hbWUpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSB0aGVDbGFzcwotCSAqLwotCXB1YmxpYyBFbmNvZGluZ1Rlc3RTdWl0ZShDbGFzcyB0aGVDbGFzcykgewotCQlzdXBlcih0aGVDbGFzcyk7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIG5hbWUKLQkgKi8KLQlwdWJsaWMgRW5jb2RpbmdUZXN0U3VpdGUoU3RyaW5nIG5hbWUpIHsKLQkJc3VwZXIobmFtZSk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkgewotCQlyZXR1cm4gbmV3IEVuY29kaW5nVGVzdFN1aXRlKCk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvRmlsZVV0aWwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvRmlsZVV0aWwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFmYzRlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0ZpbGVVdGlsLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci0KLS8qKgotICogQGF1dGhvciBkYXZpZHcKLSAqIAotICogVG8gY2hhbmdlIHRoaXMgZ2VuZXJhdGVkIGNvbW1lbnQgZWRpdCB0aGUgdGVtcGxhdGUgdmFyaWFibGUgInR5cGVjb21tZW50IjoKLSAqIFdpbmRvdz5QcmVmZXJlbmNlcz5KYXZhPlRlbXBsYXRlcy4gVG8gZW5hYmxlIGFuZCBkaXNhYmxlIHRoZSBjcmVhdGlvbiBvZgotICogdHlwZSBjb21tZW50cyBnbyB0byBXaW5kb3c+UHJlZmVyZW5jZXM+SmF2YT5Db2RlIEdlbmVyYXRpb24uCi0gKi8KLWNsYXNzIEZpbGVVdGlsIHsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmcgY3VycmVudFdvcmtzcGFjZSA9ICJkZXYwNzI1IjsKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIHByaW50ZWRPbmNlID0gZmFsc2U7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZkxpbmVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImxpbmUuc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZlBhdGhTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInBhdGguc2VwYXJhdG9yIik7Ci0JcHVibGljIHN0YXRpYyBTdHJpbmcgZkZpbGVTZXBhcmF0b3IgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuc2VwYXJhdG9yIik7Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgbWFrZUZpbGVGb3IoU3RyaW5nIGRpcmVjdG9yeSwgU3RyaW5nIGZpbGVuYW1lLCBTdHJpbmcgdGVzdFJlc3VsdHNEaXJlY3RvcnlQcmVmaXgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBpbnN0YWxsUGF0aCA9ICIvYnVpbGRzL1dvcmtzcGFjZXMvIiArIGN1cnJlbnRXb3Jrc3BhY2UgKyAiL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvIjsKLQkJVVJMIHVybCA9IG5ldyBVUkwoImZpbGU6Ly8iICsgaW5zdGFsbFBhdGgpOwotCQlTdHJpbmcgdG90YWxEaXJlY3RvcnkgPSBpbnN0YWxsUGF0aCArIGRpcmVjdG9yeTsKLQkJU3RyaW5nIHRvdGFsUGF0aCA9IHRvdGFsRGlyZWN0b3J5ICsgIi8iICsgZmlsZW5hbWU7Ci0JCVVSTCB0b3RhbFVSTCA9IG5ldyBVUkwodXJsLCB0b3RhbFBhdGgpOwotCQlVUkwgZmluYWx1cmwgPSBGaWxlTG9jYXRvci50b0ZpbGVVUkwodG90YWxVUkwpOwotCQlTdHJpbmcgZmluYWxGaWxlID0gZmluYWx1cmwuZ2V0RmlsZSgpOwotCQlGaWxlIGZpbGUgPSBuZXcgRmlsZShmaW5hbEZpbGUpOwotCQlTdHJpbmcgZmluYWxQYXRoID0gZmlsZS5nZXRQYXJlbnQoKTsKLQkJRmlsZSBkaXIgPSBuZXcgRmlsZShmaW5hbFBhdGgpOwotCQlpZiAoIXByaW50ZWRPbmNlKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oIk91dHB1dCB3cml0dGVuIHRvICIgKyBkaXIuZ2V0QWJzb2x1dGVQYXRoKCkpOwotCQkJcHJpbnRlZE9uY2UgPSB0cnVlOwotCQl9Ci0KLQkJaWYgKCFkaXIuZXhpc3RzKCkpIHsKLQkJCWRpci5ta2RpcnMoKTsKLQkJfQotCQlyZXR1cm4gZmlsZTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0dlbmVyYXRlRmlsZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVGaWxlcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjdmNGU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvR2VuZXJhdGVGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLQotcHVibGljIGNsYXNzIEdlbmVyYXRlRmlsZXMgewotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0TWFpbkRpcmVjdG9yeUJhc2VkT25WTU5hbWUoKSB7Ci0JCVN0cmluZyBtYWluRGlyZWN0b3J5ID0gInRlc3RmaWxlcy9nZW5lZEZpbGVzLSIgKyBnZXRKYXZhVmVyc2lvbigpOwotCQlyZXR1cm4gbWFpbkRpcmVjdG9yeTsKLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZ2V0SmF2YVZlcnNpb24oKSB7Ci0JCVN0cmluZyBuYW1lID0gbnVsbDsgLy9TeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEuZnVsbHZlcnNpb24iKTsKLQkJaWYgKG5hbWUgPT0gbnVsbCkgewotCQkJbmFtZSA9IFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS52ZXJzaW9uIikgKyAiICgiICsgU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLnJ1bnRpbWUudmVyc2lvbiIpICsgIikiOwotCQl9Ci0JCXJldHVybiBuYW1lOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9HZW5lcmF0ZVhNTEZpbGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0dlbmVyYXRlWE1MRmlsZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYxZjk2My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0dlbmVyYXRlWE1MRmlsZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwOSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmc7Ci0KLWltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uQnl0ZUFycmF5T3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlV3JpdGVyOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5PdXRwdXRTdHJlYW1Xcml0ZXI7Ci1pbXBvcnQgamF2YS5pby5QcmludFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLlVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5Xcml0ZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldEVuY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTWFwOwotaW1wb3J0IGphdmEudXRpbC5TZXQ7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotCi0vKioKLSAqIFRoZSBwdXJwb3NlIGFuZCBsb2dpYyBvZiB0aGlzIGNsYXNzIGlzIHRvIGNyZWF0ZSBzbWFsbCAiWE1MIGZpbGVzIiBvZgotICogdmFyaW91cywga25vd24gZW5jb2RpbmdzLCB3cml0ZSB0aGVtIHRvIGZpbGVzLCBhbmQgaW4gbGF0ZXIgdGVzdHMsIGJlIHN1cmUKLSAqIGFwcHJvcHJpYXRlIGVuY29kaW5nIGNhbiBiZSBkZXRlY3RlZCwgYW5kIHJlYWQgaW4gYW5kIGludGFjdCBjaGFyYWN0ZXJzLgotICovCi1wdWJsaWMgY2xhc3MgR2VuZXJhdGVYTUxGaWxlcyBleHRlbmRzIEdlbmVyYXRlRmlsZXMgewotCXByaXZhdGUgU3RyaW5nIExGID0gIlxuIjsKLQlwcml2YXRlIFN0cmluZyBDUiA9ICJcciI7Ci0JcHJpdmF0ZSBTdHJpbmcgQ1JMRiA9IENSICsgTEY7Ci0JLy8gZGlmZmVyZW50IHRleHQgc3RyaW5ncyBmb3IgY29tcGFyaXNvbnMKLQlwcml2YXRlIFN0cmluZyB0ZXh0VVNfQVNDSUlfTEYgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcbjEyMzQ1Njc4OTBcbkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjsKLQlwcml2YXRlIFN0cmluZyB0ZXh0VVNfQVNDSUlfQ1JMRiA9ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elxyXG4xMjM0NTY3ODkwXHJcbkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjsKLQlwcml2YXRlIGJvb2xlYW4gREVCVUcgPSB0cnVlOwotCXByaXZhdGUgYm9vbGVhbiBERUJVR0NSTEYgPSBmYWxzZTsKLQlwcml2YXRlIGJvb2xlYW4gREVCVUdJTkZPID0gdHJ1ZTsKLQotCi0JcHVibGljIEdlbmVyYXRlWE1MRmlsZXMoKSB7Ci0JCXN1cGVyKCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCQkvL2p1bml0LnRleHR1aS5UZXN0UnVubmVyLnJ1bihHZW5lcmF0ZVhNTEZpbGVzLmNsYXNzKTsKLQkJR2VuZXJhdGVYTUxGaWxlcyB0aGlzQXBwID0gbmV3IEdlbmVyYXRlWE1MRmlsZXMoKTsKLQkJdHJ5IHsKLQkJCS8vdGhpc0FwcC5nZW5lcmF0ZU9yaWdpbmFsRmlsZXMoKTsKLQkJCXRoaXNBcHAuZ2VuZXJhdGVBbGxGaWxlc0ZvckN1cnJlbnRWTSgpOwotCQl9Ci0JCWNhdGNoIChJT0V4Y2VwdGlvbiBlKSB7Ci0KLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZ2VuZXJhdGVBbGxGaWxlc0ZvckN1cnJlbnRWTSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCU1hcCBhbGxDaGFyc2V0TWFwID0gQ2hhcnNldC5hdmFpbGFibGVDaGFyc2V0cygpOwotCQlTZXQgYWxsS2V5cyA9IGFsbENoYXJzZXRNYXAua2V5U2V0KCk7Ci0JCU9iamVjdFtdIGFsbGNoYXJzZXRzID0gYWxsS2V5cy50b0FycmF5KCk7Ci0JCVN0cmluZ1tdIGFsbGNoYXJzZXROYW1lcyA9IG5ldyBTdHJpbmdbYWxsY2hhcnNldHMubGVuZ3RoXTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxjaGFyc2V0cy5sZW5ndGg7IGkrKykgewotCQkJYWxsY2hhcnNldE5hbWVzW2ldID0gYWxsY2hhcnNldHNbaV0udG9TdHJpbmcoKTsKLQotCQl9Ci0JCS8vY3JlYXRlRmlsZXMoYWxsY2hhcnNldE5hbWVzLCBmYWxzZSk7Ci0JCWNyZWF0ZUZpbGVzKGFsbGNoYXJzZXROYW1lcywgdHJ1ZSk7Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlRmlsZXMoU3RyaW5nW10gY2hhcnNldG5hbWVzLCBib29sZWFuIHVzZUNSTEYpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSBudWxsOwotCQlXcml0ZXIgb3V0ID0gbnVsbDsKLQkJU3RyaW5nIG1haW5EaXJlY3RvcnkgPSBnZXRNYWluRGlyZWN0b3J5QmFzZWRPblZNTmFtZUFuZEZpbGVFeHRlbnNpb24oKTsKLQkJTGlzdCBjaGFyc2V0RmlsZXNXcml0dGVuID0gbmV3IEFycmF5TGlzdCgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoYXJzZXRuYW1lcy5sZW5ndGg7IGkrKykgewotCQkJdHJ5IHsKLQotCi0JCQkJY2hhcnNldE5hbWUgPSBjaGFyc2V0bmFtZXNbaV07Ci0KLQkJCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoY2hhcnNldE5hbWUpOwotCQkJCUNoYXJzZXRFbmNvZGVyIGNoYXJzZXRFbmNvZGVyID0gY2hhcnNldC5uZXdFbmNvZGVyKCk7Ci0JCQkJY2hhcnNldEVuY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQkJCWNoYXJzZXRFbmNvZGVyLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCi0JCQkJU3RyaW5nIGhlYWRlciA9IGdldEhlYWRlclN0YXJ0KCkgKyBjaGFyc2V0TmFtZSArIGdldEhlYWRlckVuZCgpOwotCQkJCVN0cmluZyBmdWxsdGV4dCA9IG51bGw7Ci0JCQkJaWYgKHVzZUNSTEYpIHsKLQkJCQkJZnVsbHRleHQgPSBoZWFkZXIgKyB0ZXh0VVNfQVNDSUlfQ1JMRjsKLQkJCQl9Ci0JCQkJZWxzZSB7Ci0JCQkJCWZ1bGx0ZXh0ID0gaGVhZGVyICsgdGV4dFVTX0FTQ0lJX0xGOwotCQkJCX0KLQotCQkJCWlmICghaXNFYmNpZGljKGNoYXJzZXROYW1lLCBjaGFyc2V0RW5jb2RlcikpIHsKLQkJCQkJaWYgKGNoYXJzZXRFbmNvZGVyLmNhbkVuY29kZShmdWxsdGV4dCkpIHsKLQkJCQkJCS8vCQkJCQkJaWYgKGNhbkVuY29kZUNSTEYoY2hhcnNldE5hbWUsIGNoYXJzZXRFbmNvZGVyKQotCQkJCQkJLy8gJiYKLQkJCQkJCS8vIGNhbkVuY29kZVNpbXBsZVN0cmluZyhjaGFyc2V0TmFtZSwKLQkJCQkJCS8vIGNoYXJzZXRFbmNvZGVyLCAiPD8iKSAmJgotCQkJCQkJLy8gY2hhcnNldEVuY29kZXIuY2FuRW5jb2RlKGZ1bGx0ZXh0KSkgewotCQkJCQkJU3RyaW5nIG91dHB1dGZpbGVuYW1lID0gInRlc3QtIiArIGNoYXJzZXROYW1lICsgIi54bWwiOwotCQkJCQkJRmlsZSBvdXRGaWxlID0gRmlsZVV0aWwubWFrZUZpbGVGb3IobWFpbkRpcmVjdG9yeSwgb3V0cHV0ZmlsZW5hbWUsIG51bGwpOwotCQkJCQkJLy9TeXN0ZW0ub3V0LnByaW50bG4ob3V0RmlsZS5nZXRBYnNvbHV0ZVBhdGgoKSk7Ci0JCQkJCQlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gbmV3IEZpbGVPdXRwdXRTdHJlYW0ob3V0RmlsZSk7Ci0JCQkJCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gYnl0ZXNvdXQgPSBuZXcgQnl0ZUFycmF5T3V0cHV0U3RyZWFtKCk7Ci0KLQkJCQkJCVdyaXRlciBmaWxlV3JpdGVyID0gbmV3IE91dHB1dFN0cmVhbVdyaXRlcihvdXRwdXRTdHJlYW0sIGNoYXJzZXRFbmNvZGVyKTsKLQkJCQkJCS8vIHRoaXMgYnl0ZSB3cml0ZXIgaXMgY3JlYXRlZCBqdXN0IHRvIGJlIGFibGUgdG8KLQkJCQkJCS8vIGNvdW50IHByZWNpc2UgYnl0ZXMuCi0JCQkJCQlXcml0ZXIgYnl0ZVdyaXRlciA9IG5ldyBPdXRwdXRTdHJlYW1Xcml0ZXIoYnl0ZXNvdXQsIGNoYXJzZXRFbmNvZGVyKTsKLQotCQkJCQkJc3VwcGx5Qk9NcyhjaGFyc2V0TmFtZSwgb3V0cHV0U3RyZWFtLCBieXRlc291dCk7Ci0KLQkJCQkJCW91dCA9IG5ldyBCdWZmZXJlZFdyaXRlcihmaWxlV3JpdGVyKTsKLQotCi0JCQkJCQlvdXQud3JpdGUoZnVsbHRleHQpOwotCQkJCQkJYnl0ZVdyaXRlci53cml0ZShmdWxsdGV4dCk7Ci0JCQkJCQlvdXQuY2xvc2UoKTsKLQkJCQkJCWJ5dGVXcml0ZXIuZmx1c2goKTsKLQkJCQkJCS8vIGlmIHdlIG1hZGUgaXMgdGhpcyBmYXIsIHdpdGggbm8gZXhjZXB0aW9ucywKLQkJCQkJCS8vIGV0Yy4sCi0JCQkJCQkvLyB0aGVuCi0JCQkJCQkvLyBtdXN0IGhhdmUgYmVlbgotCQkJCQkJLy8gcmVhbGx5IHdyaXR0ZW4uCi0JCQkJCQlTdHJpbmcgd3JpdHRlblJlY29yZCA9IGNoYXJzZXROYW1lOwotCQkJCQkJY2hhcnNldEZpbGVzV3JpdHRlbi5hZGQod3JpdHRlblJlY29yZCk7Ci0JCQkJCQlpZiAoREVCVUcpIHsKLQkJCQkJCQlwcmludERlYnVnSW5mbyh1c2VDUkxGLCBoZWFkZXIsIG91dHB1dGZpbGVuYW1lLCBieXRlc291dCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJZWxzZSB7Ci0JCQkJCQlpZiAoREVCVUdJTkZPKSB7Ci0JCQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIgKioqIGNvdWxkIG5vdCBjb252ZXJ0IHNhbXBsZSBhc2NpaSB0ZXh0IGZvciAiICsgY2hhcnNldE5hbWUpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCi0JCQljYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkJCWlmIChERUJVR0lORk8pIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIgKioqKiogY291bGQgbm90IGdlbmVyYXRlIGZvciAiICsgY2hhcnNldE5hbWUpOwotCQkJCQlTdHJpbmcgbXNnID0gZS5nZXRNZXNzYWdlKCk7Ci0JCQkJCWlmIChtc2cgPT0gbnVsbCkKLQkJCQkJCW1zZyA9ICIiOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgICBkdWUgdG8gIiArIGUuZ2V0Q2xhc3MoKS5nZXROYW1lKCkgKyAiICAiICsgbXNnKTsKLQkJCQl9Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQlpZiAoREVCVUdJTkZPKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICoqKioqIGNvdWxkIG5vdCBnZW5lcmF0ZSBmb3IgIiArIGNoYXJzZXROYW1lKTsKLQkJCQkJU3RyaW5nIG1zZyA9IGUuZ2V0TWVzc2FnZSgpOwotCQkJCQlpZiAobXNnID09IG51bGwpCi0JCQkJCQltc2cgPSAiIjsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIgICAgICAgICAgZHVlIHRvICIgKyBlLmdldENsYXNzKCkuZ2V0TmFtZSgpICsgIiAgIiArIG1zZyk7Ci0JCQkJfQotCQkJfQotCQkJZmluYWxseSB7Ci0JCQkJaWYgKG91dCAhPSBudWxsKSB7Ci0JCQkJCW91dC5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCi0KLQkJLy8gbm93IGNyZWF0ZSBmaWxlIHRoYXQgc3VtbWFyaXplcyB3aGF0IHdhcyB3cml0dGVuCi0JCS8vIHN1aXRhYmxlIHRvIHBhc3RlIGFzIG1ldGhvZCBpbiB0ZXN0IGNsYXNzCi0JCUZpbGUgb3V0RmlsZSA9IEZpbGVVdGlsLm1ha2VGaWxlRm9yKG1haW5EaXJlY3RvcnksICJ0ZXN0TWV0aG9kcy50ZXh0IiwgbnVsbCk7Ci0JCUZpbGVXcml0ZXIgb3V0cHJvcGVydGllcyA9IG5ldyBGaWxlV3JpdGVyKG91dEZpbGUpOwotCQlvdXRwcm9wZXJ0aWVzLndyaXRlKGNoYXJzZXRGaWxlc1dyaXR0ZW4uc2l6ZSgpICsgQ1JMRik7Ci0JCUl0ZXJhdG9yIGl0ZW1zID0gY2hhcnNldEZpbGVzV3JpdHRlbi5pdGVyYXRvcigpOwotCQlpbnQgbiA9IDA7Ci0JCXdoaWxlIChpdGVtcy5oYXNOZXh0KCkpIHsKLQkJCVN0cmluZyBpdGVtQ3JlYXRlZCA9IChTdHJpbmcpIGl0ZW1zLm5leHQoKTsKLQkJCVN0cmluZyB0ZXN0TWV0aG9kID0gY3JlYXRlTWV0aG9kKG4rKywgaXRlbUNyZWF0ZWQpOwotCQkJb3V0cHJvcGVydGllcy53cml0ZSh0ZXN0TWV0aG9kICsgQ1JMRik7Ci0JCX0KLQkJb3V0cHJvcGVydGllcy5jbG9zZSgpOwotCi0JfQotCi0JLyoqCi0JICogSSB0aG91Z2h0IHRoaXMgdXNlZCB0byBiZSBhdXRvbWF0aWMsIGJ1dCBkb2Vzbid0IHNlZW0gdG8gYmUgbm93PyEKLQkgKi8KLQlwcml2YXRlIHZvaWQgc3VwcGx5Qk9NcyhTdHJpbmcgY2hhcnNldE5hbWUsIE91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0sIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBieXRlc291dCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJYnl0ZVtdIG51bGxCeXRlcyA9IG5ldyBieXRlW117MHgwMCwgMHgwMH07Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlVURi0xNiIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2TEUpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2TEUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlVURi0xNkxFIikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCX0KLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiWC1Vbmljb2RlTGl0dGxlIikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCX0KLQkJaWYgKGNoYXJzZXROYW1lLmVxdWFscygiVVRGLTE2QkUiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkJFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkJFKTsKLQkJfQotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJYLVVuaWNvZGVCaWciKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkJFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkJFKTsKLQkJfQotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJVVEYtMzIiKSkgewotCQkJb3V0cHV0U3RyZWFtLndyaXRlKG51bGxCeXRlcyk7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2TEUpOwotCQkJYnl0ZXNvdXQud3JpdGUobnVsbEJ5dGVzKTsKLQkJCWJ5dGVzb3V0LndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkxFKTsKLQkJfQotCQlpZiAoY2hhcnNldE5hbWUuZXF1YWxzKCJVVEYtMzJMRSIpKSB7Ci0JCQlvdXRwdXRTdHJlYW0ud3JpdGUobnVsbEJ5dGVzKTsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZMRSk7Ci0JCQlieXRlc291dC53cml0ZShudWxsQnl0ZXMpOwotCQkJYnl0ZXNvdXQud3JpdGUoSUNvbnRlbnREZXNjcmlwdGlvbi5CT01fVVRGXzE2TEUpOwotCQl9Ci0JCWlmIChjaGFyc2V0TmFtZS5lcXVhbHMoIlVURi0zMkJFIikpIHsKLQkJCW91dHB1dFN0cmVhbS53cml0ZShudWxsQnl0ZXMpOwotCQkJb3V0cHV0U3RyZWFtLndyaXRlKElDb250ZW50RGVzY3JpcHRpb24uQk9NX1VURl8xNkJFKTsKLQkJCWJ5dGVzb3V0LndyaXRlKG51bGxCeXRlcyk7Ci0JCQlieXRlc291dC53cml0ZShJQ29udGVudERlc2NyaXB0aW9uLkJPTV9VVEZfMTZCRSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gaQotCSAqIEBwYXJhbSBpdGVtQ3JlYXRlZAotCSAqLwotCXByaXZhdGUgU3RyaW5nIGNyZWF0ZU1ldGhvZChpbnQgaSwgU3RyaW5nIGl0ZW1DcmVhdGVkKSB7Ci0JCVN0cmluZyB0ZW1wbGF0ZSA9ICIJcHVibGljIHZvaWQgdGVzdEZpbGUiICsgaSArICIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHtcclxuIiArICIJCVN0cmluZyBjaGFyc2V0TmFtZSA9IFwiIiArIGl0ZW1DcmVhdGVkICsgIlwiO1xyXG4iICsgIgkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTtcclxuIiArICIJfSI7Ci0JCXJldHVybiB0ZW1wbGF0ZTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgcHJpbnREZWJ1Z0luZm8oYm9vbGVhbiB1c2VDUkxGLCBTdHJpbmcgaGVhZGVyLCBTdHJpbmcgb3V0cHV0ZmlsZW5hbWUsIEJ5dGVBcnJheU91dHB1dFN0cmVhbSBieXRlc291dCkgewotCQlieXRlW10gYnl0ZXMgPSBieXRlc291dC50b0J5dGVBcnJheSgpOwotCQlpbnQgbkJ5dGVzID0gYnl0ZXMubGVuZ3RoOwotCQlpbnQgbkNoYXJzID0gMDsKLQkJaWYgKHVzZUNSTEYpIHsKLQkJCW5DaGFycyA9IGhlYWRlci5sZW5ndGgoKSArIHRleHRVU19BU0NJSV9DUkxGLmxlbmd0aCgpOwotCQl9Ci0JCWVsc2UgewotCQkJbkNoYXJzID0gaGVhZGVyLmxlbmd0aCgpICsgdGV4dFVTX0FTQ0lJX0xGLmxlbmd0aCgpOwotCQl9Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJXcm90ZSAiICsgbkNoYXJzICsgIiBjaGFyYWN0ZXJzIGFuZCAiICsgbkJ5dGVzICsgIiBieXRlcyB0byAiICsgb3V0cHV0ZmlsZW5hbWUpOwotCX0KLQotCS8vIFRPRE86IG5ldmVyIHVzZWQKLQkgYm9vbGVhbiBjYW5FbmNvZGVTaW1wbGVTdHJpbmcoU3RyaW5nIGNoYXJzZXROYW1lLCBDaGFyc2V0RW5jb2RlciBjaGFyc2V0RW5jb2NkZXIsIFN0cmluZyBzaW1wbGVTdHJpbmcpIHsKLQkJLy8gdGhpcyBtZXRob2QgYWRkZWQgc2luY2Ugc29tZSBlbmNvZGVycyBkb24ndCByZXBvcnQgdGhhdCB0aGV5IGNhbid0Ci0JCS8vIGVuY29kZSBzb21ldGhpbmcsIGJ1dCB0aGV5IG9idmlvdXNseQotCQkvLyBjYW4ndCwgYXQgbGVhc3QgaW4gdGhlIG5vcm1hbCBtZWFuaW5nIG9mIHRoZSB3b3JkLgotCQkvLyBUaGlzIHNlZW1zIHRvIG1vc3RseSBhcHBseSB0byBzb21lIElCTSB2YXJpZXRpZXMgd2hlcmUsIGFwcGFyZW50bHksCi0JCS8vIHRoZSBpbnB1dCBjYW4ndCBiZSBpbnRlcnByZXRlZCBhdCBhbGwgd2l0aG91dCBrbm93aW5nIGVuY29kaW5nCi0JCS8vICh0aGF0IGlzCi0JCS8vIGNvdWxkIG5vdCBiZSB1c2VkIGZvciBjb250ZW50IGJhc2VkIGVuY29kaW5nKS4KLQkJYm9vbGVhbiByZXN1bHQgPSBmYWxzZTsKLQotCQlTdHJpbmcgbmV3QXNjaWlTdHJpbmcgPSBudWxsOwotCQlieXRlW10gdHJhbnNsYXRlZEJ5dGVzID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXRyYW5zbGF0ZWRCeXRlcyA9IHNpbXBsZVN0cmluZy5nZXRCeXRlcyhjaGFyc2V0TmFtZSk7Ci0JCQluZXdBc2NpaVN0cmluZyA9IG5ldyBTdHJpbmcodHJhbnNsYXRlZEJ5dGVzLCAiYXNjaWkiKTsKLQkJfQotCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlLCBzaW5jZSBjaGVja2VkIGFscmVhZHkKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXN1bHQgPSBzaW1wbGVTdHJpbmcuZXF1YWxzKG5ld0FzY2lpU3RyaW5nKTsKLQkJaWYgKCFyZXN1bHQpIHsKLQkJCWlmIChjaGFyc2V0RW5jb2NkZXIubWF4Qnl0ZXNQZXJDaGFyKCkgIT0gMSkgewotCQkJCS8vIGRvbid0IGNoZWNrIG11bGl0Ynl0ZSBlbmNvZGVycywganVzdCBhc3N1bWUgdHJ1ZSAoZm9yIG5vdykuCi0JCQkJcmVzdWx0ID0gdHJ1ZTsKLQkJCQlpZiAoY2hhcnNldEVuY29jZGVyLm1heEJ5dGVzUGVyQ2hhcigpID09IDQpIHsKLQkJCQkJLy9leGNlcHQsIGxldCdzIGp1c3QgZXhjbHVkZSBmb3VyIGJ5dGUgc3RyZWFtcywgZm9yIG5vdy4KLQkJCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCQkJCWlmIChjaGFyc2V0RW5jb2NkZXIuYXZlcmFnZUJ5dGVzUGVyQ2hhcigpID09IDIpIHsKLQkJCQkJCS8vIGV4Y2VwdCwgZm9yIHNvbWUgcmVhc29uIFVURiBoYXMgbWF4IGJ5dGVzIG9mIDQKLQkJCQkJCS8vIChhdmVyYWdlIGJ5dGVzIG9mIDIpLgotCQkJCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIEEgdmVyeSBoZXVyaXN0aWMgbWV0aG9kLiBTaG91bGQgaGF2ZSB0YWJsZSwgc29tZWRheS4KLQkgKi8KLQlwcml2YXRlIGJvb2xlYW4gaXNFYmNpZGljKFN0cmluZyBjaGFyc2V0TmFtZSwgQ2hhcnNldEVuY29kZXIgY2hhcnNldEVuY29jZGVyKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCVN0cmluZyBzaW1wbGVTdHJpbmcgPSAiPD8iOwotCQlTdHJpbmcgbmV3QXNjaWlTdHJpbmcgPSBudWxsOwotCQlieXRlW10gdHJhbnNsYXRlZEJ5dGVzID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXRyYW5zbGF0ZWRCeXRlcyA9IHNpbXBsZVN0cmluZy5nZXRCeXRlcyhjaGFyc2V0TmFtZSk7Ci0JCQluZXdBc2NpaVN0cmluZyA9IG5ldyBTdHJpbmcodHJhbnNsYXRlZEJ5dGVzLCAiYXNjaWkiKTsKLQkJfQotCQljYXRjaCAoVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBpbXBvc3NpYmxlLCBzaW5jZSBjaGVja2VkIGFscmVhZHkKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQkvLyBleHBlcmltZW50aW5nL2RlYnVnZ2luZyBzaG93ZWQgdGhlIGtub3duIGViY2lkaWMgb25jZXMgYWx3YXlzCi0JCS8vICJtaXMiIHRyYW5sYXRlZCB0byBjaGFyYWN0ZXJzIEwgYW5kIG8uCi0JCXJlc3VsdCA9ICJMbyIuZXF1YWxzKG5ld0FzY2lpU3RyaW5nKTsKLQkJaWYgKHJlc3VsdCkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGNoYXJzZXROYW1lICsgIiBhc3N1bWVkIHRvIGJlIEVkY2lkaWMiKTsKLQkJfQotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBjaGFyc2V0Ci0JICovCi0JIGJvb2xlYW4gY2FuRW5jb2RlQ1JMRihTdHJpbmcgY2hhcnNldE5hbWUsIENoYXJzZXRFbmNvZGVyIGNoYXJzZXRFbmNvZGVyKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gdHJ1ZTsKLQkJLy9TdHJpbmcgY2hhcnNldENvbm9uaWNhbE5hbWUgPSBjaGFyc2V0RW5jb2Rlci5jaGFyc2V0KCkubmFtZSgpOwotCQlpZiAoIWNoYXJzZXRFbmNvZGVyLmNhbkVuY29kZShMRikpIHsKLQkJCWlmIChERUJVR0NSTEYpIHsKLQkJCQlTdHJpbmcgc3RyaW5nTmFtZSA9ICJMRiI7Ci0JCQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBMRjsKLQkJCQlleHBsb3JlQ29udmVyc2lvbihjaGFyc2V0TmFtZSwgc3RyaW5nTmFtZSwgdGVzdFN0cmluZyk7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJjYW4gbm90IGVuY29kZSBMRiBmb3IgIiArIGNoYXJzZXRFbmNvZGVyLmNoYXJzZXQoKS5uYW1lKCkpOwotCQkJfQotCQkJcmVzdWx0ID0gZmFsc2U7Ci0JCX0KLQkJaWYgKCFjaGFyc2V0RW5jb2Rlci5jYW5FbmNvZGUoQ1IpKSB7Ci0JCQlpZiAoREVCVUdDUkxGKSB7Ci0JCQkJU3RyaW5nIHN0cmluZ05hbWUgPSAiQ1IiOwotCQkJCVN0cmluZyB0ZXN0U3RyaW5nID0gQ1I7Ci0JCQkJZXhwbG9yZUNvbnZlcnNpb24oY2hhcnNldE5hbWUsIHN0cmluZ05hbWUsIHRlc3RTdHJpbmcpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiY2FuIG5vdCBlbmNvZGUgQ1IgZm9yICIgKyBjaGFyc2V0RW5jb2Rlci5jaGFyc2V0KCkubmFtZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IGZhbHNlOwotCQl9Ci0JCWlmICghY2hhcnNldEVuY29kZXIuY2FuRW5jb2RlKENSTEYpKSB7Ci0JCQlpZiAoREVCVUdDUkxGKSB7Ci0JCQkJU3RyaW5nIHN0cmluZ05hbWUgPSAiQ1JMRiI7Ci0JCQkJU3RyaW5nIHRlc3RTdHJpbmcgPSBDUkxGOwotCQkJCWV4cGxvcmVDb252ZXJzaW9uKGNoYXJzZXROYW1lLCBzdHJpbmdOYW1lLCB0ZXN0U3RyaW5nKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oImNhbiBub3QgZW5jb2RlIENSTEYgZm9yICIgKyBjaGFyc2V0RW5jb2Rlci5jaGFyc2V0KCkubmFtZSgpKTsKLQkJCX0KLQkJCXJlc3VsdCA9IGZhbHNlOwotCQl9Ci0JCXJldHVybiByZXN1bHQ7Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZXhwbG9yZUNvbnZlcnNpb24oU3RyaW5nIGNoYXJzZXROYW1lLCBTdHJpbmcgc3RyaW5nTmFtZSwgU3RyaW5nIHRlc3RTdHJpbmcpIHRocm93cyBFcnJvciB7Ci0JCXRyeSB7Ci0JCQlTdHJpbmcgbmV3TEYgPSBuZXcgU3RyaW5nKHRlc3RTdHJpbmcuZ2V0Qnl0ZXMoY2hhcnNldE5hbWUpKTsKLQkJCVN5c3RlbS5vdXQucHJpbnQoIm9sZCAiICsgc3RyaW5nTmFtZSArICIgKGRlYyk6ICIpOwotCQkJZHVtcFN0cmluZyhTeXN0ZW0ub3V0LCB0ZXN0U3RyaW5nKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludCgibmV3ICIgKyBzdHJpbmdOYW1lICsgIiAoZGVjKTogIik7Ci0JCQlkdW1wU3RyaW5nKFN5c3RlbS5vdXQsIG5ld0xGKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQl9Ci0JCWNhdGNoIChVbnN1cHBvcnRlZEVuY29kaW5nRXhjZXB0aW9uIGUpIHsKLQkJCS8vc2hvdWxkIG5ldmVyIGhhcHBlbiwgYWxyZWFkeSBjaGVja2VkCi0JCQl0aHJvdyBuZXcgRXJyb3IoZSk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gb3V0Ci0JICogQHBhcmFtIGxmMgotCSAqLwotCXByaXZhdGUgdm9pZCBkdW1wU3RyaW5nKFByaW50U3RyZWFtIG91dCwgU3RyaW5nIGxmMikgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGxmMi5sZW5ndGgoKTsgaSsrKSB7Ci0JCQlvdXQucHJpbnQoKGludCkgbGYyLmNoYXJBdChpKSArICIgIik7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIGdldE1haW5EaXJlY3RvcnlCYXNlZE9uVk1OYW1lQW5kRmlsZUV4dGVuc2lvbigpIHsKLQkJU3RyaW5nIG1haW5EaXJlY3RvcnkgPSBnZXRNYWluRGlyZWN0b3J5QmFzZWRPblZNTmFtZSgpICsgIi94bWwiOwotCQlyZXR1cm4gbWFpbkRpcmVjdG9yeTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZyBnZXRIZWFkZXJTdGFydCgpIHsKLQkJcmV0dXJuICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCIiOwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGdldEhlYWRlckVuZCgpIHsKLQkJcmV0dXJuICJcIj8+IjsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0xpc3RDaGFyc2V0cy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9MaXN0Q2hhcnNldHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWVmMGVkZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL0xpc3RDaGFyc2V0cy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsODQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEudXRpbC5JdGVyYXRvcjsKLWltcG9ydCBqYXZhLnV0aWwuTG9jYWxlOwotaW1wb3J0IGphdmEudXRpbC5NYXA7Ci1pbXBvcnQgamF2YS51dGlsLlNldDsKLQotLyoqCi0gKiBTbWFsbCBjbGFzcyB0byBsaXN0IGNoYXJzZXQgZGV0ZWN0ZWQgZm9yIGEgcGFydGljdWxhciBWTS4gU2ltcGxlIHJ1biBhcyBKYXZhCi0gKiBBcHBsaWNhdGlvbnMgdG8gZ2V0IG91dHB1dCB0byBzdGFuZGFyZCBvdXQuCi0gKi8KLXB1YmxpYyBjbGFzcyBMaXN0Q2hhcnNldHMgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIHRhYiA9ICJcdCI7Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0KLQkJTGlzdENoYXJzZXRzIHRoaXNBcHAgPSBuZXcgTGlzdENoYXJzZXRzKCk7Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0KLQkJU3lzdGVtLm91dC5wcmludGxuKCJDdXJyZW50IExvY2FsZTogIiArIExvY2FsZS5nZXREZWZhdWx0KCkpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCi0JCVN0cmluZyBuYW1lID0gU3lzdGVtLmdldFByb3BlcnR5KCJqYXZhLmZ1bGx2ZXJzaW9uIik7Ci0JCWlmIChuYW1lID09IG51bGwpIHsKLQkJCW5hbWUgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImphdmEudmVyc2lvbiIpICsgIiAoIiArIFN5c3RlbS5nZXRQcm9wZXJ0eSgiamF2YS5ydW50aW1lLnZlcnNpb24iKSArICIpIjsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oIkpSRSB2ZXJzaW9uOiAiICsgbmFtZSk7Ci0KLQkJU3lzdGVtLmdldFByb3BlcnRpZXMoKS5saXN0KFN5c3RlbS5vdXQpOwotCi0JCXRoaXNBcHAubGlzdE9mTG9jYWxlcygpOwotCi0JCVN5c3RlbS5vdXQucHJpbnRsbigiZmlsZS5lbmNvZGluZy5wa2c6ICIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuZW5jb2RpbmcucGtnIikpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4oImZpbGUuZW5jb2Rpbmc6ICIgKyBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuZW5jb2RpbmciKSk7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGFyZ3NbaV0pOwotCQl9Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQl0aGlzQXBwLmxpc3RPZkNoYXJzZXRzKCk7Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGxpc3RPZkxvY2FsZXMoKSB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiQXZhaWxhYmxlIExvY2FsZXMiKTsKLQkJTG9jYWxlW10gbG9jYWxlcyA9IExvY2FsZS5nZXRBdmFpbGFibGVMb2NhbGVzKCk7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgbG9jYWxlcy5sZW5ndGg7IGkrKykgewotCQkJU3lzdGVtLm91dC5wcmludGxuKGxvY2FsZXNbaV0pOwotCi0JCX0KLQotCX0KLQotCXByaXZhdGUgdm9pZCBsaXN0T2ZDaGFyc2V0cygpIHsKLQkJU3lzdGVtLm91dC5wcmludGxuKCJBdmFpbGFibGUgQ2hhcnNldHMiKTsKLQkJaW50IGNvdW50ID0gMDsKLQkJTWFwIG1hcCA9IENoYXJzZXQuYXZhaWxhYmxlQ2hhcnNldHMoKTsKLQkJSXRlcmF0b3IgaXQgPSBtYXAua2V5U2V0KCkuaXRlcmF0b3IoKTsKLQkJd2hpbGUgKGl0Lmhhc05leHQoKSkgewotCQkJY291bnQrKzsKLQkJCS8vIEdldCBjaGFyc2V0IG5hbWUKLQkJCVN0cmluZyBjaGFyc2V0TmFtZSA9IChTdHJpbmcpIGl0Lm5leHQoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihjb3VudCArICIuICIgKyAiIENoYXJzZXRuYW1lOiAiICsgY2hhcnNldE5hbWUpOwotCQkJLy8gR2V0IGNoYXJzZXQKLQkJCUNoYXJzZXQgY2hhcnNldCA9IENoYXJzZXQuZm9yTmFtZShjaGFyc2V0TmFtZSk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4odGFiICsgImRpc3BsYXlOYW1lOiAiICsgY2hhcnNldC5kaXNwbGF5TmFtZShMb2NhbGUuZ2V0RGVmYXVsdCgpKSk7Ci0JCQlTZXQgc2V0ID0gY2hhcnNldC5hbGlhc2VzKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4odGFiICsgImFsaWFzZXM6ICIgKyBzZXQpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvVGVzdHNQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYzNTY2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL1Rlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNTAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZElucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZTsKLWltcG9ydCBqYXZhLmlvLkZpbGVJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVOb3RGb3VuZEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLm5ldC5VUkw7Ci1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkJ5dGVSZWFkZXI7Ci0KLS8qKgotICogVGhlIG1haW4gcGx1Z2luIGNsYXNzIHRvIGJlIHVzZWQgaW4gdGhlIGRlc2t0b3AuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0c1BsdWdpbiBleHRlbmRzIFBsdWdpbiB7Ci0JLy8gVGhlIHNoYXJlZCBpbnN0YW5jZS4KLQlwcml2YXRlIHN0YXRpYyBUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFRlc3RzUGx1Z2luKCkgewotCQlzdXBlcigpOwotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHNoYXJlZCBpbnN0YW5jZS4KLQkgKi8KLQlwdWJsaWMgc3RhdGljIFRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgd29ya3NwYWNlIGluc3RhbmNlLgotCSAqLwotCXB1YmxpYyBzdGF0aWMgSVdvcmtzcGFjZSBnZXRXb3Jrc3BhY2UoKSB7Ci0JCXJldHVybiBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwgb3IgJ2tleScgaWYgbm90Ci0JICogZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlyZXR1cm4ga2V5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgVVJMIGdldEluc3RhbGxMb2NhdGlvbigpIHsKLQkJVVJMIGluc3RhbGxMb2NhdGlvbiA9IFBsYXRmb3JtLmdldEJ1bmRsZSgib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZyIpLmdldEVudHJ5KCIvIik7Ci0JCVVSTCByZXNvbHZlZExvY2F0aW9uID0gbnVsbDsKLQkJdHJ5IHsKLQkJCXJlc29sdmVkTG9jYXRpb24gPSBGaWxlTG9jYXRvci5yZXNvbHZlKGluc3RhbGxMb2NhdGlvbik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCS8vIGltcG9zc2libGUKLQkJCXRocm93IG5ldyBFcnJvcihlKTsKLQkJfQotCQlyZXR1cm4gcmVzb2x2ZWRMb2NhdGlvbjsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIEZpbGUgZ2V0VGVzdEZpbGUoU3RyaW5nIGZpbGVwYXRoKSB7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyBmaWxlcGF0aDsKLQkJRmlsZSByZXN1bHQgPSBuZXcgRmlsZShsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBMaXN0IGdldEFsbFRlc3RGaWxlcyhTdHJpbmcgdG9wRGlyTmFtZSkgewotCQlMaXN0IHJlc3VsdCA9IG51bGw7Ci0JCVVSTCBpbnN0YWxsVVJMID0gZ2V0SW5zdGFsbExvY2F0aW9uKCk7Ci0JCS8vIFN0cmluZyBzY2hlbWUgPSBpbnN0YWxsVVJMLmdldFByb3RvY29sKCk7Ci0JCVN0cmluZyBwYXRoID0gaW5zdGFsbFVSTC5nZXRQYXRoKCk7Ci0JCVN0cmluZyBsb2NhdGlvbiA9IHBhdGggKyB0b3BEaXJOYW1lOwotCQlGaWxlIHRvcERpciA9IG5ldyBGaWxlKGxvY2F0aW9uKTsKLQkJaWYgKCF0b3BEaXIuaXNEaXJlY3RvcnkoKSkgewotCQkJdGhyb3cgbmV3IElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbih0b3BEaXJOYW1lICsgIiBpcyBub3QgYSBkaXJlY3RvcnkiKTsKLQkJfQotCQlyZXN1bHQgPSBnZXRGaWxlc0luRGlyKHRvcERpcik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRvcERpcgotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBMaXN0IGdldEZpbGVzSW5EaXIoRmlsZSB0b3BEaXIpIHsKLQkJTGlzdCBmaWxlcyA9IG5ldyBBcnJheUxpc3QoKTsKLQkJRmlsZVtdIHRvcEZpbGVzID0gdG9wRGlyLmxpc3RGaWxlcygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHRvcEZpbGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlGaWxlIGZpbGUgPSB0b3BGaWxlc1tpXTsKLQkJCWlmIChmaWxlLmlzRmlsZSgpKSB7Ci0JCQkJZmlsZXMuYWRkKGZpbGUpOwotCQkJfQotCQkJZWxzZSBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpICYmICFmaWxlLmdldE5hbWUoKS5lbmRzV2l0aCgiQ1ZTIikpIHsKLQkJCQlMaXN0IGlubmVyRmlsZXMgPSBnZXRGaWxlc0luRGlyKGZpbGUpOwotCQkJCWZpbGVzLmFkZEFsbChpbm5lckZpbGVzKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gZmlsZXM7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWFkZXIgZ2V0VGVzdFJlYWRlcihTdHJpbmcgZmlsZXBhdGgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCVJlYWRlciByZXN1bHQgPSBuZXcgRmlsZVJlYWRlcihsb2NhdGlvbik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBSZWFkZXIgZ2V0Qnl0ZVJlYWRlcihTdHJpbmcgZmlsZXBhdGgpIHRocm93cyBGaWxlTm90Rm91bmRFeGNlcHRpb24gewotCQlVUkwgaW5zdGFsbFVSTCA9IGdldEluc3RhbGxMb2NhdGlvbigpOwotCQkvLyBTdHJpbmcgc2NoZW1lID0gaW5zdGFsbFVSTC5nZXRQcm90b2NvbCgpOwotCQlTdHJpbmcgcGF0aCA9IGluc3RhbGxVUkwuZ2V0UGF0aCgpOwotCQlTdHJpbmcgbG9jYXRpb24gPSBwYXRoICsgZmlsZXBhdGg7Ci0JCVJlYWRlciByZXN1bHQgPSBuZXcgQnl0ZVJlYWRlcihuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShuZXcgRmlsZUlucHV0U3RyZWFtKGxvY2F0aW9uKSkpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJlZi9UZXN0UHJlZmVyZW5jZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJlZi9UZXN0UHJlZmVyZW5jZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZkYzViYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3ByZWYvVGVzdFByZWZlcmVuY2VzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMDkgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnByZWY7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmZXJlbmNlcy5JRWNsaXBzZVByZWZlcmVuY2VzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheTsKLWltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnByZWZzLkJhY2tpbmdTdG9yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnByZWZzLlByZWZlcmVuY2VzOwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0UHJlZmVyZW5jZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0KLQkvKioKLQkgKiBAcGFyYW0gcHJlZmVyZW5jZXMKLQkgKiBAdGhyb3dzIEJhY2tpbmdTdG9yZUV4Y2VwdGlvbgotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRDaGlsZHJlbihQcmVmZXJlbmNlcyBwcmVmZXJlbmNlcykgdGhyb3dzIEJhY2tpbmdTdG9yZUV4Y2VwdGlvbiB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigiXHQiICsgcHJlZmVyZW5jZXMuYWJzb2x1dGVQYXRoKCkpOwotCQlTdHJpbmcgW10ga2V5cyA9IHByZWZlcmVuY2VzLmtleXMoKTsKLQkJcHJpbnRLZXlzKGtleXMpOwotCQlTdHJpbmdbXSBjaGlsZHJlbiA9IHByZWZlcmVuY2VzLmNoaWxkcmVuTmFtZXMoKTsKLQkJcHJpbnRDaGlsZHJlbihjaGlsZHJlbik7IAotCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgY2hpbGQgPSBjaGlsZHJlbltpXTsKLQkJCVByZWZlcmVuY2VzIHN1YlByZWZlcmVuY2VzID0gcHJlZmVyZW5jZXMubm9kZShjaGlsZCk7Ci0JCQlTdHJpbmcgW10gc3Via2V5cyA9IHN1YlByZWZlcmVuY2VzLmtleXMoKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGNoaWxkKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJcHJpbnRLZXlzKHN1YmtleXMpOwotCQl9Ci0JfQotCXN0YXRpYyBwcml2YXRlIHZvaWQgcHJpbnRDaGlsZHJlbihTdHJpbmdbXSBjaGlsZHJlbikgewotCQlwcmludFN0cmluZ0FycmF5KGNoaWxkcmVuLCAiXHQiKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0ga2V5cwotCSAqLwotCXByaXZhdGUgc3RhdGljIHZvaWQgcHJpbnRLZXlzKFN0cmluZ1tdIGtleXMpIHsKLQkJcHJpbnRTdHJpbmdBcnJheShrZXlzLCAiXHRcdCIpOwotCQkKLQl9Ci0KLQlzdGF0aWMgcHJpdmF0ZSB2b2lkIHByaW50U3RyaW5nQXJyYXkoU3RyaW5nW10gYXJyYXksIFN0cmluZyB0YWJDaGFycykgewotCQlmb3IgKGludCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgc3RyaW5nID0gYXJyYXlbaV07Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4odGFiQ2hhcnMgKyBzdHJpbmcpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gdHJ1ZTsKLQotCXByaXZhdGUgdm9pZCBkaXNwbGF5UHJlZmVyZW5jZVRyZWUoKSB7Ci0JCUlFY2xpcHNlUHJlZmVyZW5jZXMgZWNsaXBzZVByZWZlcmVuY2VzID0gUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlKCkuZ2V0Um9vdE5vZGUoKTsKLQotCi0JCXRyeSB7Ci0JCQlTdHJpbmdbXSBjaGlsZHJlbiA9IGVjbGlwc2VQcmVmZXJlbmNlcy5jaGlsZHJlbk5hbWVzKCk7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZWNsaXBzZVByZWZlcmVuY2VzLmFic29sdXRlUGF0aCgpKTsKLQkJCXByaW50Q2hpbGRyZW4oY2hpbGRyZW4pOwotCi0JCQlmb3IgKGludCBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7Ci0JCQkJU3RyaW5nIHN0cmluZyA9IGNoaWxkcmVuW2ldOwotCQkJCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gZWNsaXBzZVByZWZlcmVuY2VzLm5vZGUoc3RyaW5nKTsKLQkJCQlwcmludENoaWxkcmVuKHByZWZlcmVuY2VzKTsKLQotCi0JCQl9Ci0KLQkJfQotCQljYXRjaCAoQmFja2luZ1N0b3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBY2Nlc3MoKSB7Ci0JCWlmIChERUJVRykgeyAKLQkJCWRpc3BsYXlQcmVmZXJlbmNlVHJlZSgpOwotCQl9Ci0JCS8vIGFsd2F5cyBvayBpZiBubyBleGNlcHRpb25zIHRocm93bgotCQlhc3NlcnRUcnVlKHRydWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50QmFzZWRQcmVmSFRNTCgpIHsKLQkJSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZmluZENvbnRlbnRUeXBlRm9yKCJ0ZXN0Lmh0bWwiKTsKLQkJUHJlZmVyZW5jZXMgcHJlZmVyZW5jZXMgPSBDb250ZW50QmFzZWRQcmVmZXJlbmNlR2F0ZXdheS5nZXRQcmVmZXJlbmNlcyhjb250ZW50VHlwZSk7Ci0JCWFzc2VydE5vdE51bGwocHJlZmVyZW5jZXMpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RDb250ZW50QmFzZWRQcmVmWE1MKCkgewotCQlJQ29udGVudFR5cGUgY29udGVudFR5cGUgPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5maW5kQ29udGVudFR5cGVGb3IoInRlc3QueG1sIik7Ci0JCVByZWZlcmVuY2VzIHByZWZlcmVuY2VzID0gQ29udGVudEJhc2VkUHJlZmVyZW5jZUdhdGV3YXkuZ2V0UHJlZmVyZW5jZXMoY29udGVudFR5cGUpOwotCQlhc3NlcnROb3ROdWxsKHByZWZlcmVuY2VzKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3RDb21tb25OYW1lcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3RDb21tb25OYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTFmZjBjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0Q29tbW9uTmFtZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDczICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvbW1vbkNoYXJzZXROYW1lczsKLQotcHVibGljIGNsYXNzIFRlc3RDb21tb25OYW1lcyBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXB1YmxpYyB2b2lkIHRlc3RDb21tb25OYW1lcygpIHsKLQkJU3RyaW5nW10gbmFtZXMgPSBDb21tb25DaGFyc2V0TmFtZXMuZ2V0Q29tbW9uQ2hhcnNldE5hbWVzKCk7Ci0JCWFzc2VydFRydWUoImNvbW1vbiBjaGFyc2V0IG5hbWVzIGNvdWxkIG5vdCBiZSBsb2FkZWQiLCBuYW1lcyAhPSBudWxsICYmIG5hbWVzLmxlbmd0aCA+IDApOwotCQlpZiAoREVCVUcpIHsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHsKLQkJCQlTdHJpbmcgbmFtZSA9IG5hbWVzW2ldOwotCQkJCVN0cmluZyBkaXNwbGF5TmFtZSA9IENvbW1vbkNoYXJzZXROYW1lcy5nZXREaXNwbGF5U3RyaW5nKG5hbWUpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbiggbmFtZSArICIgICAgIiArIGRpc3BsYXlOYW1lKTsKLQkJCX0KLQkJfQotCX0KLQkKLQlwdWJsaWMgdm9pZCBkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKFN0cmluZyBzdHJpbmdUb0NoZWNrLCBTdHJpbmcgZGVmYXVsdE5hbWUsIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgYWN0dWFsID0gQ29tbW9uQ2hhcnNldE5hbWVzLmdldFByZWZlcnJlZERlZmF1bHRJYW5hTmFtZShzdHJpbmdUb0NoZWNrLCBkZWZhdWx0TmFtZSk7Ci0JCWFzc2VydEVxdWFscygiZGVmYXVsdCBJQU5BIG5hbWUgdGVzdCBmYWlsZWQgZm9yICIgKyBzdHJpbmdUb0NoZWNrLCBleHBlY3RlZCwgYWN0dWFsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0QVNDSUkoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoIkFTQ0lJIiwgIlVURi04IiwgIlVTLUFTQ0lJIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RDcDEyNTIoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoIkNwMTI1MiIsICJVVEYtOCIsICJJU08tODg1OS0xIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RNUzk1MCgpIHsKLQkJZG9UZXN0RGVmYXVsdElhbmFOYW1lcygiTVM5NTAiLCAiVVRGLTgiLCAiQklHNSIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0Q3AxMjU2KCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJDcDEyNTYiLCAiVVRGLTgiLCAid2luZG93cy0xMjU2Iik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RNUzk0OSgpIHsKLQkJZG9UZXN0RGVmYXVsdElhbmFOYW1lcygiTVM5NDkiLCAiVVRGLTgiLCAiRVVDLUtSIik7Ci0JfQotCQotCXB1YmxpYyB2b2lkIHRlc3RFVUNfSlAoKSB7Ci0JCWRvVGVzdERlZmF1bHRJYW5hTmFtZXMoIkVVQy1KUCIsICJVVEYtOCIsICJFVUMtSlAiKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdFRvdGFsbHlGYWtlKCkgewotCQlkb1Rlc3REZWZhdWx0SWFuYU5hbWVzKCJ0b3RhbGx5RmFrZSIsICJVVEYtOCIsICJVVEYtOCIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0U3lzdGVtRW5jb2RpbmcoKSB7Ci0JCVN0cmluZyBzeXN0ZW1FbmMgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoImZpbGUuZW5jb2RpbmciKTsKLQkJaWYgKHN5c3RlbUVuYyAhPSBudWxsKSB7Ci0JCQlTdHJpbmcgYWN0dWFsID0gQ29tbW9uQ2hhcnNldE5hbWVzLmdldFByZWZlcnJlZERlZmF1bHRJYW5hTmFtZShzeXN0ZW1FbmMsICJVVEYtOCIpOwotCQkJYXNzZXJ0Tm90TnVsbCgiZGVmYXVsdCBJQU5BIG5hbWUgdGVzdCBmYWlsZWQgZm9yIHN5c3RlbSBlbmNvZGluZyAiICsgc3lzdGVtRW5jLCBhY3R1YWwpOwotCQl9Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0RGlzcGxheU5hbWVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3Byb3BlcnRpZXMvVGVzdERpc3BsYXlOYW1lcy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMTE0NWM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0RGlzcGxheU5hbWVzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcucHJvcGVydGllczsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db21tb25DaGFyc2V0TmFtZXM7Ci0KLQotcHVibGljIGNsYXNzIFRlc3REaXNwbGF5TmFtZXMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgdGVzdENvbW1vbk5hbWUoKSB7Ci0JCVN0cmluZyBkaXNwbGF5TmFtZSA9IENvbW1vbkNoYXJzZXROYW1lcy5nZXREaXNwbGF5U3RyaW5nKCJJU08tODg1OS0yIik7Ci0JCWFzc2VydE5vdE51bGwoImRpc3BsYXkgbmFtZSBmb3IgY2hhcnNldCBjb3VsZCBub3QgYmUgcmV0cmlldmVkIiwgZGlzcGxheU5hbWUpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihkaXNwbGF5TmFtZSk7Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3RPdmVycmlkZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcHJvcGVydGllcy9UZXN0T3ZlcnJpZGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMmY2ZDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9wcm9wZXJ0aWVzL1Rlc3RPdmVycmlkZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5wcm9wZXJ0aWVzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkNvZGVkSU87Ci0KLXB1YmxpYyBjbGFzcyBUZXN0T3ZlcnJpZGVzIGV4dGVuZHMgVGVzdENhc2UgewotCi0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JcHVibGljIFN0cmluZyBkb1Rlc3RPdmVycmlkZShTdHJpbmcgc3RyaW5nVG9DaGVjaykgewotCi0JCVN0cmluZyBjaGFyc2V0ID0gQ29kZWRJTy5nZXRBcHByb3ByaWF0ZUphdmFDaGFyc2V0KHN0cmluZ1RvQ2hlY2spOwotCQlhc3NlcnROb3ROdWxsKCJvdmVycmlkZSB0ZXN0IGZhaWxlZCBmb3IgIiArIHN0cmluZ1RvQ2hlY2ssIGNoYXJzZXQpOwotCQlyZXR1cm4gY2hhcnNldDsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0SVNPODg1OThJKCkgewotCQlTdHJpbmcgcmVzdWx0ID0gZG9UZXN0T3ZlcnJpZGUoIklTTy04ODU5LTgtSSIpOwotCQlhc3NlcnRFcXVhbHMoIm1hcHBpbmcgb3ZlcnJpZGUgbm90IGNvcnJlY3QgZm9yIElTTy04ODU5LTgtSSIsICJJU08tODg1OS04IiwgcmVzdWx0KTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4ocmVzdWx0KTsKLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYU0pJUygpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGRvVGVzdE92ZXJyaWRlKCJYLVNKSVMiKTsKLQkJYXNzZXJ0RXF1YWxzKCJtYXBwaW5nIG92ZXJyaWRlIG5vdCBjb3JyZWN0IGZvciBYLVNKSVMiLCAiU2hpZnRfSklTIiwgcmVzdWx0KTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4ocmVzdWx0KTsKLQkJfQotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29kZWRSZWFkZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29kZWRSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc2YWZiMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvZGVkUmVhZGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnJlYWQ7Ci0KLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db2RlZFJlYWRlckNyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLklDb250ZW50RGVzY3JpcHRpb25FeHRlbmRlZDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29kZWRSZWFkZXIgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JLy8gcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJodG1sLyI7Ci0JLy8gcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZVJvb3QgPQotCS8vICIvYnVpbGRzL1dvcmtzcGFjZXMvSGVhZFdvcmtzcGFjZS9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLyI7Ci0JLy8gcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZVJvb3QgKyBmaWxlRGlyOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHX1RFU1RfREVUQUlMID0gZmFsc2U7Ci0JLy8gbmVlZHMgdG8gYmUgc3RhdGljLCBzaW5jZSBKVW5pdCBjcmVhdGVzIGRpZmZlcmVuY2UgaW5zdGFuY2VzIGZvciBlYWNoCi0JLy8gdGVzdAotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUFJPSkVDVF9OQU1FID0gIm9yZy5lY2xpcHNlLmVuY29kaW5nLnJlc291cmNlLm5ld3Rlc3RzIjsKLQlzdGF0aWMgSVByb2plY3QgZlRlc3RQcm9qZWN0OwotCXByb3RlY3RlZCBzdGF0aWMgaW50IG5TZXR1cHMgPSAwOwotCi0JcHJpdmF0ZSBTdHJpbmcgbWFzc2FnZUNoYXJzZXQoU3RyaW5nIGZvdW5kQ2hhcnNldCkgewotCQlTdHJpbmcgcmVzdWx0ID0gZm91bmRDaGFyc2V0OwotCQlpZiAoIlVURi0xNkxFIi5lcXVhbHMoZm91bmRDaGFyc2V0KSkgewotCQkJcmVzdWx0ID0gIlVURi0xNiI7Ci0JCX0gZWxzZSBpZiAoIlgtVW5pY29kZUxpdHRsZSIuZXF1YWxzKGZvdW5kQ2hhcnNldCkpIHsKLQkJCXJlc3VsdCA9ICJVVEYtMTYiOwotCQl9IGVsc2UgaWYgKCJYLVVuaWNvZGVCaWciLmVxdWFscyhmb3VuZENoYXJzZXQpKSB7Ci0JCQlyZXN1bHQgPSAiVVRGLTE2QkUiOwotCQl9Ci0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiAKLQkgKi8KLQlwdWJsaWMgVGVzdENvZGVkUmVhZGVyKCkgewotCQlzdXBlcigpOwotCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oY3VycmVudFBsYXRmb3JtQ2hhcnNldCk7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykgewotCQkvLyB0cnkgewotCQkvLyBuZXcgVGVzdENvZGVkUmVhZGVyKCkuZG9BbGxGaWxlcygpOwotCQkvLyB9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJLy8gZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJLy8gfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkvLyBlLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLyB9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy8gVGVzdHNQbHVnaW4gdGVzdHNQbHVnaW4gPSAoVGVzdHNQbHVnaW4pCi0JCS8vIFBsYXRmb3JtLmdldFBsdWdpbigib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZyIpOwotCQlJV29ya3NwYWNlIHdvcmtzcGFjZSA9IFRlc3RzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotCQlJV29ya3NwYWNlUm9vdCByb290ID0gd29ya3NwYWNlLmdldFJvb3QoKTsKLQkJZlRlc3RQcm9qZWN0ID0gcm9vdC5nZXRQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJLy8gdGhpcyBmb3JtIGNyZWF0ZXMgcHJvamVjdCBhcyAibGlua2VkIiBiYWNrIHRvICdmaWxlUm9vdCcKLQkJLy8gY3JlYXRlUHJvamVjdCh0ZXN0UHJvamVjdCwgbmV3IFBhdGgoZmlsZVJvb3QpLCBudWxsKTsKLQkJY3JlYXRlUHJvamVjdChmVGVzdFByb2plY3QsIG51bGwsIG51bGwpOwotCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCWFzc2VydFRydWUoZlRlc3RQcm9qZWN0LmV4aXN0cygpKTsKLQkJLy8gSUNvbnRhaW5lciBkb3Rlc3RGaWxlcyA9IHRlc3RQcm9qZWN0LmdldEZvbGRlcigiZG90ZXN0RmlsZXMiKTsKLQkJLy8gYXNzZXJ0VHJ1ZShkb3Rlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vIElSZXNvdXJjZVtdIGFsbEZvbGRlcnMgPSBkb3Rlc3RGaWxlcy5tZW1iZXJzKCk7Ci0JCS8vIGFzc2VydE5vdE51bGwoYWxsRm9sZGVycyk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcmVhZElucHV0U3RyZWFtKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0JCWludCBudW1SZWFkID0gMDsKLQkJY2hhciB0QnVmZltdID0gbmV3IGNoYXJbNDAwMF07Ci0JCXdoaWxlICgobnVtUmVhZCA9IHJlYWRlci5yZWFkKHRCdWZmLCAwLCB0QnVmZi5sZW5ndGgpKSAhPSAtMSkgewotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlcjsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoInRlc3RmaWxlcy56aXAiKTsKLQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJcHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgZGVzdGluYXRpb25Gb2xkZXIpOwotCQkJcHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWZUZXN0UHJvamVjdEluaXRpYWxpemVkID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCW5TZXR1cHMtLTsKLQkJaWYgKG5TZXR1cHMgPT0gMCkgewotCQkJaWYgKCFERUJVRykgewotCQkJCS8vIERpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOwotCQkJCS8vIGRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkvLyBwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJLy8gUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQkJLy8gSVByb2plY3QgcHJvaiA9IGZUZXN0UHJvamVjdDsKLQkJCQkvLyBmVGVzdFByb2plY3QgPSBudWxsOwotCQkJCS8vIHRyeSB7Ci0JCQkJLy8gcHJvalV0aWwuZGVsZXRlUHJvamVjdChwcm9qKTsKLQkJCQkvLyB9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJCS8vIGUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQkJLy8gfQotCQkJCS8vIH0KLQkJCQkvLyB9KTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRKYXZhQ2hhcnNldCwgU3RyaW5nIGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0LCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlSZWFkZXIgcmVhZGVyID0gbnVsbDsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKGZpbGUpOwotCQlleHBlY3RlZEphdmFDaGFyc2V0ID0gbWFzc2FnZUNoYXJzZXQoZXhwZWN0ZWRKYXZhQ2hhcnNldCk7Ci0JCWV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0ID0gbWFzc2FnZUNoYXJzZXQoZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQpOwotCi0JCS8vIG5vdGU6IGV2ZW50dWFsbHksIEkgc2hvdWxkIGNoYW5nZSBjYWxsaW5nIG1ldGhvZHMgc28gaWYgZGV0ZWN0ZWQKLQkJLy8gY2hhcnNldCBpcyBleHBlY3RlZCB0byBiZSBzYW1lCi0JCS8vIGFzIHRoZSAndXNlZCcgamF2YSBjaGFyc2V0LCB0aGVuIHNpbXBseSBwYXNzIGluIG51bGwsIGJ1dCBmb3Igbm93LAotCQkvLyB3ZSdsbCAiZm9yY2UiIHRoYXQgaGVyZSBpbiB0aGlzCi0JCS8vIG1ldGhvZC4KLQkJaWYgKGV4cGVjdGVkSmF2YUNoYXJzZXQuZXF1YWxzKGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0KSkgewotCQkJZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQgPSBudWxsOwotCQl9Ci0KLQkJdHJ5IHsKLQkJCXJlYWRlciA9IGRvQ29yZVRlc3QoZXhwZWN0ZWRKYXZhQ2hhcnNldCwgZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQsIGZpbGUpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJaWYgKGV4cGVjdGVkRXhjZXB0aW9uICE9IG51bGwpIHsKLQkJCQlib29sZWFuIHJlc3VsdCA9IGV4cGVjdGVkRXhjZXB0aW9uLmlzSW5zdGFuY2UoZSk7Ci0JCQkJYXNzZXJ0VHJ1ZSgiVW5leHBlY3RlZCBFeGNlcHRpb246ICIgKyBnZXRHb29kRnVsbE1zZyhlKSwgcmVzdWx0KTsKLQkJCX0gZWxzZSB7Ci0JCQkJLy8gd2lsbCBhbHdheSBhc3NlcnQgaWYgZ2V0cyB0byBoZXJlCi0JCQkJU3RyaW5nIG1zZyA9IGdldEdvb2RGdWxsTXNnKGUpOwotCQkJCWFzc2VydE51bGwoIlVuZXhwZWN0ZWQgRXhjZXB0aW9uOiAiICsgbXNnLCBlKTsKLQkJCX0KLQkJfSBmaW5hbGx5IHsKLQkJCWlmIChyZWFkZXIgIT0gbnVsbCkgewotCQkJCXJlYWRlci5jbG9zZSgpOwotCQkJfQotCi0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgUmVhZGVyIGRvQ29yZVRlc3QoU3RyaW5nIGV4cGVjdGVkSmF2YUNoYXJzZXQsIFN0cmluZyBleHBlY3RlZERldGVjdGVkQ2hhcnNldCwgSUZpbGUgZmlsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJUmVhZGVyIHJlYWRlcjsKLQkJLy8gY3JlYXRlIHRoZXNlIGZpcnN0LCB0byB0ZXN0IGV4Y2VwdGlvbiBiZWluZyB0aHJvd24gY29ycmVjdGx5Ci0JCUNvZGVkUmVhZGVyQ3JlYXRvciBjb2RlZFJlYWRlckNyZWF0b3IgPSBuZXcgQ29kZWRSZWFkZXJDcmVhdG9yKCk7Ci0JCWNvZGVkUmVhZGVyQ3JlYXRvci5zZXQoZmlsZSk7Ci0JCXJlYWRlciA9IGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRDb2RlZFJlYWRlcigpOwotCi0JCVN0cmluZyBqYXZhQ2hhcnNldE5hbWUgPSBmaWxlLmdldENoYXJzZXQoKTsKLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IGZpbGUuZ2V0Q29udGVudERlc2NyaXB0aW9uKCk7Ci0JCWphdmFDaGFyc2V0TmFtZSA9IG1hc3NhZ2VDaGFyc2V0KGphdmFDaGFyc2V0TmFtZSk7Ci0JCS8vIGNvZGVkUmVhZGVyQ3JlYXRvci5nZXRFbmNvZGluZ01lbWVudG8oKS5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQkJaWYgKGV4cGVjdGVkSmF2YUNoYXJzZXQuZXF1YWxzKCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiKSkgewotCQkJU3RyaW5nIHBsYXRmb3JtRGVmYXVsdCA9IE5vbkNvbnRlbnRCYXNlZEVuY29kaW5nUnVsZXMudXNlRGVmYXVsdE5hbWVSdWxlcyhudWxsKTsKLQkJCWFzc2VydFRydWUoamF2YUNoYXJzZXROYW1lLmVxdWFscyhwbGF0Zm9ybURlZmF1bHQpKTsKLQkJfSBlbHNlIHsKLQkJCWJvb2xlYW4gYXNFeHBlY3RlZCA9IGphdmFDaGFyc2V0TmFtZS5lcXVhbHMoZXhwZWN0ZWRKYXZhQ2hhcnNldCk7Ci0JCQlhc3NlcnRUcnVlKGphdmFDaGFyc2V0TmFtZSArICIgZGlkIG5vdCBlcXVhbCB0aGUgZXhwZWN0ZWQgIiArIGV4cGVjdGVkSmF2YUNoYXJzZXQgKyAiICh0aGlzIGlzIGEgVk0gZGVwZW5kZW50IHRlc3QpIiwgYXNFeHBlY3RlZCk7Ci0JCX0KLQkJU3RyaW5nIGphdmFDaGFyc2V0TmFtZVByb3BlcnR5ID0gKFN0cmluZykgZGVzY3JpcHRpb24uZ2V0UHJvcGVydHkoSUNvbnRlbnREZXNjcmlwdGlvbi5DSEFSU0VUKTsKLQkJU3RyaW5nIGRldGVjdGVkQ2hhcnNldE5hbWVQcm9wZXJ0eSA9IGdldERldGVjdGVkQ2hhcnNldE5hbWUoZGVzY3JpcHRpb24pOwotCQlkZXRlY3RlZENoYXJzZXROYW1lUHJvcGVydHkgPSBtYXNzYWdlQ2hhcnNldChkZXRlY3RlZENoYXJzZXROYW1lUHJvcGVydHkpOwotCQkvLyBpZiAoZGV0ZWN0ZWRDaGFyc2V0TmFtZSA9PSBudWxsKSB7Ci0JCS8vIGRldGVjdGVkQ2hhcnNldE5hbWUgPSBqYXZhQ2hhcnNldE5hbWVQcm9wZXJ0eTsKLQkJLy8gfQotCQlpZiAoIWV4cGVjdGVkSmF2YUNoYXJzZXQuZXF1YWxzKCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiKSkgewotCQkJYm9vbGVhbiBleHBlY2VkUmVzdWx0ID0gZXhwZWN0ZWRKYXZhQ2hhcnNldC5lcXVhbHMoamF2YUNoYXJzZXROYW1lUHJvcGVydHkpOwotCQkJYXNzZXJ0VHJ1ZSgiamF2YSBiYXNlZCBjaGFyc2V0IG5hbWUgd2FzIG5vdCBhcyBleHBlY3RlZCIsIGV4cGVjZWRSZXN1bHQpOwotCQl9IGVsc2UgewotCQkJU3RyaW5nIGV4cGVjdGVkRGVmYXVsdCA9IE5vbkNvbnRlbnRCYXNlZEVuY29kaW5nUnVsZXMudXNlRGVmYXVsdE5hbWVSdWxlcyhudWxsKTsKLQkJCWJvb2xlYW4gRXhwZWN0ZWRSZXN1bHQgPSBleHBlY3RlZERlZmF1bHQuZXF1YWxzKGphdmFDaGFyc2V0TmFtZVByb3BlcnR5KTsKLQkJCWFzc2VydFRydWUoImphdmEgYmFzZWQgY2hhcnNldCBuYW1lIG5vdCBhcyBleHBlY3RlZCB3aGVuIHBsYXRmb3JtIGRlZmF1bHQgZXhwZWN0ZWQiLCBFeHBlY3RlZFJlc3VsdCk7Ci0JCX0KLQotCQlpZiAoZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQgIT0gbnVsbCkgewotCQkJYm9vbGVhbiBleHBlY3RlZFJlc3VsdCA9IGV4cGVjdGVkRGV0ZWN0ZWRDaGFyc2V0LmVxdWFscyhkZXRlY3RlZENoYXJzZXROYW1lUHJvcGVydHkpOwotCQkJYXNzZXJ0VHJ1ZSgiZGV0ZWN0ZWQgY2hhcnNldCBuYW1lIHdhcyBub3QgYXMgZXhwZWN0ZWQiLCBleHBlY3RlZFJlc3VsdCk7Ci0JCX0KLQkJLy8gdGVzdCBpZiBjYW4gcmVhZC93cml0ZSBmaWxlCi0JCVN0cmluZ0J1ZmZlciBidWZmZXIgPSByZWFkSW5wdXRTdHJlYW0ocmVhZGVyKTsKLQkJaWYgKERFQlVHX1RFU1RfREVUQUlMKSB7Ci0JCQlTeXN0ZW0ub3V0LnByaW50KGJ1ZmZlcik7Ci0JCX0KLQkJcmV0dXJuIHJlYWRlcjsKLQl9Ci0KLQkvKioKLQkgKiBUaGlzIG1ldGhvZCBpcyBqdXN0IHRvIGhlbHAgaGFuZGxlIHRyYW5zaXRpb24gZnJvbSB1c2luZwotCSAqIEVuY29kaW5nTWVtdGVudG8gdG8gbm90IHVzaW5nIGVuY29kaW5nTWVtZW50by4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXREZXRlY3RlZENoYXJzZXROYW1lKElDb250ZW50RGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKLQkJU3RyaW5nIHJlc3VsdCA9IG51bGw7Ci0JCXJlc3VsdCA9IChTdHJpbmcpIGRlc2NyaXB0aW9uLmdldFByb3BlcnR5KElDb250ZW50RGVzY3JpcHRpb25FeHRlbmRlZC5ERVRFQ1RFRF9DSEFSU0VUKTsKLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZQotCSAqIEByZXR1cm4KLQkgKi8KLQlwcml2YXRlIFN0cmluZyBnZXRHb29kRnVsbE1zZyhFeGNlcHRpb24gZSkgewotCQlTdHJpbmcgbXNnID0gZS5nZXRDbGFzcygpLmdldE5hbWUoKSArICI6ICIgKyBlLmdldE1lc3NhZ2UoKTsKLQkJcmV0dXJuIG1zZzsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsIG51bGwsICJ0ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIkVVQy1KUCIsICJFVUMtSlAiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTIwMjItSlAiLCAiSVNPLTIwMjItSlAiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCBudWxsLCAidGVzdGZpbGVzL2Nzcy9ub0VuY29kaW5nLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktNiIsICJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAiSVNPLTg4NTktNiIsICJ0ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MiLCBudWxsKTsKLQl9Ci0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsIG51bGwsICJ0ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsIG51bGwsICJ0ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiaXNvLTg4NTktMSIsICJ0ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAiSVNPLTg4NTktNiIsICJ0ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsIG51bGwsICJ0ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvaHRtbC9ub3F1b3Rlcy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvRW1wdHlGaWxlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTgiLCBudWxsLCAidGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm51bGwiLCAibnVsbCIsICJ0ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIndpbmRvd3MtMTI1MiIsICJDcDEyNTIiLCAidGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTIiLCAiSVNPLTg4NTktMiIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTMiLCAiSVNPLTg4NTktMyIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nQ2hhcnNldC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0yIiwgIklTTy04ODU5LTIiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgbnVsbCwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgIklTTy04ODU5LTgiLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktNyIsICJJU08tODg1OS03IiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsUGFnZUNhc2VOb25EZWZhdWx0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL2pzcC9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0zIiwgIklTTy04ODU5LTMiLCAidGVzdGZpbGVzL2pzcC90ZXN0QnJva2VuTGluZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJudWxsIiwgIm51bGwiLCAidGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCIsIG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLlVuc3VwcG9ydGVkQ2hhcnNldEV4Y2VwdGlvbldpdGhEZXRhaWwuY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIm51bGwiLCAibnVsbCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFKdW5rLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgbnVsbCwgInRlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQyLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb0VuY29kaW5nVmFsdWUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0yIiwgIklTTy04ODU5LTIiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZCRSIsICJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RVVEYxNi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkJFIiwgIlVURi0xNkJFIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkJFIiwgIlVURi0xNkJFIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL1VURjhXaXRoM0J5dGVCT00uanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktOCIsICJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNISUZUX0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtQi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNISUZUX0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyOTY2Ny9hdWRpLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiRVVDLUpQIiwgIkVVQy1KUCIsICJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIG51bGwpOwotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsCi0JLy8gInRlc3RmaWxlcy94bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBudWxsKTsKLQkvLyB9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueG1sIiwKLQkvLyBDaGFyYWN0ZXJDb2RpbmdFeGNlcHRpb24uY2xhc3MpOwotCS8vIH0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wiLAotCS8vIENoYXJhY3RlckNvZGluZ0V4Y2VwdGlvbi5jbGFzcyk7Ci0JLy8gfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJJU08tODg1OS0xIiwgInRlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMveG1sL3NoaWZ0amlzLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFKdW5rLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sIiwgbnVsbCk7Ci0JfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkLnhtbCIsIG51bGwpOwotCS8vIH0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQyLnhtbCIsIG51bGwpOwotCX0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIm51bGwiLCAibnVsbCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQzLnhtbCIsCi0JLy8gVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbC5jbGFzcyk7Ci0JLy8gfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JLy8gZG9UZXN0KCJVVEYtMTZCRSIsICJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLAotCS8vIENoYXJhY3RlckNvZGluZ0V4Y2VwdGlvbi5jbGFzcyk7Ci0JLy8gfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTE2TEUiLCAiVVRGLTE2TEUiLAotCS8vICJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JLy8gfQotCi0JLy8gcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCS8vIGRvVGVzdCgiVVRGLTE2TEUiLCAiVVRGLTE2TEUiLAotCS8vICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCIsIG51bGwpOwotCS8vIH0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi0xNkJFIiwgIlVURi0xNkJFIiwKLQkvLyAidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sIiwKLQkvLyBDaGFyYWN0ZXJDb2RpbmdFeGNlcHRpb24uY2xhc3MpOwotCS8vIH0KLQotCS8vIHB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkvLyBkb1Rlc3QoIlVURi0xNkJFIiwgIlVURi0xNkJFIiwKLQkvLyAidGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCIsIG51bGwpOwotCS8vIH0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL1VURjhXaXRoM0J5dGVCT00ueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdERvY3VtZW50U3RyZWFtQ2FzZUhUTUwoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1Lmh0bSIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3REb2N1bWVudFN0cmVhbUNhc2VKU1AoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJTSElGVF9KSVMiLCAidGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1LmpzcCIsIG51bGwpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb2RlZFJlYWRlck9uR2VubmVkRmlsZXMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmJiMTEwMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvZGVkUmVhZGVyT25HZW5uZWRGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzE3ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuR2VuZXJhdGVGaWxlczsKLQotCi0vKioKLSAqIFRoaXMgY2xhc3Mgc2hvdWxkIGNvbnRhaW4gYSAibWFzdGVyIGxpc3QiIG9mIGFsbCBmaWxlbmFtZXMgZ2VuZXJhdGVkIGJ5Ci0gKiB2YXJpb3VzIFZNJ3MgLi4uIHRoZW4gdGhlIHRlc3QgaW5nb3JlcyBpdCBpZiB0aGUgZmlsZW5hbWUncyBub3QgZm91bmQgZHVlCi0gKiB0byB0aGUgVk0gbm90IHN1cHBvcnRpbmcgaXQuCi0gKiAgCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0Q29kZWRSZWFkZXJPbkdlbm5lZEZpbGVzIGV4dGVuZHMgVGVzdENvZGVkUmVhZGVyIHsKLQlwcml2YXRlIHN0YXRpYyBpbnQgbm90UmFuID0gMDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb0dlblRlc3QoU3RyaW5nIGNoYXJzZXROYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoY2hhcnNldE5hbWUsIGNoYXJzZXROYW1lLCBHZW5lcmF0ZUZpbGVzLmdldE1haW5EaXJlY3RvcnlCYXNlZE9uVk1OYW1lKCkgKyAiL3htbC90ZXN0LSIgKyBjaGFyc2V0TmFtZSArICIueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0KFN0cmluZyBleHBlY3RlZEphdmFDaGFyc2V0LCBTdHJpbmcgZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQsIFN0cmluZyBmaWxlUGF0aCwgQ2xhc3MgZXhwZWN0ZWRFeGNlcHRpb24pIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0ICE9IG51bGwgJiYgZXhwZWN0ZWRKYXZhQ2hhcnNldC5pbmRleE9mKCJVVEYtMzIiKSA+IC0xKSB7Ci0JCQlyZXR1cm47IC8vd29uJ3QgdHJ5IDMyIGJpdCByaWdodCBub3cKLQkJfQotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0KLQkJLy8gaWYgdGhlcmUgbm8gZmlsZSwganVzdCBhc3N1bWUgdGhhdCBpdHMgZHVlIHRvIHdoaWNoIFZNIGlzCi0JCS8vIGJyaW5nIHVzZWQuIChDb3VsZCBiZSBpbXByb3ZlZCBpbiBmdXR1cmUgdG8gYXZvaWQgY291bnRpbmcgYXMgYQotCQkvLyB0ZXN0KSAtIHRoaXMgY2hlY2sgaW4gaGVyZSBmb3IgaW5pdGlhbCBkZWJ1Z2dpbmcgb25seQotCQlpZiAoZmlsZSA9PSBudWxsKSB7Ci0JCQlub3RSYW4rKzsKLQkJCWlmIChERUJVRykgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigidGVzdCBub3QgcmFuIHNpbmNlIGNoYXJzZXQgbm90IHN1cHBvcnRlZCBieSBWTTogIiArIGZpbGVQYXRoKTsKLQkJCX0KLQkJCXJldHVybjsKLQkJfQotCQlzdXBlci5kb1Rlc3QoZXhwZWN0ZWRKYXZhQ2hhcnNldCwgZXhwZWN0ZWREZXRlY3RlZENoYXJzZXQsIGZpbGVQYXRoLCBleHBlY3RlZEV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkJpZzUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJDRVNVLTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJDT01QT1VORF9URVhUIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUNOIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUpQIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiRVVDLUtSIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IxODAzMCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMjMxMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCSyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gImhwLXJvbWFuOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTAwNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0MSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA0NlMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwODgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEwOTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTExMTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTExMTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTExMjQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNjMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNjNDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzcwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzgxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzgzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMzg2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0zMzcyMkMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTQzNyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNzM3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS03NzUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTgwOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY0UyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg3NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODk3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MjEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkyMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTMyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MkMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQzQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OUMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTU0QyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1DTiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1DTi1HQiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1KUCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1LUiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTczKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS00IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02UyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS03IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjAxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMDgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIxMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKb2hhYiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SVSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS1NDNTYwMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNBcmFiaWMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjQ2VudHJhbEV1cm9wZSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDcm9hdGlhbiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDeXJpbGxpYyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNHcmVlayI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNIZWJyZXciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjSWNlbGFuZCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNSb21hbiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNSb21hbmlhIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1RoYWkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1R1cmtpc2giOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1VrcmFpbmUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlBUQ1AxNTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlNoaWZ0X0pJUyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVElTLTYyMCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVMtQVNDSUkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTYiOwotLy8JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0vLwl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2QkUiOwotLy8JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0vLwl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2TEUiOwotLy8JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMkJFIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzJMRSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04SiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy04NzQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTMyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTkzNiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05NDkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLS8qIAotcmVtb3ZlZCBmb3IgUFBDIG1hY2hpbmUgd2l0aCBJQk0gVk0gCi1odHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9MTI2NTAzCi0qLyAKLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiWC1Vbmljb2RlQmlnIjsKLS8vCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotLy8JfQotCi0vKiAKLXJlbW92ZWQgZm9yIFBQQyBtYWNoaW5lIHdpdGggSUJNIFZNIAotaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEyNjUwMwotKi8gCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlgtVW5pY29kZUxpdHRsZSI7Ci0vLwkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLS8vCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnREZXNjcmlwdGlvbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50RGVzY3JpcHRpb24uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWM4ZDRjNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnREZXNjcmlwdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNTIwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklSZXNvdXJjZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JV29ya3NwYWNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2VSb290OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnREZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudERlc2NyaXB0aW9uIGV4dGVuZHMgVGVzdENhc2UgewotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAiaHRtbC8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVSb290ID0KLQkvLyAiL2J1aWxkcy9Xb3Jrc3BhY2VzL0hlYWRXb3Jrc3BhY2Uvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy8iOwotCS8vCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVMb2NhdGlvbiA9IGZpbGVSb290ICsgZmlsZURpcjsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gdHJ1ZTsKLQkvL3ByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUdfVEVTVF9ERVRBSUwgPSBmYWxzZTsKLQkvLyBuZWVkcyB0byBiZSBzdGF0aWMsIHNpbmNlIEpVbml0IGNyZWF0ZXMgZGlmZmVyZW5jZSBpbnN0YW5jZXMgZm9yIGVhY2gKLQkvLyB0ZXN0Ci0JcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBmVGVzdFByb2plY3RJbml0aWFsaXplZDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEVTVF9QUk9KRUNUX05BTUUgPSAib3JnLmVjbGlwc2UuZW5jb2RpbmcucmVzb3VyY2UubmV3dGVzdHMiOwotCXN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5TZXR1cHMgPSAwOwotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUZXN0Q29udGVudERlc2NyaXB0aW9uKCkgewotCQlzdXBlcigpOwotCQkvL1N5c3RlbS5vdXQucHJpbnRsbihjdXJyZW50UGxhdGZvcm1DaGFyc2V0KTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7Ci0JCS8vCQl0cnkgewotCQkvLwkJCW5ldyBUZXN0Q29kZWRSZWFkZXIoKS5kb0FsbEZpbGVzKCk7Ci0JCS8vCQl9IGNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJLy8JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkvLwkJfSBjYXRjaCAoSU9FeGNlcHRpb24gZSkgewotCQkvLwkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCS8vCQl9Ci0JfQotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJLy9UZXN0c1BsdWdpbiB0ZXN0c1BsdWdpbiA9IChUZXN0c1BsdWdpbikKLQkJLy8gUGxhdGZvcm0uZ2V0UGx1Z2luKCJvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nIik7Ci0JCUlXb3Jrc3BhY2Ugd29ya3NwYWNlID0gVGVzdHNQbHVnaW4uZ2V0V29ya3NwYWNlKCk7Ci0JCUlXb3Jrc3BhY2VSb290IHJvb3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpOwotCQlmVGVzdFByb2plY3QgPSByb290LmdldFByb2plY3QoVEVTVF9QUk9KRUNUX05BTUUpOwotCQkvLyB0aGlzIGZvcm0gY3JlYXRlcyBwcm9qZWN0IGFzICJsaW5rZWQiIGJhY2sgdG8gJ2ZpbGVSb290JwotCQkvL2NyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JCS8vCQlJQ29udGFpbmVyIGRvdGVzdEZpbGVzID0gdGVzdFByb2plY3QuZ2V0Rm9sZGVyKCJkb3Rlc3RGaWxlcyIpOwotCQkvLwkJYXNzZXJ0VHJ1ZShkb3Rlc3RGaWxlcy5leGlzdHMoKSk7Ci0JCS8vCQlJUmVzb3VyY2VbXSBhbGxGb2xkZXJzID0gZG90ZXN0RmlsZXMubWVtYmVycygpOwotCQkvLwkJYXNzZXJ0Tm90TnVsbChhbGxGb2xkZXJzKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci5zZXRVcCgpOwotCQluU2V0dXBzKys7Ci0JCWlmICghZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQpIHsKLQkJCWdldEFuZENyZWF0ZVByb2plY3QoKTsKLQkJCS8vIHVuemlwIGZpbGVzIHRvIHRoZSByb290IG9mIHdvcmtzcGFjZSBkaXJlY3RvcnkKLQkJCVN0cmluZyBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgPSBmVGVzdFByb2plY3QuZ2V0TG9jYXRpb24oKS50b09TU3RyaW5nKCk7Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Gb2xkZXIgPSBkZXN0aW5hdGlvblByb2plY3RTdHJpbmcgKyAiLyI7Ci0JCQkvLyB0aGlzIHppcCBmaWxlIGlzIHNpdHRpbmcgaW4gdGhlICJyb290IiBvZiB0ZXN0IHBsdWdpbgotCQkJRmlsZSB6aXBGaWxlID0gVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoInRlc3RmaWxlcy56aXAiKTsKLQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotCQkJcHJvalV0aWwudW56aXBBbmRJbXBvcnQoemlwRmlsZSwgZGVzdGluYXRpb25Gb2xkZXIpOwotCQkJcHJvalV0aWwuaW5pdEphdmFQcm9qZWN0KFRFU1RfUFJPSkVDVF9OQU1FKTsKLQkJCWZUZXN0UHJvamVjdC5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCWZUZXN0UHJvamVjdEluaXRpYWxpemVkID0gdHJ1ZTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLnRlYXJEb3duKCk7Ci0JCW5TZXR1cHMtLTsKLQkJaWYgKG5TZXR1cHMgPT0gMCkgewotCQkJaWYgKCFERUJVRykgewotCQkJCS8vCQkJCURpc3BsYXkgZGlzcGxheSA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0RGlzcGxheSgpOwotCQkJCS8vCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLQkJCQkvLwkJCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCS8vCQkJCQkJUHJvamVjdFVuemlwVXRpbGl0eSBwcm9qVXRpbCA9IG5ldyBQcm9qZWN0VW56aXBVdGlsaXR5KCk7Ci0JCQkJLy8JCQkJCQlJUHJvamVjdCBwcm9qID0gZlRlc3RQcm9qZWN0OwotCQkJCS8vCQkJCQkJZlRlc3RQcm9qZWN0ID0gbnVsbDsKLQkJCQkvLwkJCQkJCXRyeSB7Ci0JCQkJLy8JCQkJCQkJcHJvalV0aWwuZGVsZXRlUHJvamVjdChwcm9qKTsKLQkJCQkvLwkJCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8JCQkJCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCQkvLwkJCQkJCX0KLQkJCQkvLwkJCQkJfQotCQkJCS8vCQkJCX0pOwotCQkJfQotCQl9Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0KFN0cmluZyBleHBlY3RlZEphdmFDaGFyc2V0LCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoZXhwZWN0ZWRKYXZhQ2hhcnNldCAhPSBudWxsICYmIGV4cGVjdGVkSmF2YUNoYXJzZXQuaW5kZXhPZigiVVRGLTMyIikgPiAtMSkgewotCQkJcmV0dXJuOyAvL3dvbid0IHRyeSAzMiBiaXQgcmlnaHQgbm93Ci0JCX0KLQkJZXhwZWN0ZWRKYXZhQ2hhcnNldCA9IG1hc3NhZ2VDaGFyc2V0KGV4cGVjdGVkSmF2YUNoYXJzZXQpOwotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIkVycm9yIGluIHRlc3QgY2FzZTogZmlsZSBub3QgZm91bmQ6ICIgKyBmaWxlUGF0aCwgZmlsZSk7Ci0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBmaWxlQ29udGVudERlc2NyaXB0aW9uID0gZmlsZS5nZXRDb250ZW50RGVzY3JpcHRpb24oKTsKLQkvLwlJQ29udGVudERlc2NyaXB0aW9uIHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbiA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmdldERlc2NyaXB0aW9uRm9yKGZpbGUuZ2V0Q29udGVudHMoKSwgZmlsZS5nZXROYW1lKCksIElDb250ZW50RGVzY3JpcHRpb24uQUxMKTsKLQkvLwlhc3NlcnRFcXVhbHMoImNvbXBhcmluZyBmaWxlIGFuZCBzdHJlYW0gY29udGVudERlc2NyaXB0aW9uIiwgZmlsZUNvbnRlbnREZXNjcmlwdGlvbiwgc3RyZWFtQ29udGVudERlc2NyaXB0aW9uKTsKLQotCQlhc3NlcnROb3ROdWxsKCJOdWxsIGNvbnRlbnQgZGVzY3JpcHRpb24iLCBmaWxlQ29udGVudERlc2NyaXB0aW9uKTsKLQkJU3RyaW5nIGZvdW5kQ2hhcnNldCA9IGZpbGVDb250ZW50RGVzY3JpcHRpb24uZ2V0Q2hhcnNldCgpOwotCQlmb3VuZENoYXJzZXQgPSBtYXNzYWdlQ2hhcnNldChmb3VuZENoYXJzZXQpOwotCi0JCWlmIChleHBlY3RlZEphdmFDaGFyc2V0ID09IG51bGwgfHwgZXhwZWN0ZWRKYXZhQ2hhcnNldC5lcXVhbHMoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIpKSB7Ci0JCQlTdHJpbmcgcGxhdGZvcm1EZWZhdWx0ID0gTm9uQ29udGVudEJhc2VkRW5jb2RpbmdSdWxlcy51c2VEZWZhdWx0TmFtZVJ1bGVzKG51bGwpOwotCQkJYXNzZXJ0VHJ1ZShmb3VuZENoYXJzZXQuZXF1YWxzKHBsYXRmb3JtRGVmYXVsdCkpOwotCQl9Ci0JCWVsc2UgewotCQkJYm9vbGVhbiBhc0V4cGVjdGVkID0gZm91bmRDaGFyc2V0LmVxdWFscyhleHBlY3RlZEphdmFDaGFyc2V0KTsKLQkJCWFzc2VydFRydWUoZm91bmRDaGFyc2V0ICsgIiBkaWQgbm90IGVxdWFsIHRoZSBleHBlY3RlZCAiICsgZXhwZWN0ZWRKYXZhQ2hhcnNldCArICIgKHRoaXMgaXMgYSBWTSBkZXBlbmRlbnQgdGVzdCkiLCBhc0V4cGVjdGVkKTsKLQkJfQotCi0KLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gZm91bmRDaGFyc2V0Ci0JICogQHJldHVybgotCSAqLwotCXByaXZhdGUgU3RyaW5nIG1hc3NhZ2VDaGFyc2V0KFN0cmluZyBmb3VuZENoYXJzZXQpIHsKLQkJU3RyaW5nIHJlc3VsdCA9IGZvdW5kQ2hhcnNldDsKLQkJaWYgKCJVVEYtMTZMRSIuZXF1YWxzKGZvdW5kQ2hhcnNldCkpIHsKLQkJCXJlc3VsdCA9ICJVVEYtMTYiOwotCQl9Ci0JCWVsc2UgaWYgKCJYLVVuaWNvZGVMaXR0bGUiLmVxdWFscyhmb3VuZENoYXJzZXQpKSB7Ci0JCQlyZXN1bHQgPSAiVVRGLTE2IjsKLQkJfQotCQllbHNlIGlmICgiWC1Vbmljb2RlQmlnIi5lcXVhbHMoZm91bmRDaGFyc2V0KSkgewotCQkJcmVzdWx0ID0gIlVURi0xNkJFIjsKLQkJfQotCi0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCAidGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJFVUMtSlAiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcyIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTIwMjItSlAiLCAidGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoImV4cGVjdFBsYXRmb3JtQ2hhcnNldCIsICJ0ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQuY3NzIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS02IiwgInRlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcyIsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgInRlc3RmaWxlcy9odG1sL0VtcHR5RmlsZS5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiZXhwZWN0UGxhdGZvcm1DaGFyc2V0IiwgInRlc3RmaWxlcy9odG1sL0xhcmdlTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTYiLCAidGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJleHBlY3RQbGF0Zm9ybUNoYXJzZXQiLCAidGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy9odG1sL05vcm1hbE5vbkRlZmF1bHQuaHRtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktOCIsICJ0ZXN0ZmlsZXMvanNwL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiYWJjIiwgInRlc3RmaWxlcy9qc3AvaW5WYWxpZEVuY29kaW5nVmFsdWUuanNwIiwgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmV4Y2VwdGlvbnMuVW5zdXBwb3J0ZWRDaGFyc2V0RXhjZXB0aW9uV2l0aERldGFpbC5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgid2luZG93cy0xMjUyIiwgInRlc3RmaWxlcy9qc3AvamF2YUVuY29kaW5nVmFsdWUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmdYU0wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMiIsICJ0ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlTm9FbmNvZGluZy5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0zIiwgInRlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTIiLCAidGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ1hNTFN5bnRheC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTciLCAidGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMyIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoInRlc3RqdW5rIiwgInRlc3RmaWxlcy9qc3AvdGVzdERlZmF1bHRFbmNvZGluZy5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJ0ZXN0anVuayIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AiLCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZXhjZXB0aW9ucy5VbnN1cHBvcnRlZENoYXJzZXRFeGNlcHRpb25XaXRoRGV0YWlsLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdEV4dHJhSnVuay5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3RJbGxGb3JtZWQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0yIiwgInRlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiSVNPLTg4NTktMSIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMvanNwL3Rlc3ROb3JtYWxDYXNlLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkJFIiwgInRlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkxFIiwgInRlc3RmaWxlcy9qc3AvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2QkUiLCAidGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTE2QkUiLCAidGVzdGZpbGVzL2pzcC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS04IiwgInRlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybS5qc3AiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlNoaWZ0X0pJUyIsICJ0ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJTaGlmdF9KSVMiLCAidGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI5NjY3L2F1ZGkuanNwIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJFVUMtSlAiLCAidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBudWxsKTsKLQl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCIsIG51bGwpOwotLy8JfQotLy8KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwiLCBudWxsKTsKLS8vCX0KLS8vCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwgbnVsbCk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJJU08tODg1OS0xIiwgInRlc3RmaWxlcy94bWwvTm9ybWFsTm9uRGVmYXVsdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiU2hpZnRfSklTIiwgInRlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFKdW5rLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RFeHRyYVZhbGlkU3R1ZmYueG1sIiwgbnVsbCk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgbnVsbCk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTggc3RhbmRhbG9uZT0iLCAidGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwiLCBqYXZhLm5pby5jaGFyc2V0LklsbGVnYWxDaGFyc2V0TmFtZUV4Y2VwdGlvbi5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIklTTy04ODU5LTEiLCAidGVzdGZpbGVzL3htbC90ZXN0TXVsdGlMaW5lLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtOCIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb0VuY29kaW5nVmFsdWUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdCgiVVRGLTgiLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RVVEYxNi54bWwiLCBudWxsKTsKLS8vCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KCJVVEYtMTZMRSIsICJ0ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi0xNkxFIiwgInRlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIiwgbnVsbCk7Ci0JfQotCi0vLwlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0vLwkJZG9UZXN0KCJVVEYtMTZCRSIsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiLCBudWxsKTsKLS8vCX0KLQotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCWRvVGVzdCgiVVRGLTE2QkUiLCAidGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbCIsIG51bGwpOwotLy8JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoIlVURi04IiwgInRlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwiLCBudWxsKTsKLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGVzY3JpcHRpb25Pbkdlbm5lZEZpbGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZTk1YzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURlc2NyaXB0aW9uT25HZW5uZWRGaWxlcy5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNzExICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuR2VuZXJhdGVGaWxlczsKLQotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXNjcmlwdGlvbk9uR2VubmVkRmlsZXMgZXh0ZW5kcyBUZXN0Q29udGVudERlc2NyaXB0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBpbnQgbm90UmFuID0gMDsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBkb0dlblRlc3QoU3RyaW5nIGNoYXJzZXROYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBHZW5lcmF0ZUZpbGVzLmdldE1haW5EaXJlY3RvcnlCYXNlZE9uVk1OYW1lKCkgKyAiL3htbC90ZXN0LSIgKyBjaGFyc2V0TmFtZSArICIueG1sIjsKLQkJZG9UZXN0KGNoYXJzZXROYW1lLCBmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0KFN0cmluZyBleHBlY3RlZEphdmFDaGFyc2V0LCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlpZiAoZXhwZWN0ZWRKYXZhQ2hhcnNldCAhPSBudWxsICYmIGV4cGVjdGVkSmF2YUNoYXJzZXQuaW5kZXhPZigiVVRGLTMyIikgPiAtMSkgewotCQkJcmV0dXJuOyAvL3dvbid0IHRyeSAzMiBiaXQgcmlnaHQgbm93Ci0JCX0KLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCi0JCS8vIGlmIHRoZXJlIG5vIGZpbGUsIGp1c3QgYXNzdW1lIHRoYXQgaXRzIGR1ZSB0byB3aGljaCBWTSBpcwotCQkvLyBicmluZyB1c2VkLiAoQ291bGQgYmUgaW1wcm92ZWQgaW4gZnV0dXJlIHRvIGF2b2lkIGNvdW50aW5nIGFzIGEKLQkJLy8gdGVzdCkgLSB0aGlzIGNoZWNrIGluIGhlcmUgZm9yIGluaXRpYWwgZGVidWdnaW5nIG9ubHkKLQkJaWYgKGZpbGUgPT0gbnVsbCkgewotCQkJbm90UmFuKys7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oInRlc3Qgbm90IHJhbiBzaW5jZSBjaGFyc2V0IG5vdCBzdXBwb3J0ZWQgYnkgVk06ICIgKyBmaWxlUGF0aCk7Ci0JCQl9Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc3VwZXIuZG9UZXN0KGV4cGVjdGVkSmF2YUNoYXJzZXQsIGZpbGVQYXRoLCBleHBlY3RlZEV4Y2VwdGlvbik7Ci0JfQotCi0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQmlnNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkNFU1UtOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkNPTVBPVU5EX1RFWFQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtQ04iOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtSlAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtS1IiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjE4MDMwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IyMzEyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0JLIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiaHAtcm9tYW44IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDA2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQ2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQ2UyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA4OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA5OCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTExNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTExNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTEyNCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM2MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM2M0MiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNzAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTMzNzIyQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNDM3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS03MzciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTc3NSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODA4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU1IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU4IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTkiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjRTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODc0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04OTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkyMSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTIyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MzIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQyQyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQzIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDNDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ5QyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTUwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NTRDIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUNOIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUNOLUdCIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUpQIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUtSIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTAiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTMiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0zIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTQiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTZTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTciOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS05IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMDEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIwOCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjEyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpvaGFiIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVJVIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTg4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtVSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLU0M1NjAxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0FyYWJpYyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDZW50cmFsRXVyb3BlIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0Nyb2F0aWFuIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0N5cmlsbGljIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0dyZWVrIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0hlYnJldyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNJY2VsYW5kIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1JvbWFuIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1JvbWFuaWEiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVGhhaSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVHVya2lzaCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVWtyYWluZSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiUFRDUDE1NCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiU2hpZnRfSklTIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJUSVMtNjIwIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVUy1BU0NJSSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLS8vCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLS8vCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2QkUiOwotLy8JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZMRSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMzJCRSI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyTEUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi04IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOEoiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUxIjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTIiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2UyI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU3IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTgiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtODc0IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTkzMiI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05MzYiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTQ5IjsKLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTk1MCI7Ci0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0JfQotLyogCi1yZW1vdmVkIGZvciBQUEMgbWFjaGluZSB3aXRoIElCTSBWTSAKLWh0dHBzOi8vYnVncy5lY2xpcHNlLm9yZy9idWdzL3Nob3dfYnVnLmNnaT9pZD0xMjY1MDMKLSovIAotLy8JcHVibGljIHZvaWQgdGVzdEZpbGUxMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotLy8JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJYLVVuaWNvZGVCaWciOwotLy8JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7Ci0vLwl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJYLVVuaWNvZGVMaXR0bGUiOwotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOwotCX0KLQotCi0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3JlYWQvVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZWY2NDEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5pby5JbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLlRlc3RzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbC5Qcm9qZWN0VW56aXBVdGlsaXR5OwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVEZXRlY3Rpb24gZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXN0YXRpYyBJUHJvamVjdCBmVGVzdFByb2plY3Q7Ci0JLy8gbmVlZHMgdG8gYmUgc3RhdGljLCBzaW5jZSBKVW5pdCBjcmVhdGVzIGRpZmZlcmVuY2UgaW5zdGFuY2VzIGZvciBlYWNoCi0JLy8gdGVzdAotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZlRlc3RQcm9qZWN0SW5pdGlhbGl6ZWQ7Ci0JcHJpdmF0ZSBzdGF0aWMgaW50IG5TZXR1cHMgPSAwOwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BST0pFQ1RfTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnRlbXAudGVzdHMuZW5jb2RpbmcucmVzb3VyY2UubmV3dGVzdHMiOwotCi0JcHJpdmF0ZSBzdGF0aWMgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpOwotCQl9Ci0JCW1vbml0b3IuYmVnaW5UYXNrKCJjcmVhdGluZyB0ZXN0IHByb2plY3QiLCAxMCk7Ci0JCS8vIGNyZWF0ZSB0aGUgcHJvamVjdAotCQl0cnkgewotCQkJaWYgKCFwcm9qZWN0LmV4aXN0cygpKSB7Ci0JCQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvamVjdC5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvamVjdC5nZXROYW1lKCkpOwotCQkJCWlmIChQbGF0Zm9ybS5nZXRMb2NhdGlvbigpLmVxdWFscyhsb2NhdGlvblBhdGgpKSB7Ci0JCQkJCWxvY2F0aW9uUGF0aCA9IG51bGw7Ci0JCQkJfQotCQkJCWRlc2Muc2V0TG9jYXRpb24obG9jYXRpb25QYXRoKTsKLQkJCQlwcm9qZWN0LmNyZWF0ZShkZXNjLCBtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJCWlmICghcHJvamVjdC5pc09wZW4oKSkgewotCQkJCXByb2plY3Qub3Blbihtb25pdG9yKTsKLQkJCQltb25pdG9yID0gbnVsbDsKLQkJCX0KLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChtb25pdG9yICE9IG51bGwpIHsKLQkJCQltb25pdG9yLmRvbmUoKTsKLQkJCX0KLQkJfQotCX0KLQotCXByaXZhdGUgc3RhdGljIHZvaWQgZ2V0QW5kQ3JlYXRlUHJvamVjdCgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVdvcmtzcGFjZSB3b3Jrc3BhY2UgPSBUZXN0c1BsdWdpbi5nZXRXb3Jrc3BhY2UoKTsKLQkJSVdvcmtzcGFjZVJvb3Qgcm9vdCA9IHdvcmtzcGFjZS5nZXRSb290KCk7Ci0JCWZUZXN0UHJvamVjdCA9IHJvb3QuZ2V0UHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCS8vIHRoaXMgZm9ybSBjcmVhdGVzIHByb2plY3QgYXMgImxpbmtlZCIgYmFjayB0byAnZmlsZVJvb3QnCi0JCS8vIGNyZWF0ZVByb2plY3QodGVzdFByb2plY3QsIG5ldyBQYXRoKGZpbGVSb290KSwgbnVsbCk7Ci0JCWNyZWF0ZVByb2plY3QoZlRlc3RQcm9qZWN0LCBudWxsLCBudWxsKTsKLQkJZlRlc3RQcm9qZWN0LnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQlhc3NlcnRUcnVlKGZUZXN0UHJvamVjdC5leGlzdHMoKSk7Ci0JfQotCi0JLyoqCi0JICogCi0JICovCi0JcHVibGljIFRlc3RDb250ZW50VHlwZURldGVjdGlvbigpIHsKLQkJc3VwZXIoKTsKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGN1cnJlbnRQbGF0Zm9ybUNoYXJzZXQpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIGRvVGVzdChTdHJpbmcgZXhwZWN0ZWRDb250ZW50VHlwZSwgU3RyaW5nIGZpbGVQYXRoLCBDbGFzcyBleHBlY3RlZEV4Y2VwdGlvbikgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJSUZpbGUgZmlsZSA9IChJRmlsZSkgZlRlc3RQcm9qZWN0LmZpbmRNZW1iZXIoZmlsZVBhdGgpOwotCQlhc3NlcnROb3ROdWxsKCJFcnJvciBpbiB0ZXN0IGNhc2U6IGZpbGUgbm90IGZvdW5kOiAiICsgZmlsZVBhdGgsIGZpbGUpOwotCi0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24gPSBkb0dldENvbnRlbnRUeXBlQmFzZWRPblN0cmVhbShmaWxlKTsKLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBmaWxlQ29udGVudERlc2NyaXB0aW9uID0gZG9HZXRDb250ZW50VHlwZUJhc2VkT25GaWxlKGZpbGUpOwotCi0JCUlDb250ZW50VHlwZSBmaWxlQ29udGVudFR5cGUgPSBmaWxlQ29udGVudERlc2NyaXB0aW9uLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoImZpbGUgY29udGVudCB0eXBlIHdhcyBudWxsIiwgZmlsZUNvbnRlbnRUeXBlKTsKLQotCQlJQ29udGVudFR5cGUgc3RyZWFtQ29udGVudFR5cGUgPSBzdHJlYW1Db250ZW50RGVzY3JpcHRpb24uZ2V0Q29udGVudFR5cGUoKTsKLQkJYXNzZXJ0Tm90TnVsbCgic3RyZWFtIGNvbnRlbnQgdHlwZSB3YXMgbnVsbCIsIHN0cmVhbUNvbnRlbnRUeXBlKTsKLQotCQlhc3NlcnRFcXVhbHMoImNvbXBhcmluZyBjb250ZW50IHR5cGUgYmFzZWQgb24gZmlsZSBhbmQgc3RyZWFtOiAiLCBmaWxlQ29udGVudFR5cGUsIHN0cmVhbUNvbnRlbnRUeXBlKTsKLQotCQkvLyBpZiBlcXVhbCwgYWJvdmUsIGFzIGV4cGVjdGVkLCB0aGVuIG9ubHkgbmVlZCB0byBjaGVjayBvbmUuCi0JCWFzc2VydEVxdWFscygiY29tcGFyZWluZyB3aXRoIGV4cGVjdGVkIGNvbnRlbnQgdHlwZSBpZCIsIGV4cGVjdGVkQ29udGVudFR5cGUsIGZpbGVDb250ZW50VHlwZS5nZXRJZCgpKTsKLQotCX0KLQotCXByb3RlY3RlZCBJQ29udGVudERlc2NyaXB0aW9uIGRvR2V0Q29udGVudFR5cGVCYXNlZE9uU3RyZWFtKElGaWxlIGZpbGUpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCUlDb250ZW50RGVzY3JpcHRpb24gc3RyZWFtQ29udGVudERlc2NyaXB0aW9uID0gbnVsbDsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBudWxsOwotCQl0cnkgewotCQkJaW5wdXRTdHJlYW0gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0JCQlzdHJlYW1Db250ZW50RGVzY3JpcHRpb24gPSBQbGF0Zm9ybS5nZXRDb250ZW50VHlwZU1hbmFnZXIoKS5nZXREZXNjcmlwdGlvbkZvcihpbnB1dFN0cmVhbSwgZmlsZS5nZXROYW1lKCksIElDb250ZW50RGVzY3JpcHRpb24uQUxMKTsKLQkJfQotCQlmaW5hbGx5IHsKLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfQotCQlhc3NlcnROb3ROdWxsKCJjb250ZW50IGRlc2NyaXB0aW9uIHdhcyBudWxsIiwgc3RyZWFtQ29udGVudERlc2NyaXB0aW9uKTsKLQkJcmV0dXJuIHN0cmVhbUNvbnRlbnREZXNjcmlwdGlvbjsKLQl9Ci0KLQlwcm90ZWN0ZWQgSUNvbnRlbnREZXNjcmlwdGlvbiBkb0dldENvbnRlbnRUeXBlQmFzZWRPbkZpbGUoSUZpbGUgZmlsZSkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlJQ29udGVudERlc2NyaXB0aW9uIGZpbGVDb250ZW50RGVzY3JpcHRpb24gPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCQlhc3NlcnROb3ROdWxsKCJmaWxlIGNvbnRlbnQgZGVzY3JpcHRpb24gd2FzIG51bGwiLCBmaWxlQ29udGVudERlc2NyaXB0aW9uKTsKLQkJcmV0dXJuIGZpbGVDb250ZW50RGVzY3JpcHRpb247Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgZG9UZXN0Rm9yUGFyZW50KFN0cmluZyBleHBlY3RlZENvbnRlbnRUeXBlLCBTdHJpbmcgZmlsZVBhdGgsIENsYXNzIGV4cGVjdGVkRXhjZXB0aW9uKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlJRmlsZSBmaWxlID0gKElGaWxlKSBmVGVzdFByb2plY3QuZmluZE1lbWJlcihmaWxlUGF0aCk7Ci0JCWFzc2VydE5vdE51bGwoIkVycm9yIGluIHRlc3QgY2FzZTogZmlsZSBub3QgZm91bmQ6ICIgKyBmaWxlUGF0aCwgZmlsZSk7Ci0KLQkJSUNvbnRlbnREZXNjcmlwdGlvbiBjb250ZW50RGVzY3JpcHRpb24gPSBmaWxlLmdldENvbnRlbnREZXNjcmlwdGlvbigpOwotCQlpZiAoY29udGVudERlc2NyaXB0aW9uID09IG51bGwpIHsKLQkJCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbnVsbDsKLQkJCXRyeSB7Ci0JCQkJaW5wdXRTdHJlYW0gPSBmaWxlLmdldENvbnRlbnRzKCk7Ci0JCQkJY29udGVudERlc2NyaXB0aW9uID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZ2V0RGVzY3JpcHRpb25Gb3IoaW5wdXRTdHJlYW0sIGZpbGUuZ2V0TmFtZSgpLCBJQ29udGVudERlc2NyaXB0aW9uLkFMTCk7Ci0JCQl9Ci0JCQlmaW5hbGx5IHsKLQkJCQlpZiAoaW5wdXRTdHJlYW0gIT0gbnVsbCkgewotCQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlhc3NlcnROb3ROdWxsKCJjb250ZW50IGRlc2NyaXB0aW9uIHdhcyBudWxsIiwgY29udGVudERlc2NyaXB0aW9uKTsKLQkJSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gY29udGVudERlc2NyaXB0aW9uLmdldENvbnRlbnRUeXBlKCk7Ci0JCWFzc2VydE5vdE51bGwoImNvbnRlbnQgdHlwZSB3YXMgbnVsbCIsIGNvbnRlbnRUeXBlKTsKLQotCQlJQ29udGVudFR5cGUgcGFyZW50Q29udGVudFR5cGUgPSBjb250ZW50VHlwZTsKLQkJYm9vbGVhbiBmb3VuZCA9IGZhbHNlOwotCQl3aGlsZSAocGFyZW50Q29udGVudFR5cGUgIT0gbnVsbCAmJiAhZm91bmQpIHsKLQkJCWZvdW5kID0gZXhwZWN0ZWRDb250ZW50VHlwZS5lcXVhbHMocGFyZW50Q29udGVudFR5cGUuZ2V0SWQoKSk7Ci0JCQlwYXJlbnRDb250ZW50VHlwZSA9IHBhcmVudENvbnRlbnRUeXBlLmdldEJhc2VUeXBlKCk7Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgiZGlkIG5vdCBmaW5kICciICsgZXhwZWN0ZWRDb250ZW50VHlwZSArICInIGluIHBhcmVudCBjaGFpbiBvZiBiYXNlIHR5cGVzIiwgZm91bmQpOwotCi0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc2V0VXAoKTsKLQkJblNldHVwcysrOwotCQlpZiAoIWZUZXN0UHJvamVjdEluaXRpYWxpemVkKSB7Ci0JCQlnZXRBbmRDcmVhdGVQcm9qZWN0KCk7Ci0JCQkvLyB1bnppcCBmaWxlcyB0byB0aGUgcm9vdCBvZiB3b3Jrc3BhY2UgZGlyZWN0b3J5Ci0JCQlTdHJpbmcgZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nID0gZlRlc3RQcm9qZWN0LmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpOwotCQkJU3RyaW5nIGRlc3RpbmF0aW9uRm9sZGVyID0gZGVzdGluYXRpb25Qcm9qZWN0U3RyaW5nICsgIi8iOwotCQkJLy8gdGhpcyB6aXAgZmlsZSBpcyBzaXR0aW5nIGluIHRoZSAicm9vdCIgb2YgdGVzdCBwbHVnaW4KLQkJCUZpbGUgemlwRmlsZSA9IFRlc3RzUGx1Z2luLmdldFRlc3RGaWxlKCJ0ZXN0ZmlsZXMuemlwIik7Ci0JCQlQcm9qZWN0VW56aXBVdGlsaXR5IHByb2pVdGlsID0gbmV3IFByb2plY3RVbnppcFV0aWxpdHkoKTsKLQkJCXByb2pVdGlsLnVuemlwQW5kSW1wb3J0KHppcEZpbGUsIGRlc3RpbmF0aW9uRm9sZGVyKTsKLQkJCXByb2pVdGlsLmluaXRKYXZhUHJvamVjdChURVNUX1BST0pFQ1RfTkFNRSk7Ci0JCQlmVGVzdFByb2plY3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQlmVGVzdFByb2plY3RJbml0aWFsaXplZCA9IHRydWU7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQlzdXBlci50ZWFyRG93bigpOwotCQluU2V0dXBzLS07Ci0JCWlmIChuU2V0dXBzID09IDApIHsKLQkJCWlmICghREVCVUcpIHsKLS8vCQkJCSBEaXNwbGF5IGRpc3BsYXkgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldERpc3BsYXkoKTsKLS8vCQkJCWRpc3BsYXkuYXN5bmNFeGVjKG5ldyBSdW5uYWJsZSgpIHsKLS8vCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0vLwkJCQkJCVByb2plY3RVbnppcFV0aWxpdHkgcHJvalV0aWwgPSBuZXcgUHJvamVjdFVuemlwVXRpbGl0eSgpOwotLy8JCQkJCQlJUHJvamVjdCBwcm9qID0gZlRlc3RQcm9qZWN0OwotLy8JCQkJCQlmVGVzdFByb2plY3QgPSBudWxsOwotLy8JCQkJCQl0cnkgewotLy8JCQkJCQkJcHJvalV0aWwuZGVsZXRlUHJvamVjdChwcm9qKTsKLS8vCQkJCQkJfQotLy8JCQkJCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLS8vCQkJCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0vLwkJCQkJCX0KLS8vCQkJCQl9Ci0vLwkJCQl9KTsKLQkJCX0KLQkJfQotCX0KLQotCXByb3RlY3RlZCBzdGF0aWMgSVByb2plY3QgZ2V0VGVzdFByb2plY3QoKSB7Ci0JCXJldHVybiBmVGVzdFByb2plY3Q7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZURldGVjdGlvbkZvclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MGUyZTY5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVEZXRlY3Rpb25Gb3JYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotCi1wdWJsaWMgY2xhc3MgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uRm9yWE1MIGV4dGVuZHMgVGVzdENvbnRlbnRUeXBlRGV0ZWN0aW9uIHsKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueG1sc291cmNlIjsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRYU0xDb250ZW50VHlwZSA9ICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUueHNsc291cmNlIjsKLQkKLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgZXhwZWN0ZWRYTUxDb250ZW50VHlwZSA9ICJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIjsKLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwM1AoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3RGb3JQYXJlbnQoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA0YigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9ldWNqcC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueG1sIiwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBmaWxlIGlzIGlsbGZvcm1lZCBpbiBpdHMgc3BlY2lmaWVkIGNoYXJzZXQKLQkgKiBhbmQgY2hhcmFjdGVycy4gCi0JICogQHRocm93cyBDb3JlRXhjZXB0aW9uCi0JICogQHRocm93cyBJT0V4Y2VwdGlvbgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWFNMQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDdQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL01hbGZvcm1lZE5vRW5jb2RpbmcueHNsIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbCIsIG51bGwpOwotCX0KLQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvc2hpZnRqaXMueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0RXh0cmFWYWxpZFN0dWZmLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sIiwgamF2YS5uaW8uY2hhcnNldC5JbGxlZ2FsQ2hhcnNldE5hbWVFeGNlcHRpb24uY2xhc3MpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQ0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9ybWFsQ2FzZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwV1MoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyB3aGl0ZXNwYWNlIChDUkxGKSBiZWZvcmUgeG1sIGRlY2xhcmF0aW9uCi0JCWRvVGVzdChleHBlY3RlZEN1c3RvbVhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwV1MyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gd2hpdGVzcGFjZSAoc3BhY2Ugb25seSkgYmVmb3JlIHhtbCBkZWNsYXJhdGlvbgotCQlkb1Rlc3QoZXhwZWN0ZWRDdXN0b21YTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbDIueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjBXUzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyB3aGl0ZXNwYWNlIChzcGFjZSwgdGFicywgYW5kIENSIG9ubHkpIGJlZm9yZSB4bWwgZGVjbGFyYXRpb24KLQkJZG9UZXN0KGV4cGVjdGVkQ3VzdG9tWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wzLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIwUCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gdGFnIChub3QganVzdCB3aGl0ZSBzcGFjZSkgYmVmb3JlIHhtbCBkZWNsYXJhdGlvbi4KLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIxUCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsQXRGaXJzdC54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0Tm9YTUxEZWNsSW5MYXJnZUZpbGUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjJQKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJZG9UZXN0Rm9yUGFyZW50KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQkvLyBsYXJnZSwgdXRmMTYsIGJ1dCBubyB4bWxEZWNsCi0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI0UCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJLy8gaWxsZm9ybWVkLCBpcyBpbiB1dGYxNiwgYnV0IG5vdCBpbiBoZWFkZXIsIG5vdCBpbiBlbmNvZGluZz0gc3BlYy4KLQkJZG9UZXN0KGV4cGVjdGVkWE1MQ29udGVudFR5cGUsICJ0ZXN0ZmlsZXMveG1sL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLnhtbCIsIG51bGwpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1UCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdEZvclBhcmVudChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sIiwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlkb1Rlc3QoZXhwZWN0ZWRYTUxDb250ZW50VHlwZSwgInRlc3RmaWxlcy94bWwvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiLCBudWxsKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiB7Ci0JCWRvVGVzdChleHBlY3RlZFhNTENvbnRlbnRUeXBlLCAidGVzdGZpbGVzL3htbC9VVEY4V2l0aDNCeXRlQk9NLnhtbCIsIG51bGwpOwotCX0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZXMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvcmVhZC9UZXN0Q29udGVudFR5cGVzLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YTYxNjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy9yZWFkL1Rlc3RDb250ZW50VHlwZXMuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5yZWFkOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50VHlwZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudC5JQ29udGVudFR5cGVNYW5hZ2VyOwotCi0KLXB1YmxpYyBjbGFzcyBUZXN0Q29udGVudFR5cGVzIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgc3RhdGljIGZpbmFsIGJvb2xlYW4gREVCVUcgPSBmYWxzZTsKLQotCXB1YmxpYyB2b2lkIHRlc3RDcmVhdGlvbigpIHsKLQkJSUNvbnRlbnRUeXBlTWFuYWdlciByZWdpc3RyeSA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpOwotCQlhc3NlcnRUcnVlKCJjb250ZW50IHR5cGUgaWRlbnRpZmVyIHJlZ2lzdHJ5IG11c3QgZXhpc3QiLCByZWdpc3RyeSAhPSBudWxsKTsKLQkJSUNvbnRlbnRUeXBlW10gYWxsVHlwZXMgPSByZWdpc3RyeS5nZXRBbGxDb250ZW50VHlwZXMoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBhbGxUeXBlcy5sZW5ndGg7IGkrKykgewotCQkJSUNvbnRlbnRUeXBlIGNvbnRlbnRUeXBlID0gYWxsVHlwZXNbaV07Ci0JCQlJQ29udGVudFR5cGUgcGFyZW50VHlwZSA9IGNvbnRlbnRUeXBlLmdldEJhc2VUeXBlKCk7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50KGNvbnRlbnRUeXBlKTsKLQotCQkJCWlmIChwYXJlbnRUeXBlICE9IG51bGwpIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCIgKGV4dGVuZHMgIiArIHBhcmVudFR5cGUgKyAiKSIpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJU3lzdGVtLm91dC5wcmludGxuKCk7Ci0JCQkJfQotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiICAgIiArIGNvbnRlbnRUeXBlLmdldE5hbWUoKSk7Ci0JCQl9Ci0JCQlTdHJpbmdbXSBmaWxlc3BlY3MgPSBjb250ZW50VHlwZS5nZXRGaWxlU3BlY3MoSUNvbnRlbnRUeXBlLkZJTEVfRVhURU5TSU9OX1NQRUMgfCBJQ29udGVudFR5cGUuRklMRV9OQU1FX1NQRUMpOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJZm9yIChpbnQgaiA9IDA7IGogPCBmaWxlc3BlY3MubGVuZ3RoOyBqKyspIHsKLQkJCQkJU3RyaW5nIGZpbGVzcGVjID0gZmlsZXNwZWNzW2pdOwotCQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAgIiArIGZpbGVzcGVjKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvdXRpbC9Qcm9qZWN0VW56aXBVdGlsaXR5LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkYWQ1ODIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1Byb2plY3RVbnppcFV0aWxpdHkuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcudXRpbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlT3V0cHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci1pbXBvcnQgamF2YS5sYW5nLnJlZmxlY3QuSW52b2NhdGlvblRhcmdldEV4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkVudW1lcmF0aW9uOwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotaW1wb3J0IGphdmEudXRpbC56aXAuWmlwRW50cnk7Ci1pbXBvcnQgamF2YS51dGlsLnppcC5aaXBGaWxlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUmVzb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVdvcmtzcGFjZVJvb3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGxhdGZvcm07Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuYWN0aW9ucy5Xb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuZGlhbG9ncy5JT3ZlcndyaXRlUXVlcnk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkud2l6YXJkcy5kYXRhdHJhbnNmZXIuRmlsZVN5c3RlbVN0cnVjdHVyZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLndpemFyZHMuZGF0YXRyYW5zZmVyLklJbXBvcnRTdHJ1Y3R1cmVQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS53aXphcmRzLmRhdGF0cmFuc2Zlci5JbXBvcnRPcGVyYXRpb247Ci0KLS8qKgotICogSW1wb3J0cyB6aXBwZWQgZmlsZXMgaW50byB0aGUgdGVzdCB3b3Jrc3BhY2UuIERlbGV0ZXMgYWxsIHByb2plY3RzIGluCi0gKiB3b3Jrc3BhY2UuCi0gKiAKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBQcm9qZWN0VW56aXBVdGlsaXR5IHsKLQljbGFzcyBNeU92ZXJ3cml0ZVF1ZXJ5IGltcGxlbWVudHMgSU92ZXJ3cml0ZVF1ZXJ5IHsKLQkJcHVibGljIFN0cmluZyBxdWVyeU92ZXJ3cml0ZShTdHJpbmcgcGF0aFN0cmluZykgewotCQkJcmV0dXJuIEFMTDsKLQkJfQotCX0KLQotCXB1YmxpYyBmaW5hbCBzdGF0aWMgU3RyaW5nIFBST0pFQ1RfWklQU19GT0xERVIgPSAiUHJvamVjdFRlc3RGaWxlcyI7Ci0JcHJpdmF0ZSBMaXN0IGZDcmVhdGVkUHJvamVjdHMgPSBudWxsOwotCi0JcHVibGljIFByb2plY3RVbnppcFV0aWxpdHkoKSB7Ci0JCS8vIGZvciBkZWxldGlvbiBsYXRlcgotCQlmQ3JlYXRlZFByb2plY3RzID0gbmV3IEFycmF5TGlzdCgpOwotCX0KLQotCS8qKgotCSAqIEBwYXJhbSBmaWxlVG9JbXBvcnQKLQkgKiAgICAgICAgICAgIHRoZSBmaWxlIHlvdSB3aXNoIHRvIGltcG9ydAotCSAqIEBwYXJhbSBmb2xkZXJQYXRoCi0JICogICAgICAgICAgICB0aGUgY29udGFpbmVyIHBhdGggd2l0aGluIHRoZSB3b3Jrc3BhY2UKLQkgKi8KLQlwdWJsaWMgdm9pZCBpbXBvcnRGaWxlKEZpbGUgZmlsZVRvSW1wb3J0LCBTdHJpbmcgZm9sZGVyUGF0aCkgewotCQlXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgaW1wb3J0UHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCXRyeSB7Ci0JCQlpZiAoZmlsZVRvSW1wb3J0LmV4aXN0cygpKSB7Ci0JCQkJSVBhdGggY29udGFpbmVyUGF0aCA9IG5ldyBQYXRoKGZvbGRlclBhdGgpOwotCQkJCS8vZkNyZWF0ZWRQcm9qZWN0cy5hZGQoZm9sZGVyUGF0aCk7Ci0JCQkJSUltcG9ydFN0cnVjdHVyZVByb3ZpZGVyIHByb3ZpZGVyID0gRmlsZVN5c3RlbVN0cnVjdHVyZVByb3ZpZGVyLklOU1RBTkNFOwotCQkJCUlPdmVyd3JpdGVRdWVyeSBvdmVyd3JpdGVJbXBsZW1lbnRvciA9IG5ldyBNeU92ZXJ3cml0ZVF1ZXJ5KCk7Ci0JCQkJRmlsZVtdIGZpbGVzVG9JbXBvcnQgPSB7ZmlsZVRvSW1wb3J0fTsKLQkJCQlJbXBvcnRPcGVyYXRpb24gaW1wb3J0T3AgPSBuZXcgSW1wb3J0T3BlcmF0aW9uKGNvbnRhaW5lclBhdGgsIG51bGwsIHByb3ZpZGVyLCBvdmVyd3JpdGVJbXBsZW1lbnRvciwgQXJyYXlzLmFzTGlzdChmaWxlc1RvSW1wb3J0KSk7Ci0JCQkJaW1wb3J0T3Auc2V0Q3JlYXRlQ29udGFpbmVyU3RydWN0dXJlKGZhbHNlKTsKLQkJCQlpbXBvcnRPcC5zZXRPdmVyd3JpdGVSZXNvdXJjZXModHJ1ZSk7Ci0JCQkJaW1wb3J0T3AucnVuKGltcG9ydFByb2dyZXNzKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigiaGFuZGxlIHNvdXJjZSBkb2Vzbid0IGV4aXN0Iik7Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEV4Y2VwdGlvbiBleCkgewotCQkJZXgucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpbXBvcnRQcm9ncmVzcy5kb25lKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiB0aGUgZm9sbG93aW5nIGlzIGxvZ2ljIGZyb20KLQkgKiBodHRwOi8vd3d3LmRldnNoZWQuY29tL2MvYS9KYXZhL1ppcC1NZWV0cy1KYXZhLzIvCi0JICovCi0JLy8gc3BlY2lmeSBidWZmZXIgc2l6ZSBmb3IgZXh0cmFjdGlvbgotCXN0YXRpYyBmaW5hbCBpbnQgQlVGRkVSID0gMjA0ODsKLQotCXB1YmxpYyB2b2lkIHVuemlwQW5kSW1wb3J0KEZpbGUgaW5GaWxlLCBTdHJpbmcgZGVzdGluYXRpb25EaXJlY3RvcnkpIHsKLQkJdHJ5IHsKLQkJCS8vIFNwZWNpZnkgZmlsZSB0byBkZWNvbXByZXNzCi0JCQlTdHJpbmcgaW5GaWxlTmFtZSA9IGluRmlsZS5nZXRBYnNvbHV0ZVBhdGgoKTsgLy8iYzovZXhhbXBsZS56aXAiOwotCQkJLy8gU3BlY2lmeSBkZXN0aW5hdGlvbiB3aGVyZSBmaWxlIHdpbGwgYmUgdW56aXBwZWQKLQkJCS8vU3RyaW5nIGRlc3RpbmF0aW9uRGlyZWN0b3J5ID0KLQkJCS8vICJkOi9lY2xpcHNlZGV2L001X1NTRV9URVNUU19XT1JLU1BBQ0UvIjsgLy8iYzovdGVtcC8iOwotCQkJRmlsZSBzb3VyY2VaaXBGaWxlID0gbmV3IEZpbGUoaW5GaWxlTmFtZSk7Ci0JCQlGaWxlIHVuemlwRGVzdGluYXRpb25EaXJlY3RvcnkgPSBuZXcgRmlsZShkZXN0aW5hdGlvbkRpcmVjdG9yeSk7Ci0JCQkvLyBPcGVuIFppcCBmaWxlIGZvciByZWFkaW5nCi0JCQlaaXBGaWxlIHppcEZpbGUgPSBuZXcgWmlwRmlsZShzb3VyY2VaaXBGaWxlLCBaaXBGaWxlLk9QRU5fUkVBRCk7Ci0JCQkvLyBDcmVhdGUgYW4gZW51bWVyYXRpb24gb2YgdGhlIGVudHJpZXMgaW4gdGhlIHppcCBmaWxlCi0JCQlFbnVtZXJhdGlvbiB6aXBGaWxlRW50cmllcyA9IHppcEZpbGUuZW50cmllcygpOwotCQkJU3RyaW5nIHByb2plY3RGb2xkZXJOYW1lID0gbnVsbDsKLQkJCUlQcm9qZWN0IGN1cnJlbnRQcm9qZWN0ID0gbnVsbDsKLQkJCS8vIFByb2Nlc3MgZWFjaCBlbnRyeQotCQkJd2hpbGUgKHppcEZpbGVFbnRyaWVzLmhhc01vcmVFbGVtZW50cygpKSB7Ci0JCQkJLy8gZ3JhYiBhIHppcCBmaWxlIGVudHJ5Ci0JCQkJWmlwRW50cnkgZW50cnkgPSAoWmlwRW50cnkpIHppcEZpbGVFbnRyaWVzLm5leHRFbGVtZW50KCk7Ci0JCQkJU3RyaW5nIGN1cnJlbnRFbnRyeSA9IGVudHJ5LmdldE5hbWUoKTsKLQkJCQkvL1N5c3RlbS5vdXQucHJpbnRsbigiRXh0cmFjdGluZzogIiArIGVudHJ5KTsKLQkJCQlGaWxlIGRlc3RGaWxlID0gbmV3IEZpbGUodW56aXBEZXN0aW5hdGlvbkRpcmVjdG9yeSwgY3VycmVudEVudHJ5KTsKLQkJCQkvLyBncmFiIGZpbGUncyBwYXJlbnQgZGlyZWN0b3J5IHN0cnVjdHVyZQotCQkJCUZpbGUgZGVzdGluYXRpb25QYXJlbnQgPSBkZXN0RmlsZS5nZXRQYXJlbnRGaWxlKCk7Ci0JCQkJLy8gY3JlYXRlIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHN0cnVjdHVyZSBpZiBuZWVkZWQKLQkJCQlkZXN0aW5hdGlvblBhcmVudC5ta2RpcnMoKTsKLQkJCQkvLyBleHRyYWN0IGZpbGUgaWYgbm90IGEgZGlyZWN0b3J5Ci0JCQkJaWYgKCFlbnRyeS5pc0RpcmVjdG9yeSgpKSB7Ci0JCQkJCUJ1ZmZlcmVkSW5wdXRTdHJlYW0gaXMgPSBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbSh6aXBGaWxlLmdldElucHV0U3RyZWFtKGVudHJ5KSk7Ci0JCQkJCS8vIGVzdGFibGlzaCBidWZmZXIgZm9yIHdyaXRpbmcgZmlsZQotCQkJCQlieXRlIGRhdGFbXSA9IG5ldyBieXRlW0JVRkZFUl07Ci0JCQkJCS8vIHdyaXRlIHRoZSBjdXJyZW50IGZpbGUgdG8gZGlzawotCQkJCQlGaWxlT3V0cHV0U3RyZWFtIGZpbGVPdXRwdXRTdHJlYW0gPSBuZXcgRmlsZU91dHB1dFN0cmVhbShkZXN0RmlsZSk7Ci0JCQkJCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBkZXN0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbShCVUZGRVIpOwotCQkJCQkvLyByZWFkIGFuZCB3cml0ZSB1bnRpbCBsYXN0IGJ5dGUgaXMgZW5jb3VudGVyZWQKLQkJCQkJYm9vbGVhbiBlb2YgPSBmYWxzZTsKLQkJCQkJaW50IG5CeXRlcyA9IDA7Ci0JCQkJCXdoaWxlICghZW9mKSB7Ci0JCQkJCQluQnl0ZXMgPSBpcy5yZWFkKGRhdGEsIDAsIEJVRkZFUik7Ci0JCQkJCQlpZiAobkJ5dGVzICE9IC0xKSB7Ci0JCQkJCQkJZGVzdC53cml0ZShkYXRhLCAwLCBuQnl0ZXMpOwotCQkJCQkJfQotCQkJCQkJZWxzZSB7Ci0JCQkJCQkJZW9mID0gdHJ1ZTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlkZXN0LmZsdXNoKCk7Ci0JCQkJCWRlc3QuY2xvc2UoKTsKLQkJCQkJZmlsZU91dHB1dFN0cmVhbS53cml0ZShkZXN0LnRvQnl0ZUFycmF5KCkpOwotCQkJCQlmaWxlT3V0cHV0U3RyZWFtLmNsb3NlKCk7Ci0JCQkJCWlzLmNsb3NlKCk7Ci0JCQkJCWlmIChwcm9qZWN0Rm9sZGVyTmFtZSAhPSBudWxsKQotCQkJCQkJaW1wb3J0RmlsZShkZXN0RmlsZSwgcHJvamVjdEZvbGRlck5hbWUpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJLy8gbmVlZCBoYW5kbGUgdG8gdGhlIG1haW4gcHJvamVjdCBmb2xkZXIgdG8gY3JlYXRlCi0JCQkJCS8vIGNvbnRhaW5lclBhdGgKLQkJCQkJLy8gdW5saWtlIHZlcnNpb24gaW4gc3NlLnRlc3RzLCB3ZSBkb24ndCBjcmVhdGUgcHJvamVjdAotCQkJCQkvLyBmb3IKLQkJCQkJLy8gZXZlcnkgZGlyZWN0b3J5Ci0JCQkJCS8vCQkJCQlpZihwcm9qZWN0Rm9sZGVyTmFtZSA9PSBudWxsKSB7Ci0JCQkJCS8vCQkJCQkJcHJvamVjdEZvbGRlck5hbWUgPSBkZXN0RmlsZS5nZXROYW1lKCk7Ci0JCQkJCS8vCQkJCQkJZkNyZWF0ZWRQcm9qZWN0cy5hZGQocHJvamVjdEZvbGRlck5hbWUpOwotCQkJCQkvLwkJCQkJCQotCQkJCQkvLwkJCQkJCWN1cnJlbnRQcm9qZWN0ID0KLQkJCQkJLy8gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2plY3RGb2xkZXJOYW1lKTsKLQkJCQkJLy8JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQl6aXBGaWxlLmNsb3NlKCk7Ci0JCQkvLyBmaXhlcyB3b3Jrc3BhY2UgbWV0YWRhdGEgZm9yIHRoZSBwcm9qZWN0Ci0JCQkvLyBmb3IgY2xlYW4gc3RhcnR1cCBuZXh0IHJ1bgotCQkJaWYgKGN1cnJlbnRQcm9qZWN0ICE9IG51bGwpIHsKLQkJCQl0cnkgewotCQkJCQlQYXRoIHByb2plY3RMb2NhdGlvbiA9IG5ldyBQYXRoKFBsYXRmb3JtLmdldExvY2F0aW9uKCkudG9PU1N0cmluZygpKTsKLQkJCQkJY3JlYXRlUHJvamVjdChjdXJyZW50UHJvamVjdCwgcHJvamVjdExvY2F0aW9uLCBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJCX0KLQkJCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBjZXgpIHsKLQkJCQkJY2V4LnByaW50U3RhY2tUcmFjZSgpOwotCQkJCX0KLQkJCX0KLQkJfQotCQljYXRjaCAoSU9FeGNlcHRpb24gaW9lKSB7Ci0JCQlpb2UucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiAgCi0JICovCi0JcHVibGljIHZvaWQgcmVmcmVzaFdvcmtzcGFjZSgpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJSVByb2plY3RbXSBwcm9qZWN0cyA9IHdzUm9vdC5nZXRQcm9qZWN0cygpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3RzLmxlbmd0aDsgaSsrKSB7Ci0JCQlwcm9qZWN0c1tpXS5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJfQotCQl3c1Jvb3QucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogRGVsZXRlIHByb2plY3RzIGNyZWF0ZWQgKHVuemlwcGVkIGFuZCBpbXBvcnRlZCkgYnkgdGhpcyB1dGlsaXR5Ci0JICogCi0JICogQHRocm93cyBFeGNlcHRpb24KLQkgKi8KLQlwdWJsaWMgdm9pZCBkZWxldGVQcm9qZWN0cygpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBJUHJvamVjdFtdIHByb2plY3RzID0gZ2V0Q3JlYXRlZFByb2plY3RzKCk7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24oKSB7Ci0JCQlwcm90ZWN0ZWQgdm9pZCBleGVjdXRlKElQcm9ncmVzc01vbml0b3IgbW9uaXRvcikgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgcHJvamVjdHMubGVuZ3RoOyBpKyspIHsKLQkJCQkJcHJvamVjdHNbaV0uY2xlYXJIaXN0b3J5KG51bGwpOwotCQkJCQlwcm9qZWN0c1tpXS5jbG9zZShudWxsKTsKLQkJCQkJcHJvamVjdHNbaV0uZGVsZXRlKHRydWUsIHRydWUsIG51bGwpOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKHByb2dyZXNzKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdChTdHJpbmcgcHJvamVjdE5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlmaW5hbCBTdHJpbmcgbmFtZSA9IHByb2plY3ROYW1lOwotCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQlmaW5hbCBJUHJvamVjdCBwcm9qID0gd3NSb290LmdldFByb2plY3QobmFtZSk7Ci0JCVdvcmtzcGFjZU1vZGlmeU9wZXJhdGlvbiBkZWxldGVPcCA9IG5ldyBXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24ocHJvaikgewotCQkJcHJvdGVjdGVkIHZvaWQgZXhlY3V0ZShJUHJvZ3Jlc3NNb25pdG9yIG1vbml0b3IpIHRocm93cyBDb3JlRXhjZXB0aW9uIHsKLQkJCQkvLwkJCQlJV29ya3NwYWNlUm9vdCB3c1Jvb3QgPQotCQkJCS8vIFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCk7Ci0JCQkJLy8JCQkJSVByb2plY3QgcHJvaiA9IHdzUm9vdC5nZXRQcm9qZWN0KG5hbWUpOwotCQkJCWlmIChwcm9qICE9IG51bGwgJiYgcHJvai5leGlzdHMoKSkgewotCQkJCQlwcm9qLmNsZWFySGlzdG9yeShudWxsKTsKLQkJCQkJLy9wcm9qLmNsb3NlKG51bGwpOwotCQkJCQlwcm9qLnJlZnJlc2hMb2NhbChJUmVzb3VyY2UuREVQVEhfSU5GSU5JVEUsIG51bGwpOwotCQkJCQl0cnkgewotCQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCX0KLQkJCQkJY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7Ci0JCQkJCQkvLyBqdXN0IHRyeSBhZ2FpbiAobm90IHN1cmUgd2h5IHRoZXkgYXJlIG5vdCBiZWluZwotCQkJCQkJLy8gZGVsZXRlZCkKLQkJCQkJCXByb2oucmVmcmVzaExvY2FsKElSZXNvdXJjZS5ERVBUSF9JTkZJTklURSwgbnVsbCk7Ci0JCQkJCQlwcm9qLmRlbGV0ZSh0cnVlLCB0cnVlLCBudWxsKTsKLQkJCQkJfQotCQkJCQkvL3Byb2ogPSBudWxsOwotCQkJCX0KLQkJCQlyZWZyZXNoV29ya3NwYWNlKCk7Ci0JCQl9Ci0JCX07Ci0JCVdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBwcm9ncmVzcyA9IG5ldyBXb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IoKTsKLQkJZGVsZXRlT3AucnVuKHByb2dyZXNzKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLnNhdmUodHJ1ZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogQHJldHVybiBJUHJvamVjdHMgdGhhdCB3ZXJlIHVuemlwcGVkIGFuZCBpbXBvcnRlZCBpbnRvIHRoZSB3b3Jrc3BhY2UgYnkKLQkgKiAgICAgICAgIHRoaXMgdXRpbGl0eQotCSAqLwotCXB1YmxpYyBJUHJvamVjdFtdIGdldENyZWF0ZWRQcm9qZWN0cygpIHsKLQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKTsKLQkJU3RyaW5nW10gcHJvamVjdE5hbWVzID0gKFN0cmluZ1tdKSBmQ3JlYXRlZFByb2plY3RzLnRvQXJyYXkobmV3IFN0cmluZ1tmQ3JlYXRlZFByb2plY3RzLnNpemUoKV0pOwotCQlJUHJvamVjdFtdIHByb2plY3RzID0gbmV3IElQcm9qZWN0W3Byb2plY3ROYW1lcy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHByb2plY3ROYW1lcy5sZW5ndGg7IGkrKykgewotCQkJcHJvamVjdHNbaV0gPSB3c1Jvb3QuZ2V0UHJvamVjdChwcm9qZWN0TmFtZXNbaV0pOwotCQl9Ci0JCXJldHVybiBwcm9qZWN0czsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBpbml0SmF2YVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCS8vIHJlc3luY2gKLQkJcmVmcmVzaFdvcmtzcGFjZSgpOwotCQkvL2NoYW5nZSBwcmVyZXFzIHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgYmFjayBpbgotCQlJUHJvamVjdCBwcm9qID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJLy8gbmVlZCB0byBhZGQgamF2YSBuYXR1cmUsIG9yIGVsc2UgcHJvamVjdCB3b24ndCAiZXhpc3QoKSIgaW4gdGhlCi0JCS8vIGphdmEgZWxlbWVudCBzZW5zZQotCQlTdHJpbmdbXSBuYXR1cmVJZHMgPSB7Im9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmUifTsKLQkJaWYgKCFwcm9qLmlzT3BlbigpKSB7Ci0JCQlwcm9qLm9wZW4obnVsbCk7Ci0JCX0KLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjID0gcHJvai5nZXREZXNjcmlwdGlvbigpOwotCQlkZXNjLnNldE5hdHVyZUlkcyhuYXR1cmVJZHMpOwotCQlwcm9qLnNldERlc2NyaXB0aW9uKGRlc2MsIG51bGwpOwotCX0KLQotCXByaXZhdGUgdm9pZCBjcmVhdGVQcm9qZWN0KElQcm9qZWN0IHByb2plY3QsIElQYXRoIGxvY2F0aW9uUGF0aCwgSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCWlmIChtb25pdG9yID09IG51bGwpIHsKLQkJCW1vbml0b3IgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCX0KLQkJbW9uaXRvci5iZWdpblRhc2soImNyZWF0aW5nIHRlc3QgcHJvamVjdCIsIDEwKTsKLQkJLy8gY3JlYXRlIHRoZSBwcm9qZWN0Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpIHsKLQkJCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2MgPSBwcm9qZWN0LmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qZWN0LmdldE5hbWUoKSk7Ci0JCQkJaWYgKFBsYXRmb3JtLmdldExvY2F0aW9uKCkuZXF1YWxzKGxvY2F0aW9uUGF0aCkpIHsKLQkJCQkJbG9jYXRpb25QYXRoID0gbnVsbDsKLQkJCQl9Ci0JCQkJZGVzYy5zZXRMb2NhdGlvbihsb2NhdGlvblBhdGgpOwotCQkJCXByb2plY3QuY3JlYXRlKGRlc2MsIG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQkJaWYgKCFwcm9qZWN0LmlzT3BlbigpKSB7Ci0JCQkJcHJvamVjdC5vcGVuKG1vbml0b3IpOwotCQkJCW1vbml0b3IgPSBudWxsOwotCQkJfQotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKG1vbml0b3IgIT0gbnVsbCkgewotCQkJCW1vbml0b3IuZG9uZSgpOwotCQkJfQotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgZGVsZXRlUHJvamVjdChJUHJvamVjdCBmUHJvamVjdCkgdGhyb3dzIEludm9jYXRpb25UYXJnZXRFeGNlcHRpb24sIEludGVycnVwdGVkRXhjZXB0aW9uIHsKLQkJZmluYWwgSVByb2plY3QgcHJvaiA9IGZQcm9qZWN0OwotCQlXb3Jrc3BhY2VNb2RpZnlPcGVyYXRpb24gZGVsZXRlT3AgPSBuZXcgV29ya3NwYWNlTW9kaWZ5T3BlcmF0aW9uKHByb2opIHsKLQkJCXByb3RlY3RlZCB2b2lkIGV4ZWN1dGUoSVByb2dyZXNzTW9uaXRvciBtb25pdG9yKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiB7Ci0JCQkJLy8JCQkJSVdvcmtzcGFjZVJvb3Qgd3NSb290ID0KLQkJCQkvLyBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpOwotCQkJCS8vCQkJCUlQcm9qZWN0IHByb2ogPSB3c1Jvb3QuZ2V0UHJvamVjdChuYW1lKTsKLQkJCQlpZiAocHJvaiAhPSBudWxsICYmIHByb2ouZXhpc3RzKCkpIHsKLQkJCQkJcHJvai5jbGVhckhpc3RvcnkobnVsbCk7Ci0JCQkJCS8vcHJvai5jbG9zZShudWxsKTsKLQkJCQkJcHJvai5yZWZyZXNoTG9jYWwoSVJlc291cmNlLkRFUFRIX0lORklOSVRFLCBudWxsKTsKLQkJCQkJcHJvai5kZWxldGUodHJ1ZSwgdHJ1ZSwgbnVsbCk7Ci0JCQkJCS8vcHJvaiA9IG51bGw7Ci0JCQkJfQotCQkJCXJlZnJlc2hXb3Jrc3BhY2UoKTsKLQkJCX0KLQkJfTsKLQkJLy9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IgcHJvZ3Jlc3MgPSBuZXcgV29ya3NwYWNlUHJvZ3Jlc3NNb25pdG9yKCk7Ci0JCWRlbGV0ZU9wLnJ1bihudWxsKTsKLQkJLy8gc2F2ZXMgdGhlIG5ldyB3b3Jrc3BhY2UgbWV0YWRhdGEKLQkJLy9SZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuc2F2ZSh0cnVlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy91dGlsL1dvcmtzcGFjZVByb2dyZXNzTW9uaXRvci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZDdmN2QzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcvdXRpbC9Xb3Jrc3BhY2VQcm9ncmVzc01vbml0b3IuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy51dGlsOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLklQcm9ncmVzc01vbml0b3I7Ci0KLWNsYXNzIFdvcmtzcGFjZVByb2dyZXNzTW9uaXRvciBpbXBsZW1lbnRzIElQcm9ncmVzc01vbml0b3IgewotCXByaXZhdGUgYm9vbGVhbiBmaW5pc2hlZCA9IGZhbHNlOwotCi0JcHVibGljIHZvaWQgYmVnaW5UYXNrKFN0cmluZyBuYW1lLCBpbnQgdG90YWxXb3JrKSB7Ci0JCS8vIG5vb3AKLQl9Ci0KLQlwdWJsaWMgdm9pZCBkb25lKCkgewotCQlmaW5pc2hlZCA9IHRydWU7Ci0JfQotCi0JcHVibGljIGJvb2xlYW4gaXNGaW5pc2hlZCgpIHsKLQkJcmV0dXJuIGZpbmlzaGVkOwotCX0KLQotCXB1YmxpYyB2b2lkIGludGVybmFsV29ya2VkKGRvdWJsZSB3b3JrKSB7Ci0JCS8vIG5vb3AKLQl9Ci0KLQlwdWJsaWMgYm9vbGVhbiBpc0NhbmNlbGVkKCkgewotCQlyZXR1cm4gZmluaXNoZWQ7Ci0JfQotCi0JcHVibGljIHZvaWQgc2V0Q2FuY2VsZWQoYm9vbGVhbiB2YWx1ZSkgewotCQlpZiAodmFsdWUgPT0gdHJ1ZSkKLQkJCWZpbmlzaGVkID0gdHJ1ZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCBzZXRUYXNrTmFtZShTdHJpbmcgbmFtZSkgewotCQkvLyBub29wCi0JfQotCi0JcHVibGljIHZvaWQgc3ViVGFzayhTdHJpbmcgbmFtZSkgewotCQkvLyBub29wCi0JfQotCi0JcHVibGljIHZvaWQgd29ya2VkKGludCB3b3JrKSB7Ci0JCS8vIG5vb3AKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy93cml0ZS9UZXN0Q29kZWRXcml0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy93cml0ZS9UZXN0Q29kZWRXcml0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGY2NGM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2Rpbmcvd3JpdGUvVGVzdENvZGVkV3JpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcud3JpdGU7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5Db2RlZFN0cmVhbUNyZWF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nUnVsZTsKLQotcHVibGljIGNsYXNzIFRlc3RDb2RlZFdyaXRlIGV4dGVuZHMgVGVzdENhc2UgewotCS8qKiBBIHRhYmxlIG9mIGhleCBkaWdpdHMgKi8KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBjaGFyW10gaGV4RGlnaXQgPSB7JzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnfTsKLQlwcml2YXRlIHN0YXRpYyBTdHJpbmdCdWZmZXIgc0J1ZmYgPSBuZXcgU3RyaW5nQnVmZmVyKDIpOwotCi0JcHJpdmF0ZSBzdGF0aWMgU3RyaW5nIGJ5dGVUb0hleChieXRlIGJ5dGVjaGFyKSB7Ci0JCXNCdWZmLnNldExlbmd0aCgwKTsKLQkJaW50IGxvdyA9IGJ5dGVjaGFyICYgMHhGOwotCQlpbnQgaGkgPSAoYnl0ZWNoYXIgPj4gNCkgJiAweEY7Ci0JCXNCdWZmLmFwcGVuZCh0b0hleChoaSkpOwotCQlzQnVmZi5hcHBlbmQodG9IZXgobG93KSk7Ci0JCXJldHVybiBzQnVmZi50b1N0cmluZygpOwotCX0KLQotCS8qKgotCSAqIENvbnZlcnQgYSBuaWJibGUgdG8gYSBoZXggY2hhcmFjdGVyCi0JICogCi0JICogQHBhcmFtIG5pYmJsZQotCSAqICAgICAgICAgICAgdGhlIG5pYmJsZSB0byBjb252ZXJ0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIGNoYXIgdG9IZXgoaW50IG5pYmJsZSkgewotCQlyZXR1cm4gaGV4RGlnaXRbKG5pYmJsZSAmIDB4RildOwotCX0KLQotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0JLyoqCi0JICogIAotCSAqLwotCXB1YmxpYyBUZXN0Q29kZWRXcml0ZSgpIHsKLQkJc3VwZXIoKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gbmFtZQotCSAqLwotCXB1YmxpYyBUZXN0Q29kZWRXcml0ZShTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U2ltcGxlKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGpzcCA9ICI8JUAgcGFnZSBjb250ZW50VHlwZT1cInRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zXCIlPiI7Ci0JCUNvZGVkU3RyZWFtQ3JlYXRvciBjb2RlZFN0cmVhbUNyZWF0b3IgPSBuZXcgQ29kZWRTdHJlYW1DcmVhdG9yKCk7Ci0JCWNvZGVkU3RyZWFtQ3JlYXRvci5zZXQoImR1bW15LmpzcCIsIGpzcCk7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBjb2RlZFN0cmVhbUNyZWF0b3IuZ2V0Q29kZWRCeXRlQXJyYXlPdXRwdXRTdHJlYW0oRW5jb2RpbmdSdWxlLkNPTlRFTlRfQkFTRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCWRlYnVnUHJpbnQoInRlc3RTaW1wbGUiLCBqc3AsICJJU08tODg1OS0zIiwgb3V0cHV0U3RyZWFtKTsKLQkJfQotCQlhc3NlcnROb3ROdWxsKG91dHB1dFN0cmVhbSk7Ci0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgZGVidWdQcmludChTdHJpbmcgdGVzdG5hbWUsIFN0cmluZyBvcmlnaW5hbFN0cmluZywgU3RyaW5nIGVuY29kaW5nLCBCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiB7Ci0JCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQlTeXN0ZW0ub3V0LnByaW50bG4odGVzdG5hbWUpOwotCQlieXRlW10gYnl0ZXMgPSBvdXRwdXRTdHJlYW0udG9CeXRlQXJyYXkoKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewotCQkJU3lzdGVtLm91dC5wcmludChieXRlVG9IZXgoYnl0ZXNbaV0pKTsKLQkJfQotCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJaWYgKGVuY29kaW5nID09IG51bGwpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihuZXcgU3RyaW5nKGJ5dGVzKSk7Ci0KLQkJfQotCQllbHNlIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihuZXcgU3RyaW5nKGJ5dGVzLCBlbmNvZGluZykpOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZVVURjE2QkUoKSB0aHJvd3MgVW5zdXBwb3J0ZWRFbmNvZGluZ0V4Y2VwdGlvbiwgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gewotCQlTdHJpbmcganNwID0gIjwlQCBwYWdlIGNvbnRlbnRUeXBlPVwidGV4dC9odG1sOyBjaGFyc2V0PVVURi0xNkJFXCIlPiI7Ci0JCUNvZGVkU3RyZWFtQ3JlYXRvciBjb2RlZFN0cmVhbUNyZWF0b3IgPSBuZXcgQ29kZWRTdHJlYW1DcmVhdG9yKCk7Ci0JCWNvZGVkU3RyZWFtQ3JlYXRvci5zZXQoImR1bW15LmpzcCIsIGpzcCk7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBjb2RlZFN0cmVhbUNyZWF0b3IuZ2V0Q29kZWRCeXRlQXJyYXlPdXRwdXRTdHJlYW0oRW5jb2RpbmdSdWxlLkNPTlRFTlRfQkFTRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCWRlYnVnUHJpbnQoInRlc3RTaW1wbGVVVEYxNkJFIiwganNwLCAiVVRGLTE2QkUiLCBvdXRwdXRTdHJlYW0pOwotCQl9Ci0JCWFzc2VydE5vdE51bGwob3V0cHV0U3RyZWFtKTsKLQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTaW1wbGVyKCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJQ29kZWRTdHJlYW1DcmVhdG9yIGNvZGVkU3RyZWFtQ3JlYXRvciA9IG5ldyBDb2RlZFN0cmVhbUNyZWF0b3IoKTsKLQkJU3RyaW5nIHhtbFN0cmluZyA9ICI8P3htbCB2ZXJzaW9uPVwiMS4wXCIgZW5jb2Rpbmc9XCJVVEYtMTZcIj8+PHRhZz50ZXN0IHRleHQ8L3RhZz4iOwotCQljb2RlZFN0cmVhbUNyZWF0b3Iuc2V0KCJkdW1teS54bWwiLCB4bWxTdHJpbmcpOwotCQlCeXRlQXJyYXlPdXRwdXRTdHJlYW0gb3V0cHV0U3RyZWFtID0gY29kZWRTdHJlYW1DcmVhdG9yLmdldENvZGVkQnl0ZUFycmF5T3V0cHV0U3RyZWFtKEVuY29kaW5nUnVsZS5DT05URU5UX0JBU0VEKTsKLQkJaWYgKERFQlVHKSB7Ci0JCQlkZWJ1Z1ByaW50KCJ0ZXN0U2ltcGxlciIsIHhtbFN0cmluZywgIlVURi0xNiIsIG91dHB1dFN0cmVhbSk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbChvdXRwdXRTdHJlYW0pOwotCi0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNpbXBsZXN0KCkgdGhyb3dzIFVuc3VwcG9ydGVkRW5jb2RpbmdFeGNlcHRpb24sIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uIHsKLQkJQ29kZWRTdHJlYW1DcmVhdG9yIGNvZGVkU3RyZWFtQ3JlYXRvciA9IG5ldyBDb2RlZFN0cmVhbUNyZWF0b3IoKTsKLQkJU3RyaW5nIHRleHQgPSAidGVzdCB0ZXh0IjsKLQkJY29kZWRTdHJlYW1DcmVhdG9yLnNldCgiZHVtbXkueG1sIiwgdGV4dCk7Ci0JCUJ5dGVBcnJheU91dHB1dFN0cmVhbSBvdXRwdXRTdHJlYW0gPSBjb2RlZFN0cmVhbUNyZWF0b3IuZ2V0Q29kZWRCeXRlQXJyYXlPdXRwdXRTdHJlYW0oRW5jb2RpbmdSdWxlLkNPTlRFTlRfQkFTRUQpOwotCQlpZiAoREVCVUcpIHsKLQkJCWRlYnVnUHJpbnQoInRlc3RTaW1wbGVzdCIsIHRleHQsIG51bGwsIG91dHB1dFN0cmVhbSk7Ci0JCX0KLQkJYXNzZXJ0Tm90TnVsbChvdXRwdXRTdHJlYW0pOwotCi0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEVuY29kaW5nVGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTEVuY29kaW5nVGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM3ZGUyZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxFbmNvZGluZ1Rlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNzIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5lbmNvZGluZy5FbmNvZGluZ01lbWVudG87Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLklSZXNvdXJjZUNoYXJzZXREZXRlY3RvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuVGVzdHNQbHVnaW47Ci0KLQotcHVibGljIGNsYXNzIFhNTEVuY29kaW5nVGVzdHMgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBpbnQgUkVBRF9CVUZGRVJfU0laRSA9IDgwMDA7Ci0JcHJpdmF0ZSBib29sZWFuIERFQlVHID0gZmFsc2U7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZVJvb3QgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZURpciA9ICJ4bWwvIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBmaWxlTG9jYXRpb24gPSBmaWxlUm9vdCArIGZpbGVEaXI7Ci0KLQlwdWJsaWMgWE1MRW5jb2RpbmdUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZVN0cmVhbShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZElBTkFFbmNvZGluZywgSVJlc291cmNlQ2hhcnNldERldGVjdG9yIGRldGVjdG9yKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlGaWxlIGZpbGUgPSBUZXN0c1BsdWdpbi5nZXRUZXN0RmlsZShmaWxlbmFtZSk7Ci0JCWlmICghZmlsZS5leGlzdHMoKSkKLQkJCXRocm93IG5ldyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24oZmlsZW5hbWUgKyAiIHdhcyBub3QgZm91bmQiKTsKLQkJSW5wdXRTdHJlYW0gaW5wdXRTdHJlYW0gPSBuZXcgRmlsZUlucHV0U3RyZWFtKGZpbGUpOwotCQkvL0lucHV0U3RyZWFtIGluU3RyZWFtID0gZ2V0Q2xhc3MoKS5nZXRSZXNvdXJjZUFzU3RyZWFtKGZpbGVuYW1lKTsKLQkJSW5wdXRTdHJlYW0gaXN0cmVhbSA9IGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oaW5wdXRTdHJlYW0pOwotCQl0cnkgewotCQkJZGV0ZWN0b3Iuc2V0KGlzdHJlYW0pOwotCQkJRW5jb2RpbmdNZW1lbnRvIGVuY29kaW5nTWVtZW50byA9ICgoWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKWRldGVjdG9yKS5nZXRFbmNvZGluZ01lbWVudG8oKTsKLQkJCVN0cmluZyBmb3VuZElBTkFFbmNvZGluZyA9IGVuY29kaW5nTWVtZW50by5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQkJCS8vIEkgY2hhbmdlZCBtYW55ICJlcXVhbHMiIHRvICJlcXVhbHNJZ25vcmVDYXNlIiBvbiAxMS80LzIwMDIsCi0JCQkvLyBzaW5jZQotCQkJLy8gc29tZSBpc3N1ZXMgd2l0aCBTSElGVF9KSVMgdnMuIFNoaWZ0X0pJUyB3ZXJlIGNhdXNpbmcgZmFpbHVyZXMuCi0JCQkvLyBXZSBkbyB3YW50IHRvIGJlIHRvbGVyYW50IG9uIGlucHV0LCBhbmQgYWNjZXB0IGVpdGhlciwgYnV0IEkKLQkJCS8vIHRoaW5rCi0JCQkvLyB0aGF0IFN1cHBvcnRlZEphdmFFbmNvZGluZ3MgbmVlZHMgdG8gYmUgY2hhbmdlZCB0byAicmVjb21tZW5kIgotCQkJLy8gU2hpZnRfSklTLgotCQkJYm9vbGVhbiBleHBlY3RlZElBTkFSZXN1bHQgPSBmYWxzZTsKLQkJCWV4cGVjdGVkSUFOQVJlc3VsdCA9IGV4cGVjdGVkSUFOQUVuY29kaW5nLmVxdWFsc0lnbm9yZUNhc2UoZm91bmRJQU5BRW5jb2RpbmcpOwotCi0JCQlhc3NlcnRUcnVlKCJlbmNvZGluZyB0ZXN0IGZpbGUgIiArIGZpbGVuYW1lICsgIiBleHBlY3RlZDogIiArIGV4cGVjdGVkSUFOQUVuY29kaW5nICsgIiBmb3VuZDogIiArIGZvdW5kSUFOQUVuY29kaW5nLCBleHBlY3RlZElBTkFSZXN1bHQpOwotCQkJLy8gYSB2ZXJ5IHNpbXBsZSByZWFkIHRlc3QgLi4uIHdpbGwgY2F1c2UgSlVuaXQgZXJyb3IgKG5vdCBmYWlsKSBpZiB0aHJvd3MgZXhjZXB0aW9uLgotCQkJZW5zdXJlQ2FuUmVhZChmaWxlbmFtZSwgZm91bmRJQU5BRW5jb2RpbmcsIGlzdHJlYW0pOwotCQl9Ci0JCWZpbmFsbHkgewotCQkJaWYgKGlzdHJlYW0gIT0gbnVsbCkgewotCQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJCWlmIChpbnB1dFN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCX0KLQkJfQotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxFbXB0eUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiRW1wdHlGaWxlLnhtbCI7Ci0JCWRvVGVzdEZpbGVTdHJlYW0oZmlsZW5hbWUsICJVVEYtOCIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFhNTElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwiOwotCQlTdHJpbmcgaWFuYUluRmlsZSA9ICJJU08tODg1OS0xIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgaWFuYUluRmlsZSwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0WE1MTm9ybWFsTm9uRGVmYXVsdCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJOb3JtYWxOb25EZWZhdWx0LnhtbCI7Ci0JCVN0cmluZyBpYW5hSW5GaWxlID0gIklTTy04ODU5LTEiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCBpYW5hSW5GaWxlLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RYTUxOb0VuY29kaW5nKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk5vRW5jb2RpbmcueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi04IiwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpKTsKLQl9Ci0KLQkvKioKLQkgKiBDYXV0aW9uLCB3aGVuIHRoaXMgZmlsZSBwcmludHMgb3V0IGluIGNvbnNvbGUgKHdoZW4gZGVidWcgc2V0IHRvIHRydWUsIGl0IGFwcGVhcnMgCi0JICogaW5jb3JyZWN0IChkdWUgdG8gZm9udCBwcm9ibGVtcyBpbiBjb25zb2xlKS4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTYoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZXaXRoSmFwYW5lc2VDaGFycy54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBzaG93cyB1bmljb2RlIEJPTSBzaG91bGQgdGFrZSBwcmlvcml0eSBvdmVyIHNldHRpbmdzL2RlZmF1bHRzCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIjsKLQkJZG9UZXN0RmlsZVN0cmVhbShmaWxlbmFtZSwgIlVURi0xNiIsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyB0ZXN0IHNob3dzIHVuaWNvZGUgQk9NIHNob3VsZCB0YWtlIHByaW9yaXR5IG92ZXIgc2V0dGluZ3MvZGVmYXVsdHMKLQkgKiBOb3RlOiBVVEYtMTYgPT0gVVRGLTE2QkUKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTE2QkUiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RVVEY4M0J5dGVCT00oKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiVVRGOFdpdGgzQnl0ZUJPTS54bWwiOwotCQlkb1Rlc3RGaWxlU3RyZWFtKGZpbGVuYW1lLCAiVVRGLTgiLCBuZXcgWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKCkpOwotCX0KLQotCS8qKgotCSAqIEVuc3VyZXMgdGhhdCBhbiBJbnB1dFN0cmVhbSBoYXMgbWFyay9yZXNldCBzdXBwb3J0LgotCSAqLwotCXByaXZhdGUgc3RhdGljIElucHV0U3RyZWFtIGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oSW5wdXRTdHJlYW0gb3JpZ2luYWwpIHsKLQkJaWYgKG9yaWdpbmFsID09IG51bGwpCi0JCQlyZXR1cm4gbnVsbDsKLQkJaWYgKG9yaWdpbmFsLm1hcmtTdXBwb3J0ZWQoKSkKLQkJCXJldHVybiBvcmlnaW5hbDsKLQkJcmV0dXJuIG5ldyBCdWZmZXJlZElucHV0U3RyZWFtKG9yaWdpbmFsKTsKLQl9Ci0KLQlwcml2YXRlIFN0cmluZ0J1ZmZlciByZWFkSW5wdXRTdHJlYW0oUmVhZGVyIHJlYWRlcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQotCQlTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotCQlpbnQgbnVtUmVhZCA9IDA7Ci0JCWNoYXIgdEJ1ZmZbXSA9IG5ldyBjaGFyW1JFQURfQlVGRkVSX1NJWkVdOwotCQl3aGlsZSAoKG51bVJlYWQgPSByZWFkZXIucmVhZCh0QnVmZiwgMCwgdEJ1ZmYubGVuZ3RoKSkgIT0gLTEpIHsKLQkJCWJ1ZmZlci5hcHBlbmQodEJ1ZmYsIDAsIG51bVJlYWQpOwotCQl9Ci0JCXJldHVybiBidWZmZXI7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QganVzdCByZWFkcyB0byBzdHJlYW0sIHRvIGJlIHN1cmUgaXQgY2FuIGJlIHJlYWQgcGVyCi0JICogZW5jb2RpbmcsIHdpdGhvdXQgZXhjZXB0aW9uLgotCSAqLwotCXByaXZhdGUgdm9pZCBlbnN1cmVDYW5SZWFkKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIGVuY29kaW5nLCBJbnB1dFN0cmVhbSBpblN0cmVhbSkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJQ2hhcnNldCBjaGFyc2V0ID0gQ2hhcnNldC5mb3JOYW1lKGVuY29kaW5nKTsKLQkJQ2hhcnNldERlY29kZXIgY2hhcnNldERlY29kZXIgPSBjaGFyc2V0Lm5ld0RlY29kZXIoKTsKLQkJY2hhcnNldERlY29kZXIub25NYWxmb3JtZWRJbnB1dChDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCQljaGFyc2V0RGVjb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQotCQlJbnB1dFN0cmVhbVJlYWRlciByZWFkZXIgPSBuZXcgSW5wdXRTdHJlYW1SZWFkZXIoaW5TdHJlYW0sIGNoYXJzZXREZWNvZGVyKTsKLQkJU3RyaW5nQnVmZmVyIHN0cmluZ0J1ZmZlciA9IHJlYWRJbnB1dFN0cmVhbShyZWFkZXIpOwotCQlpZiAoREVCVUcpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJU3lzdGVtLm91dC5wcmludGxuKGZpbGVuYW1lKTsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbihzdHJpbmdCdWZmZXIudG9TdHJpbmcoKSk7Ci0JCX0KLQl9Ci0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxIZWFkVG9rZW5pemVyVGVzdGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyM2QwMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC90ZXN0cy9lbmNvZGluZy94bWwvWE1MSGVhZFRva2VuaXplclRlc3Rlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzYwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy54bWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uUmVhZGVyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLkVuY29kaW5nUGFyc2VyQ29uc3RhbnRzOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5jb250ZW50dHlwZS5IZWFkUGFyc2VyVG9rZW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLlhNTEhlYWRUb2tlbml6ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNvbnRlbnR0eXBlLlhNTEhlYWRUb2tlbml6ZXJDb25zdGFudHM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5UZXN0c1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgWE1MSGVhZFRva2VuaXplclRlc3RlciBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIGZpbGVEaXIgPSAieG1sLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUhvbWUgPSAidGVzdGZpbGVzLyI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgZmlsZUxvY2F0aW9uID0gZmlsZUhvbWUgKyBmaWxlRGlyOwotCXByaXZhdGUgU3RyaW5nIGZFbmNvZGluZyA9IG51bGw7Ci0JcHJpdmF0ZSBIZWFkUGFyc2VyVG9rZW4gZkZpbmFsVG9rZW47Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUpIHsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgZXhwZWN0ZWROYW1lLCBudWxsKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgZG9UZXN0RmlsZShTdHJpbmcgZmlsZW5hbWUsIFN0cmluZyBleHBlY3RlZE5hbWUsIFN0cmluZyBleHBlY3RlZEZpbmFsVG9rZW5UeXBlKSB7Ci0KLQkJWE1MSGVhZFRva2VuaXplciB0b2tlbml6ZXIgPSBudWxsOwotCQlSZWFkZXIgZmlsZVJlYWRlciA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oKTsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4oIiAgICAgICAiICsgZmlsZW5hbWUpOwotCQkJCVN5c3RlbS5vdXQucHJpbnRsbigpOwotCQkJfQotCQkJZmlsZVJlYWRlciA9IFRlc3RzUGx1Z2luLmdldEJ5dGVSZWFkZXIoZmlsZW5hbWUpOwotCQkJdG9rZW5pemVyID0gbmV3IFhNTEhlYWRUb2tlbml6ZXIoZmlsZVJlYWRlcik7Ci0JCX0KLQkJY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKLQkJCVN5c3RlbS5vdXQucHJpbnRsbigiRXJyb3Igb3BlbmluZyBmaWxlIFwiIiArIGZpbGVuYW1lICsgIlwiIik7Ci0JCX0KLQotCQlTdHJpbmcgcmVzdWx0VmFsdWUgPSBudWxsOwotCQl0cnkgewotCQkJcGFyc2UodG9rZW5pemVyKTsKLQkJCXJlc3VsdFZhbHVlID0gZkVuY29kaW5nOwotCQkJaWYgKERFQlVHKSB7Ci0JCQkJU3lzdGVtLm91dC5wcmludGxuKCJYTUwgSGVhZCBUb2tlbml6ZXIgRm91bmQgRW5jb2Rpbmc6ICIgKyByZXN1bHRWYWx1ZSk7Ci0JCQl9Ci0JCQlmaWxlUmVhZGVyLmNsb3NlKCk7Ci0JCX0KLQkJY2F0Y2ggKGphdmEuaW8uSU9FeGNlcHRpb24gZSkgewotCQkJU3lzdGVtLm91dC5wcmludGxuKCJBbiBJL08gZXJyb3Igb2NjdXJlZCB3aGlsZSBzY2FubmluZyA6Iik7Ci0JCQlTeXN0ZW0ub3V0LnByaW50bG4oZSk7Ci0JCX0KLQotCQlpZiAoZXhwZWN0ZWRGaW5hbFRva2VuVHlwZSAhPSBudWxsKSB7Ci0JCQlhc3NlcnRUcnVlKCJkaWQgbm90IGVuZCBhcyBleHBlY3RlZC4gZm91bmQ6ICAiICsgZkZpbmFsVG9rZW4uZ2V0VHlwZSgpLCBleHBlY3RlZEZpbmFsVG9rZW5UeXBlLmVxdWFscyhmRmluYWxUb2tlbi5nZXRUeXBlKCkpKTsKLQkJfQotCQllbHNlIHsKLQkJCWlmIChleHBlY3RlZE5hbWUgPT0gbnVsbCkgewotCQkJCS8vIFRPRE86IHRoaXMgdGVzdCBicmFuY2ggbmVlZHMgdG8gYmUgaW1wcm92ZWQgLi4uIGRvZXNuJ3QKLQkJCQkvLyBmYWlsCi0JCQkJLy8gYXMgaXQgc2hvdWxkCi0JCQkJLy8gKHN1Y2ggYXMgd2hlbiB0b2tlbml6ZXIgY2hhbmdlZCB0byByZXR1cm4gZWFybHkgd2hlbgotCQkJCS8vIFVuaWNvZGUKLQkJCQkvLyBzdHJlYW0gZm91bmQpLgotCQkJCWFzc2VydFRydWUoImV4cGVjdGVkIG5vIGVuY29kaW5nLCBidXQgZm91bmQ6ICIgKyByZXN1bHRWYWx1ZSwgcmVzdWx0VmFsdWUgPT0gbnVsbCk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlhc3NlcnRUcnVlKCJleHBlY3RlZCAiICsgZXhwZWN0ZWROYW1lICsgIiBidXQgZm91bmQgIiArIHJlc3VsdFZhbHVlLCBleHBlY3RlZE5hbWUuZXF1YWxzKHJlc3VsdFZhbHVlKSk7Ci0JCQl9Ci0JCX0KLQotCX0KLQotCXByaXZhdGUgdm9pZCBwYXJzZShYTUxIZWFkVG9rZW5pemVyIHRva2VuaXplcikgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJSGVhZFBhcnNlclRva2VuIHRva2VuID0gbnVsbDsKLQkJU3RyaW5nIHRva2VuVHlwZSA9IG51bGw7Ci0JCWRvIHsKLQkJCXRva2VuID0gdG9rZW5pemVyLmdldE5leHRUb2tlbigpOwotCQkJdG9rZW5UeXBlID0gdG9rZW4uZ2V0VHlwZSgpOwotCQkJLy8gbm9ybWFsbHkgInBhcnNpbmciIHRoZSB0b2tlbnMgc2hvdWxkIGJlIGRvbmUgYnkgcGFyc2VyCi0JCQkvLyBAc2VlLCBYTUxSZXNvdXJjZUVuY29kb2luZ0RldGVjdG9yCi0JCQkvLyBidXQgd2UnbGwKLQkJCS8vIGRvIGl0IGhlcmUgZm9yIGEgbGl0dGxlCi0JCQkvLyBtb3JlIGluZGVwZW5kZW50IHRlc3QuCi0JCQlpZiAodG9rZW5UeXBlID09IEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLlVURjE2QkUpIHsKLQkJCQlmRW5jb2RpbmcgPSAiVVRGMTZCRUluU3RyZWFtIjsKLQkJCX0KLQkJCWlmICh0b2tlblR5cGUgPT0gRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuVVRGMTZMRSkgewotCQkJCWZFbmNvZGluZyA9ICJVVEYxNkxFSW5TdHJlYW0iOwotCQkJfQotCQkJaWYgKHRva2VuVHlwZSA9PSBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VVEY4M0J5dGVCT00pIHsKLQkJCQlmRW5jb2RpbmcgPSAiVVRGODNCeXRlQk9NSW5TdHJlYW0iOwotCQkJfQotCQkJaWYgKHRva2VuVHlwZSA9PSBYTUxIZWFkVG9rZW5pemVyQ29uc3RhbnRzLlhNTERlbEVuY29kaW5nKSB7Ci0JCQkJaWYgKHRva2VuaXplci5oYXNNb3JlVG9rZW5zKCkpIHsKLQkJCQkJdG9rZW4gPSB0b2tlbml6ZXIuZ2V0TmV4dFRva2VuKCk7Ci0JCQkJCXRva2VuVHlwZSA9IHRva2VuLmdldFR5cGUoKTsKLQkJCQkJaWYgKGlzTGVnYWxTdHJpbmcodG9rZW5UeXBlKSkgewotCQkJCQkJZkVuY29kaW5nID0gdG9rZW4uZ2V0VGV4dCgpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKTsKLQkJLy8gZm9yIHRlc3RpbmcKLQkJZkZpbmFsVG9rZW4gPSB0b2tlbjsKLQl9Ci0KLQlwcml2YXRlIGJvb2xlYW4gaXNMZWdhbFN0cmluZyhTdHJpbmcgdG9rZW5UeXBlKSB7Ci0JCWJvb2xlYW4gcmVzdWx0ID0gZmFsc2U7Ci0JCWlmICh0b2tlblR5cGUgIT0gbnVsbCkgewotCQkJcmVzdWx0ID0gdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5TdHJpbmdWYWx1ZSkgfHwgdG9rZW5UeXBlLmVxdWFscyhFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5VbkRlbGltaXRlZFN0cmluZ1ZhbHVlKSB8fCB0b2tlblR5cGUuZXF1YWxzKEVuY29kaW5nUGFyc2VyQ29uc3RhbnRzLkludmFsaWRUZXJtaW5hdGVkU3RyaW5nVmFsdWUpIHx8IHRva2VuVHlwZS5lcXVhbHMoRW5jb2RpbmdQYXJzZXJDb25zdGFudHMuSW52YWxpZFRlcm1pbnRhdGVkVW5EZWxpbWl0ZWRTdHJpbmdWYWx1ZSk7Ci0JCX0KLQkJcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLQkvKioKLQkgKiBOb3JtYWwgWE1MRGVjbGFyYXRpb24gd2l0aCBkZWZhdWx0IGVuY29kaW5nIHNwZWNpZmllZCAoVVRGLTgpCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdEJlc3RDYXNlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdE5vcm1hbENhc2UueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04Iik7Ci0KLQl9Ci0KLQkvKioKLQkgKiBUaGlzIGlzIGEgVVRGLTE2IGZpbGUgKFVuaWNvZGUgYnl0ZXMgaW4gQk9NKS4gU28sIHRoZSB0b2tlbml6ZXIgYnkKLQkgKiBpdHNlbGYgY2FuJ3QgcmVhZCBjb3JyZWN0bHkuIFJldHVybnMgbnVsbCBpbiAicHVyZSIgdG9rZW5pemVyIHRlc3QsIGJ1dAotCSAqIGVuY29kaW5nIGRldGVjdG9yIGNhc2Ugc2hvdWxkIHN0aWxsIGhhbmRsZSBzaW5jZSBsb29rcyBmb3IgYnl0ZXMgZmlyc3QuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFVURjE2KCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdFVURjE2LnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYxNkJFSW5TdHJlYW0iKTsKLQl9Ci0KLQkvKioKLQkgKiBKdXN0IHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBjaG9rZSBvbiBlbXB0eSBmaWxlLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFbXB0eUZpbGUoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJFbXB0eUZpbGUueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdGluZyBhcyBhIHJlc3VsdCBvZiBDTVZDIGRlZmVjdCAyMTc3MjAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0RVVDSlAoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJldWNqcC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiRVVDLUpQIik7Ci0JfQotCi0JLyoqCi0JICogRXh0ZW5kZWQgWE1MIERlY2xhcmF0aW9uIHRoYXQgY29udGFpbnMgJ3N0YW5kYWxvbmUnIGF0dHJpYnV0ZQotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFeHRyYUF0dHJDYXNlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdEV4dHJhVmFsaWRTdHVmZi54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGLTgiKTsKLQotCX0KLQotCS8qKgotCSAqIEEgY2FzZSB3aXRoIGEgdmFsaWQgZW5jb2RpbmcsIGJ1dCBleHRyYSBhdHRyaWJ1dGVzIHdoaWNoIGFyZSBub3QKLQkgKiB2YWxpZC9tZWFuaW5nZnVsLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RFeHRyYUp1bmtDYXNlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdEV4dHJhSnVuay54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIpOwotCX0KLQotCS8qKgotCSAqIE1pc3NpbmcgMiBxdW90ZXMsIG9uZSBhbmQgZW5kIG9mIHZlcnNpb24gdmFsdWUgYW5kIG9uZSBhdCBiZWdpbm5pbmcgb2YKLQkgKiBlbmNvZGluZyB2YWx1ZS4gSW4gdGhpcyBjYXNlLCB0b2tlbml6ZXIgaGFuZGxlcyBhcyB1bmRlbGltaXRlIHN0cmluZywKLQkgKiBidXQgaWYgd2UgZXZlciBtb2RpZml5IHRvIGFsc28gbG9vayBmb3IgJ3ZlcnNpb24nLCB0aGVuIHdvdWxkIG5vdCB3b3JrCi0JICogdGhlIHNhbWUuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdElsbEZvcm1lZCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogTWlzc2luZyBYTUxEZWNsIGVuZCB0YWcgLi4uIHdlIHNob3VsZCBiZSBhYmxlIHRvIHNhZmVseSBndWVzcy4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkMigpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQyLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtOCIpOwotCX0KLQotCS8qKgotCSAqIE1pc3NpbmcgZW5kIHF1b3RlIG9uIFVURi04IGF0dHJpYnV0ZSwgc28gcGlja3MgdXAgZm9sbG93aW5nIGF0dHJpYnRlCi0JICogdG9vLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RJbGxGb3JtZWQzKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidGVzdElsbEZvcm1lZDMueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURi04IHN0YW5kYWxvbmU9Iik7Ci0JfQotCi0JLyoqCi0JICogTWlzc2luZyBlbmQgcXVvdGUgb24gVVRGLTggYXR0cmlidXRlLCBidXQgdGhlbiBYTUxEZWNsRW5kcywgc28gc2hvdWxkCi0JICogYmUgYWJsZSB0byBoYW5kbGUKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkNCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3RJbGxGb3JtZWQ0LnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEYtOCIpOwotCX0KLQotCS8qKgotCSAqIFRlc3Qgb2YgbWlzc2luZyBlbmQgcXVvdGUgb24gZW5jb2RpbmcgdmFsdWUuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdElsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJJbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0xIik7Ci0JfQotCi0JLyoqCi0JICogRW1wdHkgc3RyaW5nIGFzIGVuY29kaW5nIHZhbHVlOyAoQW5kLCBtYWxmb3JtZWQgaW5wdXQsIGZvciBVVEYtOCAuLi4KLQkgKiBzaG91bGQgbm90IGVmZmVjdCByZXN1bHRzIG9mIHRoaXMgbGV2ZWwgb2YgdGVzdCkuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1hbGZvcm1lZE5vRW5jb2RpbmcoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICIiKTsKLQl9Ci0KLQkvKioKLQkgKiBFbXB0eSBzdHJpbmcgYXMgZW5jb2RpbmcgdmFsdWU7IChBbmQsIG1hbGZvcm1lZCBpbnB1dCwgZm9yIFVURi04IC4uLgotCSAqIHNob3VsZCBub3QgZWZmZWN0IHJlc3VsdHMgb2YgdGhpcyBsZXZlbCBvZiB0ZXN0KS4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0TWFsZm9ybWVkTm9FbmNvZGluZ1hTTCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk1hbGZvcm1lZE5vRW5jb2RpbmcueHNsIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIiIpOwotCX0KLQotCS8qKgotCSAqIFhNTERlY2xhcmF0aW9uIG5vdCBhbGwgb24gc2FtZSBsaW5lCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE11bHRpTGluZUNhc2UoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0TXVsdGlMaW5lLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJJU08tODg1OS0xIik7Ci0KLQl9Ci0KLQkvKioKLQkgKiBObyBlbmNvZGluZyBpbiBYTUxEZWNsYXJhdGlvbgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb0VuY29kaW5nKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9FbmNvZGluZy54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsKTsKLQl9Ci0KLQkvKioKLQkgKiA/SXMgdGhpcyBhIGR1cD8KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9FbmNvZGluZ0Nhc2UoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJ0ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIE5vcm1hbCBYTUxEZWNsYXJhdGlvbiB3aXRoIElTTy0xIHNwZWNpZmllZAotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb3JtYWxOb25EZWZhdWx0KCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiTm9ybWFsTm9uRGVmYXVsdC54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiSVNPLTg4NTktMSIpOwotCX0KLQotCS8qKgotCSAqIE5vIFhNTERlY2xhcmF0aW9uIGF0IGFsbC4gKEludmFsaWQsIGJ1dCBzaG91bGQgc3RpbGwgYmUgYWJsZSB0byBwYXJzZSkuCi0JICogCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE5vWE1MRGVjbCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1hNTERlY2wueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgbnVsbCk7Ci0JfQotCi0JLyoqCi0JICogSGFyZCB0byBoYW5kbGUgc2FmZWx5IChtYXkgYXBwZWFyIGluIGNvbW1lbnQsIGZvciBleGFtcGxlKS4KLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9YTUxEZWNsQXRGaXJzdCgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1hNTERlY2xBdEZpcnN0LnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsIG51bGwpOwotCX0KLQotCS8qKgotCSAqIFRoaXMgdGVzdCBpcyBqdXN0IHRvIG1ha2Ugc3VyZSB0aGUgc2Nhbm5pbmcgZW5kcyBiZWZvcmUgZW5kIG9mIGZpbGUgaXMKLQkgKiByZWFjaGVkLgotCSAqIAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3ROb1hNTERlY2xJbkxhcmdlRmlsZSgpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInRlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCBudWxsLCBFbmNvZGluZ1BhcnNlckNvbnN0YW50cy5NQVhfQ0hBUlNfUkVBQ0hFRCk7Ci0JfQotCi0JLyoqCi0JICogVGVzdGluZyBhcyBhIHJlc3VsdCBvZiBDTVZDIGRlZmVjdCAyMTc3MjAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0c2hpZnRqaXMoKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJzaGlmdGppcy54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiU2hpZnRfSklTIik7Ci0JfQotCi0JLyoqCi0JICogVGVzdGluZyBhcyBhIHJlc3VsdCBvZiBDTVZDIGRlZmVjdCAyMTc3MjAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0VVRGMTZMRVdpdGhKYXBhbmVzZUNoYXJzKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAidXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sIjsKLQkJZG9UZXN0RmlsZShmaWxlbmFtZSwgIlVURjE2TEVJblN0cmVhbSIpOwotCX0KLQotCS8qKgotCSAqIFRlc3RpbmcgYXMgYSByZXN1bHQgb2YgQ01WQyBkZWZlY3QgMjE3NzIwCi0JICovCi0JcHVibGljIHZvaWQgdGVzdFVURjE2QkVXaXRoSmFwYW5lc2VDaGFycygpIHsKLQkJU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgInV0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGMTZCRUluU3RyZWFtIik7Ci0JfQotCi0JLyoqCi0JICogQSBjb21tb24gY2FzZS4KLQkgKiAKLQkgKi8KLQkgcHVibGljIHZvaWQgdGVzdFVURjhXaXRoM0J5dGVCT00oKSB7Ci0JCVN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJVVEY4V2l0aDNCeXRlQk9NLnhtbCI7Ci0JCWRvVGVzdEZpbGUoZmlsZW5hbWUsICJVVEY4M0J5dGVCT01JblN0cmVhbSIpOwotCX0KLQlwdWJsaWMgdm9pZCBVVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlKCkgewotCQlTdHJpbmcgZmlsZW5hbWUgPSBmaWxlTG9jYXRpb24gKyAiVVRGMTZMRUF0U3RhcnRPZkxhcmdlRmlsZS54bWwiOwotCQlkb1Rlc3RGaWxlKGZpbGVuYW1lLCAiVVRGMTZMRUluU3RyZWFtIik7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTE1hbGZvcm1lZElucHV0VGVzdHMuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2Rpbmcvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdGVzdHMvZW5jb2RpbmcveG1sL1hNTE1hbGZvcm1lZElucHV0VGVzdHMuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWI5ZjZiYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3Rlc3RzL2VuY29kaW5nL3htbC9YTUxNYWxmb3JtZWRJbnB1dFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNzUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nLnhtbDsKLQotaW1wb3J0IGphdmEuaW8uQnVmZmVyZWRJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGU7Ci1pbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5SZWFkZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5DaGFyc2V0OwotaW1wb3J0IGphdmEubmlvLmNoYXJzZXQuQ2hhcnNldERlY29kZXI7Ci1pbXBvcnQgamF2YS5uaW8uY2hhcnNldC5Db2RpbmdFcnJvckFjdGlvbjsKLWltcG9ydCBqYXZhLm5pby5jaGFyc2V0Lk1hbGZvcm1lZElucHV0RXhjZXB0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLmVuY29kaW5nLkVuY29kaW5nTWVtZW50bzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwuZW5jb2RpbmcuSVJlc291cmNlQ2hhcnNldERldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5leGNlcHRpb25zLk1hbGZvcm1lZElucHV0RXhjZXB0aW9uV2l0aERldGFpbDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY29udGVudHR5cGUuWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcuVGVzdHNQbHVnaW47Ci0KLS8qKgotICogRklYTUU6IHRoaXMgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGNyZWF0ZSBhICJmaWxlIHBlZWtlciI/IEJ1dCwKLSAqIGl0cyBub3Qgb3RoZXJ3aXNlZCB1c2VkIC0tIGRlbGV0ZSBpZiBub3QgZml4ZWQvaW1wcm92ZWQgc29vbgotICogWE1MTWFsZm9ybWVkSW5wdXRUZXN0cwotICovCi0KLXB1YmxpYyBjbGFzcyBYTUxNYWxmb3JtZWRJbnB1dFRlc3RzIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgaW50IFJFQURfQlVGRkVSX1NJWkUgPSA4MDAwOwotCXByaXZhdGUgYm9vbGVhbiBERUJVRyA9IGZhbHNlOwotCi0KLQlwdWJsaWMgWE1MTWFsZm9ybWVkSW5wdXRUZXN0cyhTdHJpbmcgbmFtZSkgewotCQlzdXBlcihuYW1lKTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBmb3IgYSBmaWxlLCBmaWxlbmFtZSB0aGF0IHNob3VsZCB0aHJvdyBhCi0JICogTWFsZm9ybWVkSW5wdXRFeGNlcHRpb25XaXRoRGV0YWlsIGF0IGNoYXJhY3RlciwgZXhwZWN0ZWRQb3NpdGlvbi4gVGhpcwotCSAqIGhhcHBlbnMgd2hlbiBubyBlbmNvZGluZyBpcyBzcGVjaWZpZWQsIHNvIHRoZSBkZWZhdWx0IGlzIHVzZWQsIGJ1dAotCSAqIHRoZXJlIGFyZSBjaGFyYWN0ZXJzIHRoYXQgdGhlIGRlZmF1bHQgZW5jb2RpbmcgZG9lcyBub3QgcmVjb2duaXplCi0JICovCi0Jdm9pZCBkb1Rlc3RNYWxmb3JtZWRJbnB1dChTdHJpbmcgZmlsZW5hbWUsIElSZXNvdXJjZUNoYXJzZXREZXRlY3RvciBkZXRlY3RvciwgaW50IGV4cGVjdGVkUG9zaXRpb24pIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JCUV4Y2VwdGlvbiBmb3VuZEV4Y2VwdGlvbiA9IG51bGw7Ci0JCWludCBiYWRDaGFyUG9zaXRpb24gPSAtMTsKLQkJRmlsZSBmaWxlID0gVGVzdHNQbHVnaW4uZ2V0VGVzdEZpbGUoZmlsZW5hbWUpOwotCQlpZiAoIWZpbGUuZXhpc3RzKCkpCi0JCQl0aHJvdyBuZXcgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uKGZpbGVuYW1lICsgIiB3YXMgbm90IGZvdW5kIik7Ci0JCUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJSW5wdXRTdHJlYW0gaXN0cmVhbSA9IGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oaW5wdXRTdHJlYW0pOwotCQlkZXRlY3Rvci5zZXQoaXN0cmVhbSk7Ci0JCS8vIElFbmNvZGVkRG9jdW1lbnQgZG9jID0KLQkJLy8gZGV0ZWN0b3IuY3JlYXRlTmV3U3RydWN0dXJlZERvY3VtZW50KGZpbGVuYW1lLCBpc3RyZWFtKTsKLQkJRW5jb2RpbmdNZW1lbnRvIGVuY29kaW5nTWVtZW50byA9ICgoWE1MUmVzb3VyY2VFbmNvZGluZ0RldGVjdG9yKSBkZXRlY3RvcikuZ2V0RW5jb2RpbmdNZW1lbnRvKCk7Ci0JCVN0cmluZyBmb3VuZElBTkFFbmNvZGluZyA9IGVuY29kaW5nTWVtZW50by5nZXRKYXZhQ2hhcnNldE5hbWUoKTsKLQotCQlDaGFyc2V0IGNoYXJzZXQgPSBDaGFyc2V0LmZvck5hbWUoZm91bmRJQU5BRW5jb2RpbmcpOwotCQlDaGFyc2V0RGVjb2RlciBjaGFyc2V0RGVjb2RlciA9IGNoYXJzZXQubmV3RGVjb2RlcigpOwotCQljaGFyc2V0RGVjb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCWNoYXJzZXREZWNvZGVyLm9uVW5tYXBwYWJsZUNoYXJhY3RlcihDb2RpbmdFcnJvckFjdGlvbi5SRVBPUlQpOwotCi0JCWlzdHJlYW0uY2xvc2UoKTsKLQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQotCQkvLyBub3csIHRyeSByZWFkaW5nIGFzIHBlciBlbmNvZGluZwotCQlpbnB1dFN0cmVhbSA9IG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7Ci0JCS8vIHNraXAgQk9NIGZvciB0aGlzIGNhc2UKLQkJLy8gU3lzdGVtLm91dC5wcmludGxuKGlucHV0U3RyZWFtLnJlYWQoKSk7Ci0JCS8vIFN5c3RlbS5vdXQucHJpbnRsbihpbnB1dFN0cmVhbS5yZWFkKCkpOwotCQkvLyBTeXN0ZW0ub3V0LnByaW50bG4oaW5wdXRTdHJlYW0ucmVhZCgpKTsKLQkJSW5wdXRTdHJlYW1SZWFkZXIgcmVhZGVyID0gbmV3IElucHV0U3RyZWFtUmVhZGVyKGlucHV0U3RyZWFtLCBjaGFyc2V0RGVjb2Rlcik7Ci0KLQkJdHJ5IHsKLQkJCS8vIGp1c3QgdHJ5IHJlYWRpbmcgLi4uIHNob3VsZCB0aHJvdyBleGNlcHRpb24KLQkJCS8vIGV4Y2VwdGlvbikKLQkJCXJlYWRJbnB1dFN0cmVhbShyZWFkZXIpOwotCQl9Ci0JCWNhdGNoIChNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbiBlKSB7Ci0JCQkvLyBhcyBleHBlY3RlZCwgbm93IGRvIGRldGFpbGVkIGNoZWNraW5nLgotCQkJaW5wdXRTdHJlYW0uY2xvc2UoKTsKLQkJCWlzdHJlYW0uY2xvc2UoKTsKLQkJCWlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLQkJCWNoYXJzZXREZWNvZGVyID0gY2hhcnNldC5uZXdEZWNvZGVyKCk7Ci0JCQljaGFyc2V0RGVjb2Rlci5vbk1hbGZvcm1lZElucHV0KENvZGluZ0Vycm9yQWN0aW9uLlJFUE9SVCk7Ci0JCQljaGFyc2V0RGVjb2Rlci5vblVubWFwcGFibGVDaGFyYWN0ZXIoQ29kaW5nRXJyb3JBY3Rpb24uUkVQT1JUKTsKLQkJCXJlYWRlciA9IG5ldyBJbnB1dFN0cmVhbVJlYWRlcihpbnB1dFN0cmVhbSwgY2hhcnNldERlY29kZXIpOwotCQkJaXN0cmVhbSA9IGdldE1hcmtTdXBwb3J0ZWRTdHJlYW0oaW5wdXRTdHJlYW0pOwotCQkJdHJ5IHsKLQkJCQloYW5kbGVNYWxGb3JtZWRJbnB1dF9EZXRhaWxDaGVja2luZyhyZWFkZXIsIGZvdW5kSUFOQUVuY29kaW5nKTsKLQkJCX0KLQkJCWNhdGNoIChNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbldpdGhEZXRhaWwgc2UpIHsKLQkJCQlmb3VuZEV4Y2VwdGlvbiA9IHNlOwotCQkJCWJhZENoYXJQb3NpdGlvbiA9IHNlLmdldENoYXJQb3NpdGlvbigpOwotCQkJfQotCi0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAoaXN0cmVhbSAhPSBudWxsKSB7Ci0JCQkJaXN0cmVhbS5jbG9zZSgpOwotCQkJfQotCQkJaWYgKGlucHV0U3RyZWFtICE9IG51bGwpIHsKLQkJCQlpbnB1dFN0cmVhbS5jbG9zZSgpOwotCQkJfQotCi0JCX0KLQkJLy8gaGFuZGxlIGFkanVzdG1lbnRzIGhlcmUgZm9yIFZNIGRpZmZlcm5jZXM6Ci0JCS8vIGZvciBub3cgaXRzIGVpdGhlciA0OSBvciA0OSArIDIgQk9NcyAoNTEpCi0JCS8vIGNhbiBiZSBzbWFydGluZyBsYXRlci4KLQkJYXNzZXJ0VHJ1ZSgiTWFsZm9ybWVkSW5wdXRFeGNlcHRpb24gd2FzIG5vdCB0aHJvd24gYXMgZXhwZWN0ZWQgZm9yIGZpbGVuYW1lOiAiICsgZmlsZW5hbWUgKyAiIEV4Y2VwdGlvbiB0aHJvd246IiArIGZvdW5kRXhjZXB0aW9uLCBmb3VuZEV4Y2VwdGlvbiBpbnN0YW5jZW9mIE1hbGZvcm1lZElucHV0RXhjZXB0aW9uV2l0aERldGFpbCk7Ci0JCWFzc2VydFRydWUoIldyb25nIGNoYXJhY3RlciBwb3NpdGlvbiBkZXRlY3RlZCBpbiBNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbi4gIEV4cGVjdGVkOiAiICsgZXhwZWN0ZWRQb3NpdGlvbiArICIgRm91bmQ6ICIgKyBiYWRDaGFyUG9zaXRpb24sIChiYWRDaGFyUG9zaXRpb24gPT0gZXhwZWN0ZWRQb3NpdGlvbikgfHwgYmFkQ2hhclBvc2l0aW9uID09IGV4cGVjdGVkUG9zaXRpb24gLSAyKTsKLQl9Ci0KLQkvLyBwdWJsaWMgdm9pZCB0ZXN0WFNMTWFsZm9ybWVkSW5wdXQoKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCS8vIFN0cmluZyBmaWxlbmFtZSA9IGZpbGVMb2NhdGlvbiArICJNYWxmb3JtZWROb0VuY29kaW5nLnhzbCI7Ci0JLy8gZG9UZXN0TWFsZm9ybWVkSW5wdXQoZmlsZW5hbWUsIG5ldyBYTUxSZXNvdXJjZUVuY29kaW5nRGV0ZWN0b3IoKSwgMjExKTsKLQkvLyB9Ci0KLQkvKioKLQkgKiBFbnN1cmVzIHRoYXQgYW4gSW5wdXRTdHJlYW0gaGFzIG1hcmsvcmVzZXQgc3VwcG9ydC4KLQkgKi8KLQlwcml2YXRlIHN0YXRpYyBJbnB1dFN0cmVhbSBnZXRNYXJrU3VwcG9ydGVkU3RyZWFtKElucHV0U3RyZWFtIG9yaWdpbmFsKSB7Ci0JCWlmIChvcmlnaW5hbCA9PSBudWxsKQotCQkJcmV0dXJuIG51bGw7Ci0JCWlmIChvcmlnaW5hbC5tYXJrU3VwcG9ydGVkKCkpCi0JCQlyZXR1cm4gb3JpZ2luYWw7Ci0JCXJldHVybiBuZXcgQnVmZmVyZWRJbnB1dFN0cmVhbShvcmlnaW5hbCk7Ci0JfQotCi0JcHJpdmF0ZSBTdHJpbmdCdWZmZXIgcmVhZElucHV0U3RyZWFtKFJlYWRlciByZWFkZXIpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0KLQkJU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJaW50IG51bVJlYWQgPSAwOwotCQljaGFyIHRCdWZmW10gPSBuZXcgY2hhcltSRUFEX0JVRkZFUl9TSVpFXTsKLQkJd2hpbGUgKChudW1SZWFkID0gcmVhZGVyLnJlYWQodEJ1ZmYsIDAsIHRCdWZmLmxlbmd0aCkpICE9IC0xKSB7Ci0JCQlpZiAoREVCVUcpIHsKLQkJCQlTeXN0ZW0ub3V0LnByaW50bG4odEJ1ZmZbMF0pOwotCQkJfQotCQkJYnVmZmVyLmFwcGVuZCh0QnVmZiwgMCwgbnVtUmVhZCk7Ci0JCX0KLQkJcmV0dXJuIGJ1ZmZlcjsKLQl9Ci0KLQkvKgotCSAqIHJlbW92ZWQgZm9yIFBQQyBtYWNoaW5lIHdpdGggSUJNIFZNCi0JICogaHR0cHM6Ly9idWdzLmVjbGlwc2Uub3JnL2J1Z3Mvc2hvd19idWcuY2dpP2lkPTEyNjUwMwotCSAqLwotCS8vIHB1YmxpYyB2b2lkIHRlc3RYTUxNYWxmb3JtZWRJbnB1dCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0JLy8gU3RyaW5nIGZpbGVuYW1lID0gZmlsZUxvY2F0aW9uICsgIk1hbGZvcm1lZE5vRW5jb2RpbmcueG1sIjsKLQkvLyBkb1Rlc3RNYWxmb3JtZWRJbnB1dChmaWxlbmFtZSwgbmV3IFhNTFJlc291cmNlRW5jb2RpbmdEZXRlY3RvcigpLCA1MSk7Ci0JLy8gfQotCS8vIHNpbmNlIGFib3ZlIHRlc3Qgd2FzIG9ubHkgb25lIGltIHRoaXMgY2xhc3MsIHB1dCBpbiB0aGlzIG5vIG9wIHRvIGF2b2lkCi0JLy8gYSBmYWlsdXJlIGR1ZSB0byBubyB0ZXN0cyBpbiBjbGFzcyEKLQlwdWJsaWMgdm9pZCB0ZXN0Tm9PcCgpIHsKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQl9Ci0KLQlwcml2YXRlIHZvaWQgaGFuZGxlTWFsRm9ybWVkSW5wdXRfRGV0YWlsQ2hlY2tpbmcoUmVhZGVyIHJlYWRlciwgU3RyaW5nIGVuY29kaW5nTmFtZSkgdGhyb3dzIElPRXhjZXB0aW9uLCBNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbldpdGhEZXRhaWwgewotCQlpbnQgY2hhclBvc3Rpb24gPSAtMTsKLQkJY2hhclBvc3Rpb24gPSBnZXRDaGFyUG9zdGlvbk9mRmFpbHVyZShyZWFkZXIpOwotCQkvLyBhbGwgb2YgdGhhdCBqdXN0IHRvIHRocm93IG1vcmUgYWNjdXJhdGUgZXJyb3IKLQkJLy8gbm90ZTogd2UgZG8gdGhlIGNvbnZlcnNpb24gdG8gaWFuYU5hbWUsIGluc3RlYWQgb2YgdXNpbmcgdGhlIGxvY2FsCi0JCS8vIHZhcmlhYmxlLAotCQkvLyBiZWNhdXNlIHRoaXMgaXMgdWx0aW1hdGVseSBvbmx5IGZvciB0aGUgdXNlciBlcnJvciBtZXNzYWdlICh0aGF0Ci0JCS8vIGlzLAotCQkvLyB0aGUgZXJyb3Igb2NjdXJyZWQKLQkJLy8gaW4gY29udGV4dCBvZiBqYXZhRW5jb2RpbmdOYW1lIG5vIG1hdHRlciB3aGF0IGlhbmFFbmNvZGluZ05hbWUgaXMKLQkJdGhyb3cgbmV3IE1hbGZvcm1lZElucHV0RXhjZXB0aW9uV2l0aERldGFpbChlbmNvZGluZ05hbWUsIGNoYXJQb3N0aW9uKTsKLQl9Ci0KLQlwcml2YXRlIGludCBnZXRDaGFyUG9zdGlvbk9mRmFpbHVyZShSZWFkZXIgcmVhZGVyKSB0aHJvd3MgSU9FeGNlcHRpb24gewotCQlpbnQgY2hhclBvc2l0aW9uID0gMTsKLQkJaW50IGNoYXJSZWFkID0gLTE7Ci0JCWludCByZXN1bHQgPSAtMTsKLQkJYm9vbGVhbiBlcnJvckZvdW5kID0gZmFsc2U7Ci0JCWRvIHsKLQkJCXRyeSB7Ci0JCQkJaWYgKHJlYWRlci5yZWFkeSgpKSB7Ci0JCQkJCWNoYXJSZWFkID0gcmVhZGVyLnJlYWQoKTsKLQkJCQl9Ci0JCQkJaWYgKERFQlVHKSB7Ci0JCQkJCVN5c3RlbS5vdXQucHJpbnRsbihjaGFyUG9zaXRpb24gKyAiOiAiICsgZXNjYXBlKChjaGFyKSBjaGFyUmVhZCwgdHJ1ZSkpOwotCQkJCX0KLQkJCQljaGFyUG9zaXRpb24rKzsKLQkJCX0KLQkJCWNhdGNoIChNYWxmb3JtZWRJbnB1dEV4Y2VwdGlvbiBlKSB7Ci0JCQkJLy8gdGhpcyBpcyBleHBlY3RlZCwgc2luY2Ugd2UncmUgZXhwZWN0aW5nIGZhaWx1cmUsCi0JCQkJLy8gc28gbm8gbmVlZCB0byBkbyBhbnl0aGluZy4KLQkJCQllcnJvckZvdW5kID0gdHJ1ZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQl3aGlsZSAoKGNoYXJSZWFkICE9IC0xICYmICFlcnJvckZvdW5kKSAmJiByZWFkZXIucmVhZHkoKSk7Ci0KLQkJaWYgKGVycm9yRm91bmQpCi0JCQlyZXN1bHQgPSBjaGFyUG9zaXRpb247Ci0JCWVsc2UKLQkJCXJlc3VsdCA9IC0xOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQotCXByaXZhdGUgU3RyaW5nIGVzY2FwZShjaGFyIGFDaGFyLCBib29sZWFuIGVzY2FwZVNwYWNlKSB7Ci0KLQkJU3RyaW5nQnVmZmVyIG91dEJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLQkJc3dpdGNoIChhQ2hhcikgewotCQkJY2FzZSAnICcgOgotCQkJCWlmIChlc2NhcGVTcGFjZSkKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJyAnKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1xcJyA6Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnXHQnIDoKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ3QnKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1xuJyA6Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCduJyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdccicgOgotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ1xcJyk7Ci0JCQkJb3V0QnVmZmVyLmFwcGVuZCgncicpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnXGYnIDoKLQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCW91dEJ1ZmZlci5hcHBlbmQoJ2YnKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQgOgotCQkJCWlmICgoYUNoYXIgPCAweDAwMjApIHx8IChhQ2hhciA+IDB4MDA3ZSkpIHsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCgnXFwnKTsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCgndScpOwotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKHRvSGV4KChhQ2hhciA+PiAxMikgJiAweEYpKTsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCh0b0hleCgoYUNoYXIgPj4gOCkgJiAweEYpKTsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCh0b0hleCgoYUNoYXIgPj4gNCkgJiAweEYpKTsKLQkJCQkJb3V0QnVmZmVyLmFwcGVuZCh0b0hleChhQ2hhciAmIDB4RikpOwotCQkJCX0KLQkJCQllbHNlIHsKLQkJCQkJaWYgKHNwZWNpYWxTYXZlQ2hhcnMuaW5kZXhPZihhQ2hhcikgIT0gLTEpCi0JCQkJCQlvdXRCdWZmZXIuYXBwZW5kKCdcXCcpOwotCQkJCQlvdXRCdWZmZXIuYXBwZW5kKGFDaGFyKTsKLQkJCQl9Ci0JCX0KLQotCQlyZXR1cm4gb3V0QnVmZmVyLnRvU3RyaW5nKCk7Ci0JfQotCi0JLyoqCi0JICogQ29udmVydCBhIG5pYmJsZSB0byBhIGhleCBjaGFyYWN0ZXIKLQkgKiAKLQkgKiBAcGFyYW0gbmliYmxlCi0JICogICAgICAgICAgICB0aGUgbmliYmxlIHRvIGNvbnZlcnQuCi0JICovCi0JcHJpdmF0ZSBzdGF0aWMgY2hhciB0b0hleChpbnQgbmliYmxlKSB7Ci0JCXJldHVybiBoZXhEaWdpdFsobmliYmxlICYgMHhGKV07Ci0JfQotCi0JLyoqIEEgdGFibGUgb2YgaGV4IGRpZ2l0cyAqLwotCXByaXZhdGUgc3RhdGljIGZpbmFsIGNoYXJbXSBoZXhEaWdpdCA9IHsnMCcsICcxJywgJzInLCAnMycsICc0JywgJzUnLCAnNicsICc3JywgJzgnLCAnOScsICdBJywgJ0InLCAnQycsICdEJywgJ0UnLCAnRid9OwotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBzcGVjaWFsU2F2ZUNoYXJzID0gIj06IFx0XHJcblxmIyEiOwotCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3Njk4MTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy5FbmNvZGluZ1Rlc3RTdWl0ZSIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0idGVzdFR5cGUiCi0gICAgICAgIHZhbHVlPSJ1aS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy56aXAgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy56aXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmMGIxYWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMuemlwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuaHRtIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuaHRtCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTU3MGZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1Lmh0bQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotPCUtLSBqc2Y6Y29kZUJlaGluZCBsYW5ndWFnZT0iamF2YSIgbG9jYXRpb249Ii9KYXZhU291cmNlL3BhZ2Vjb2RlL3Rlc3QvS2FlcnU1LmphdmEiIC0tJT48JS0tIC9qc2Y6Y29kZUJlaGluZCAtLSU+Ci08JUB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9odG1sIiBwcmVmaXg9ImgiJT4KLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly93d3cuaWJtLmNvbS9qc2YvaHRtbF9leHRlbmRlZCIgcHJlZml4PSJoeCIlPgotPEhUTUw+Ci08SEVBRD4KLTwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImYiICU+Ci08JUAgcGFnZSAKLWxhbmd1YWdlPSJqYXZhIgotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiCi1wYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyIKLSU+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPgotPExJTksgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vdGhlbWUvc3R5bGVzaGVldC5jc3MiCi0JdGl0bGU9IlN0eWxlIj4KLTxUSVRMRT5rYWVydS5qc3A8L1RJVExFPgotPC9IRUFEPgotPGY6dmlldz4KLQk8Qk9EWT4KLQk8aHg6c2NyaXB0Q29sbGVjdG9yIGlkPSJzY3JpcHRDb2xsZWN0b3IxIj4KLQkJPGg6Zm9ybSBzdHlsZUNsYXNzPSJmb3JtIiBpZD0iZm9ybTEiPgotCQkJj7OURgotCQkJj7OURgotCQkJj7OURgotCQkJPGg6c2VsZWN0T25lTWVudSBpZD0iQ29tYm8zMCIgc3R5bGVDbGFzcz0iQ29tYm8zMCIgdGFiaW5kZXg9IjI2Ij4KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0idG9reW8iIGl0ZW1MYWJlbD0idG9reW8iIC8+Ci0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9Io/YjJSO5oj4j4oiIGl0ZW1MYWJlbD0ij9iMlI7miPiPiiIgLz4KLQkJCTwvaDpzZWxlY3RPbmVNZW51PgotCQkJPGg6c2VsZWN0T25lTWVudSBpZD0iQ29tYm8zMSIgc3R5bGVDbGFzcz0iQ29tYm8zMSIgdGFiaW5kZXg9IjI3Ij4KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0idG9reW8iIGl0ZW1MYWJlbD0idG9reW8iIC8+Ci0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9Imt5b3RvIiBpdGVtTGFiZWw9Imt5b3RvIiAvPgotCQkJPC9oOnNlbGVjdE9uZU1lbnU+Ci0JCTwvaDpmb3JtPgotCTwvaHg6c2NyaXB0Q29sbGVjdG9yPgotCTwvQk9EWT4KLTwvZjp2aWV3PgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvRG9jdW1lbnRTdHJlYW1UZXN0Q2FzZS9rYWVydTUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODM3MDRiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL0RvY3VtZW50U3RyZWFtVGVzdENhc2Uva2FlcnU1LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTwlLS0ganNmOmNvZGVCZWhpbmQgbGFuZ3VhZ2U9ImphdmEiIGxvY2F0aW9uPSIvSmF2YVNvdXJjZS9wYWdlY29kZS90ZXN0L0thZXJ1NS5qYXZhIiAtLSU+PCUtLSAvanNmOmNvZGVCZWhpbmQgLS0lPg0KLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly9qYXZhLnN1bi5jb20vanNmL2h0bWwiIHByZWZpeD0iaCIlPg0KLTwlQHRhZ2xpYiB1cmk9Imh0dHA6Ly93d3cuaWJtLmNvbS9qc2YvaHRtbF9leHRlbmRlZCIgcHJlZml4PSJoeCIlPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCB0YWdsaWIgdXJpPSJodHRwOi8vamF2YS5zdW4uY29tL2pzZi9jb3JlIiBwcmVmaXg9ImYiICU+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiDQotcGFnZUVuY29kaW5nPSJTSElGVF9KSVMiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxMSU5LIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3RoZW1lL3N0eWxlc2hlZXQuY3NzIg0KLQl0aXRsZT0iU3R5bGUiPg0KLTxUSVRMRT5rYWVydS5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Zjp2aWV3Pg0KLQk8Qk9EWT4NCi0JPGh4OnNjcmlwdENvbGxlY3RvciBpZD0ic2NyaXB0Q29sbGVjdG9yMSI+DQotCQk8aDpmb3JtIHN0eWxlQ2xhc3M9ImZvcm0iIGlkPSJmb3JtMSI+DQotCQkJj7OURg0KLQkJCY+zlEYNCi0JCQmPs5RGDQotCQkJPGg6c2VsZWN0T25lTWVudSBpZD0iQ29tYm8zMCIgc3R5bGVDbGFzcz0iQ29tYm8zMCIgdGFiaW5kZXg9IjI2Ij4NCi0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9InRva3lvIiBpdGVtTGFiZWw9InRva3lvIiAvPg0KLQkJCQk8ZjpzZWxlY3RJdGVtIGl0ZW1WYWx1ZT0ij9iMlI7miPiPiiIgaXRlbUxhYmVsPSKP2IyUjuaI+I+KIiAvPg0KLQkJCTwvaDpzZWxlY3RPbmVNZW51Pg0KLQkJCTxoOnNlbGVjdE9uZU1lbnUgaWQ9IkNvbWJvMzEiIHN0eWxlQ2xhc3M9IkNvbWJvMzEiIHRhYmluZGV4PSIyNyI+DQotCQkJCTxmOnNlbGVjdEl0ZW0gaXRlbVZhbHVlPSJ0b2t5byIgaXRlbUxhYmVsPSJ0b2t5byIgLz4NCi0JCQkJPGY6c2VsZWN0SXRlbSBpdGVtVmFsdWU9Imt5b3RvIiBpdGVtTGFiZWw9Imt5b3RvIiAvPg0KLQkJCTwvaDpzZWxlY3RPbmVNZW51Pg0KLQkJPC9oOmZvcm0+DQotCTwvaHg6c2NyaXB0Q29sbGVjdG9yPg0KLQk8L0JPRFk+DQotPC9mOnZpZXc+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbXB0eUZpbGUuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VtcHR5RmlsZS5jc3MKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3RfZXVjanAuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTI1NmU3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2V1Y2pwLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIkVVQy1KUCI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIqPNo9Mgo9CltKW3pcOlryI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3MvZW5jb2RpbmdfdGVzdF9qaXMuY3NzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzODQ3NjhiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X2ppcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJJU08tMjAyMi1KUCI7DQotDQotQk9EWSB7DQotCWZvbnQtZmFtaWx5IDogIhskQiNNI1MbKEIgGyRCI1AlNCU3JUMlLxsoQiI7DQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9lbmNvZGluZ190ZXN0X3NqaXMuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1MjljZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL2VuY29kaW5nX3Rlc3Rfc2ppcy5jc3MKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLUBjaGFyc2V0ICJTSElGVF9KSVMiOw0KLQ0KLUJPRFkgew0KLQlmb250LWZhbWlseSA6ICKCbIJyIIJvg1ODVoNig04iOw0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9FbmNvZGluZy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZjA2YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vRW5jb2RpbmcuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotQk9EWSB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgIk1TIFNhbnMgU2VyaWYiOw0KLQl0ZXh0LWRlY29yYXRpb246IG5vbmU7DQotCWJhY2tncm91bmQtY29sb3I6IHdoaXRlOw0KLX0NCi0NCi1URCB7DQotCWZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIjsNCi0JZm9udC1zaXplOiAxMnB0Ow0KLQljb2xvcjogYmxhY2s7DQotCWZvbnQtc3R5bGU6IG5vcm1hbDsNCi0JdGV4dC1hbGlnbjogbGVmdDsNCi19DQotDQotVEggew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXI7DQotCXRleHQtYWxpZ246IGxlZnQ7DQotfQ0KLQ0KLUgxIHsNCi0JZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iOw0KLQlmb250LXNpemU6IDE0cHQ7DQotCWNvbG9yOiBibGFjazsNCi0JZm9udC1zdHlsZTogbm9ybWFsOw0KLQlmb250LXdlaWdodDogYm9sZGVyOw0KLQl0ZXh0LWFsaWduOiBjZW50ZXINCi19DQotDQotSDIgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBub3JtYWw7DQotCWZvbnQtd2VpZ2h0OiBib2xkZXINCi19DQotDQotSDMgew0KLQlmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiI7DQotCWZvbnQtc2l6ZTogMTJwdDsNCi0JY29sb3I6IGJsYWNrOw0KLQlmb250LXN0eWxlOiBpdGFsaWMgIA0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM5OTdlYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmQuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AY2hhcnNldCAiSVNPLTg4NTktNiI7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2Nzcy9ub25TdGFuZGFyZElsbEZvcm1lZC5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYTRlNDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotQGNoYXJzZXQgIklTTy04ODU5LTY7DQotDQotDQotDQotDQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvY3NzL25vblN0YW5kYXJkSWxsRm9ybWVkMi5jc3MgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTNjOGExZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9jc3Mvbm9uU3RhbmRhcmRJbGxGb3JtZWQyLmNzcworKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotDQotDQotICAgIEBjaGFyc2V0ICJJU08tODg1OS02IjsNCi0NCi0NCi0NCi0NCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUJpZzUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQmlnNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGZlNWE1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQmlnNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJCaWc1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1DRVNVLTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtQ0VTVS04LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiN2E1NDQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1DRVNVLTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQ0VTVS04Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1DT01QT1VORF9URVhULnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUNPTVBPVU5EX1RFWFQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBmYjcxMi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUNPTVBPVU5EX1RFWFQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQ09NUE9VTkRfVEVYVCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtRVVDLUNOLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1DTi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTBiMTZiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtRVVDLUNOLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkVVQy1DTiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtRVVDLUpQLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNTM5Nzc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtRVVDLUpQLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkVVQy1KUCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtRVVDLUtSLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YWU5MjliLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtRVVDLUtSLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkVVQy1LUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmYTEzYzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkdCMTgwMzAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCMjMxMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQjIzMTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTg0OTJkNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCMjMxMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJHQjIzMTIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCSy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1HQksueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJiYmQ0Ny4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUdCSy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJHQksiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDA2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDA2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3N2JhNzUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTAwNi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTAwNiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQ5NThlOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMDQxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0My54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzNkM2FhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEwNDMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQ2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQ2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjNDBjMTkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA0Ni54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTA0NiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDZTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDQ2Uy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGUyMGE0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwNDZTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMDQ2UyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwODgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwODgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDdhNTFhMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMDg4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMDg4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA5OC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTA5OC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZGEzNDQzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEwOTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEwOTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTE0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTE0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzM2NlZjQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTExNC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTExNCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAyOTBiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMTE1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMTE1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTEyNC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTEyNC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTU5NmM1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTExMjQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTExMjQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzYzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzYzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmNzJhNWQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM2My54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTM2MyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNjNDLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzYzQy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMTgxMjRkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNjNDLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMzYzQyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNzAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzNzAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTgzOWM4OS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzcwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMzcwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4MS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4MS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWM5MGU5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTEzODEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzgzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzgzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5YWYyOGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMTM4My54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tMTM4MyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTEzODYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGFkOTljZS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0xMzg2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS0xMzg2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tMzM3MjJDLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0zMzcyMkMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWY1OTJlYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS0zMzcyMkMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTMzNzIyQyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTQzNy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNDM3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmMDRlZjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNDM3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS00MzciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS03MzcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTczNy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjg1MzVmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTczNy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tNzM3Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tNzc1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS03NzUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWRjOTQ0OS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS03NzUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTc3NSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTgwOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODA4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwMjhmY2UuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODA4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04MDgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTg3ZDkxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODUwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODUyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE5NGQ1Yy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg1MiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1NS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMzU0N2MuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Ni54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGE0YjViLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1Ni54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODU2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWUyMGM5MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg1NyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1OC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1NWYxNGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODU4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NTkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1OS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTliMjUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg1OS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODU5Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWI4MjI5My4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2MS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyOTEwZWMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Mi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmE3MTE0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Mi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODYyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODYzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDE2NzM1Ny4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2MyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzM2U1NzcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjRTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjRTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4M2FlYjguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY0Uy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODY0UyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2NS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkN2Q1ZGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Ni54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWZhMjYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2Ni54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODY2Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzVmNjc1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg2NyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2OC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMzgwMWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODY4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04NjgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NjkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2OS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZmVlMGMxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg2OS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tODY5Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODc0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NzQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzdjMjUwYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS04NzQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTg3NCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTg5Ny54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODk3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxYjE1OTYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tODk3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS04OTciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MjEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkyMS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODQxN2UwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkyMS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTIxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTIyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MjIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA2YjgyNi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05MjIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTkyMiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTkzMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTMyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NDZmZTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTMyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05MzIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0Mi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MzNlNWJmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0Mi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTQyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQyQy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQyQy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjNlMzhkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0MkMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk0MkMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0My54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNDE0MjYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0My54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTQzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQzQy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQzQy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZGE5MWVhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0M0MueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk0M0MiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWRhMjIyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJQk0tOTQ4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTQ5LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmM1YWNkYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk0OSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OUMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk0OUMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDZmNDVjNi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NDlDLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NDlDIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JQk0tOTUwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY1NjZiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSUJNLTk1MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk1NEMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSUJNLTk1NEMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWE2NWMxNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlCTS05NTRDLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklCTS05NTRDIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1DTi1HQi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1DTi1HQi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTZiNTlhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItQ04tR0IueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTIwMjItQ04tR0IiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUNOLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUNOLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZjNkYTMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1DTi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1DTiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2N2MxNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy0yMDIyLUpQIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjc4MDRhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTIwMjItS1IiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjBhYjgzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZjA3NDk2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmM2VkNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xMyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzM4OTljYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTE0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OGQ2ZmQ3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEwZjU3ZDguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0xNi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xNiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0yLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MTg1YzIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS0yLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTM0OTQxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0zIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBmOTkzNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS01LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ODZiZjkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS01LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzQ0NGJmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS02Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS02Uy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS02Uy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDlhZDlhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNlMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNlMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWU5NWQ1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS03Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY0ZDMwMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwODM5MzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMDEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIwMS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTIzM2Q5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIwMS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKSVMwMjAxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjA4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMDgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ5OTM0Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpJUzAyMDgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSklTMDIwOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtSklTMDIxMi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjEyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwMjlmNjMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1KSVMwMjEyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkpJUzAyMTIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpvaGFiLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUpvaGFiLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlMDdjY2IuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1Kb2hhYi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJKb2hhYiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzA0NWU2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IktPSTgtUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS09JOC1SVS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVJVLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3Y2RkYTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVJVLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IktPSTgtUlUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtVS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1LT0k4LVUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0OGYzYy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtPSTgtVS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJLT0k4LVUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LUtTQzU2MDEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS1NDNTYwMS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODU5NDc5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtS1NDNTYwMS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJLU0M1NjAxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNBcmFiaWMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQXJhYmljLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZTAyN2EuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNBcmFiaWMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjQXJhYmljIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDZW50cmFsRXVyb3BlLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0NlbnRyYWxFdXJvcGUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJiMGQ3MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0NlbnRyYWxFdXJvcGUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjQ2VudHJhbEV1cm9wZSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ3JvYXRpYW4ueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ3JvYXRpYW4ueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDUwYWIzYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0Nyb2F0aWFuLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY0Nyb2F0aWFuIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDeXJpbGxpYy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNDeXJpbGxpYy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMGUzYzkyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjQ3lyaWxsaWMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjQ3lyaWxsaWMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0dyZWVrLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0dyZWVrLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkZmFkNjIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNHcmVlay54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNHcmVlayI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjSGVicmV3LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY0hlYnJldy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2I1NDkyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjSGVicmV3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY0hlYnJldyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjSWNlbGFuZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNJY2VsYW5kLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVkYWQ0N2QuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNJY2VsYW5kLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY0ljZWxhbmQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1JvbWFuLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1JvbWFuLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjMWYwZDUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNSb21hbi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNSb21hbiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjUm9tYW5pYS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNSb21hbmlhLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmNmE0YjkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNSb21hbmlhLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY1JvbWFuaWEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1RoYWkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVGhhaS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjRkYWNmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVGhhaS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJNYWNUaGFpIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNUdXJraXNoLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1R1cmtpc2gueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWNkNjgyNi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LU1hY1R1cmtpc2gueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iTWFjVHVya2lzaCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtTWFjVWtyYWluZS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNVa3JhaW5lLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYmM5NTMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1NYWNVa3JhaW5lLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ik1hY1VrcmFpbmUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVBUQ1AxNTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtUFRDUDE1NC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTc2N2JhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtUFRDUDE1NC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJQVENQMTU0Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1TaGlmdF9KSVMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YjRlNjIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1TaGlmdF9KSVMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iU2hpZnRfSklTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZkMzJhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVElTLTYyMCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdlYThiMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVTLUFTQ0lJIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE2OWRjNTIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTYueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDM1OGMwYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZDJlMGQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQxMGQ1MDguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzIueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyQkUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTMyQkUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjhhOWJmMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMkJFLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMkxFLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi0zMkxFLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5MGE3ZjguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtMzJMRS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjZmM2JiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi04Si54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1VVEYtOEoueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTQ2NjU5ZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVVURi04Si54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOEoiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVgtVW5pY29kZUJpZy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1YLVVuaWNvZGVCaWcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODUxYjcwYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LVgtVW5pY29kZUJpZy54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1YLVVuaWNvZGVMaXR0bGUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtWC1Vbmljb2RlTGl0dGxlLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxNGI5YmMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC1YLVVuaWNvZGVMaXR0bGUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtaHAtcm9tYW44LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LWhwLXJvbWFuOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZTk4MzA0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3QtaHAtcm9tYW44LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9ImhwLXJvbWFuOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGQ2NTZmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmJjMGMzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGFjNTg1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWU2YWVjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODA2MjhmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjY3MjcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWUwMDQ5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2Uy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTZTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5ODcyNjQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTZTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NlMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ny54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5NWE2MS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ny54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1OC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGZjNWU5YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1OC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtODc0LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtODc0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgyYzNkMTMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTg3NC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTg3NCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05MzIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05MzIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdmMjZiNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTMyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtOTMyIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTkzNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTkzNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODc5ZmNlLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05MzYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy05MzYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTQ5LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTQ5LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyZDM0ODEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdC13aW5kb3dzLTk0OS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTk0OSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05NTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yIFwwNTAxLjQuMlwwNTEveG1sL3Rlc3Qtd2luZG93cy05NTAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTdjM2JjNi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0LXdpbmRvd3MtOTUwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtOTUwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjIgXDA1MDEuNC4yXDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0TWV0aG9kcy50ZXh0IgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc0ZGRkYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMiBcMDUwMS40LjJcMDUxL3htbC90ZXN0TWV0aG9kcy50ZXh0IgorKysgL2Rldi9udWxsCkBAIC0xLDUyNSArMCwwIEBACi0xMzENCi0JcHVibGljIHZvaWQgdGVzdEZpbGUwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQmlnNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkNFU1UtOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkNPTVBPVU5EX1RFWFQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtQ04iOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtSlAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtS1IiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjE4MDMwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0IyMzEyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0JLIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiaHAtcm9tYW44IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDA2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQ2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS0xMDQ2UyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA4OCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTA5OCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTExNCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTExNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTEyNCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM2MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tMTM2M0MiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzNzAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTEzODYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTMzNzIyQyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tNDM3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS03MzciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTc3NSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODA4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1MiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg1NyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODU4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NTkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODYxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2MyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjRTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2NiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODY3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04NjgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTg2OSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tODc0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS04OTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTkyMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTIyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05MzIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0MiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQyQyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDNDIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NDgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTU5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSUJNLTk0OSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTQ5QyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNjEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJQk0tOTUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklCTS05NTRDIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUNOIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUNOLUdCIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUpQIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUtSIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTY5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTczKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0zIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTQiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTc2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS02IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTZTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU3OSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS05IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJUzAyMDEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTgzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTMDIwOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVMwMjEyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpvaGFiIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLT0k4LVJVIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtVSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlODkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJLU0M1NjAxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0FyYWJpYyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNDZW50cmFsRXVyb3BlIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0Nyb2F0aWFuIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0N5cmlsbGljIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0dyZWVrIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY0hlYnJldyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJNYWNJY2VsYW5kIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1JvbWFuIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU5OCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIk1hY1JvbWFuaWEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTk5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVGhhaSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVHVya2lzaCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiTWFjVWtyYWluZSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiUFRDUDE1NCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiU2hpZnRfSklTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJUSVMtNjIwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVUy1BU0NJSSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMDcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZCRSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTA4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2TEUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEwOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTMyQkUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0zMkxFIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLThKIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUyIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTExOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NlMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTg3NCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05MzIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtOTM2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTk0OSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy05NTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlgtVW5pY29kZUJpZyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiWC1Vbmljb2RlTGl0dGxlIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1CaWc1LUhLU0NTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1CaWc1LUhLU0NTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxMDMyNGQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtQmlnNS1IS1NDUy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJCaWc1LUhLU0NTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtQmlnNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtQmlnNS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZGZlNWE1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUJpZzUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iQmlnNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUVVQy1KUC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtRVVDLUpQLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1Mzk3NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtRVVDLUpQLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkVVQy1KUCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUVVQy1LUi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtRVVDLUtSLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhZTkyOWIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtRVVDLUtSLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkVVQy1LUiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ZhMTNjMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1HQjE4MDMwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkdCMTgwMzAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1HQksueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUdCSy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmJiZDQ3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUdCSy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJHQksiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTIwMjItSlAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM2N2MxNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tMjAyMi1KUCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tMjAyMi1LUi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjc4MDRhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy0yMDIyLUtSIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjBhYjgzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEzLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0xMy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjNlZDYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTEzIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTE1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk4ZDZmZDcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0yLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS0yLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MTg1YzIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0yIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTM0OTQxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDBmOTkzNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS00LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS01LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS01LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2ODZiZjkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS01Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzQ0NGJmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVlOTVkNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS03LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2NGQzMDEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDgzOTMwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUlTTy04ODU5LTkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUpJU19YMDIwMS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSklTX1gwMjAxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzYTQyZDguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtSklTX1gwMjAxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkpJU19YMDIwMSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUpJU19YMDIxMi0xOTkwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1KSVNfWDAyMTItMTk5MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjcwYjc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LUpJU19YMDIxMi0xOTkwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkpJU19YMDIxMi0xOTkwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtS09JOC1SLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjMwNDVlNi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iS09JOC1SIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtU2hpZnRfSklTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1TaGlmdF9KSVMueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjliNGU2Mi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1TaGlmdF9KSVMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iU2hpZnRfSklTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmQzMmE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVRJUy02MjAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVElTLTYyMCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VUy1BU0NJSS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4N2VhOGIwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVTLUFTQ0lJIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtMTYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmVjNTUzMC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtMTYueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtMTZCRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzU4YzBiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTE2TEUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThkMmUwZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LVVURi04LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyNmYzYmIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OGQ2NTZmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTEueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMmJjMGMzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTEiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOGFjNTg1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OWU2YWVjLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODA2MjhmLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTQiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjY3MjcwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNWUwMDQ5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ny54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMDk1YTYxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ny54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTEyNTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1OC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmM1ZTlhLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1OC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTMxai54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3Qtd2luZG93cy0zMWoueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTM4Y2ZkNS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC13aW5kb3dzLTMxai54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTMxaiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtRVVDLUNOLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUVVQy1DTi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmRjNjQxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtRVVDLUNOLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtRVVDLUNOIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1FVUMtVFcueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtRVVDLVRXLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0OGUzN2EuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1FVUMtVFcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1FVUMtVFciPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUpJUzAyMDgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtSklTMDIwOC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmQwN2ZkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtSklTMDIwOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LUpJUzAyMDgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUpvaGFiLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LUpvaGFiLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlYWY4N2EuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1Kb2hhYi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LUpvaGFiIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1NUzk1MC1IS1NDUy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1NUzk1MC1IS1NDUy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ODA2YjMxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtTVM5NTAtSEtTQ1MueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1NUzk1MC1IS1NDUyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtZXVjLWpwLWxpbnV4LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LWV1Yy1qcC1saW51eC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjQzZGZiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtZXVjLWpwLWxpbnV4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtZXVjLWpwLWxpbnV4Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1tc3dpbi05MzYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtbXN3aW4tOTM2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUxYmYxMGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC1tc3dpbi05MzYueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1tc3dpbi05MzYiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTQ5LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTQ5LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE4YzkzZjQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk0OS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LXdpbmRvd3MtOTQ5Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDMgXDA1MDEuNC4yXzAzLWIwMlwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk1MC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDhlNTNiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC13aW5kb3dzLTk1MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0TWV0aG9kcy50ZXh0IiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzAzIFwwNTAxLjQuMl8wMy1iMDJcMDUxL3htbC90ZXN0TWV0aG9kcy50ZXh0IgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmY2OGYyNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wMyBcMDUwMS40LjJfMDMtYjAyXDA1MS94bWwvdGVzdE1ldGhvZHMudGV4dCIKKysrIC9kZXYvbnVsbApAQCAtMSwxOTMgKzAsMCBAQAotNDgNCi0JcHVibGljIHZvaWQgdGVzdEZpbGUwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQmlnNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkJpZzUtSEtTQ1MiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtSlAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJFVUMtS1IiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQjE4MDMwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiR0JLIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTIwMjItSlAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1LUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xMyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0xNSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS0yIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS01IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS04IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxOCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTX1gwMjAxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkpJU19YMDIxMi0xOTkwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIktPSTgtUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJTaGlmdF9KSVMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVElTLTYyMCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVUy1BU0NJSSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2QkUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTE2TEUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiVVRGLTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTI5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0zMWoiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM5KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1FVUMtQ04iOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1ldWMtanAtbGludXgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1FVUMtVFciOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1KSVMwMjA4IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0MygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtSm9oYWIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ0KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1NUzk1MC1IS1NDUyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LW1zd2luLTkzNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LXdpbmRvd3MtOTQ5IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtd2luZG93cy05NTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUJpZzUtSEtTQ1MueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUJpZzUtSEtTQ1MueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEwMzI0ZC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1CaWc1LUhLU0NTLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkJpZzUtSEtTQ1MiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1CaWc1LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1CaWc1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkZmU1YTUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtQmlnNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJCaWc1Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtRVVDLUpQLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTUzOTc3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1FVUMtSlAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUpQIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtRVVDLUtSLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFlOTI5Yi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1FVUMtS1IueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUtSIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtR0IxODAzMC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmExM2MwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUdCMTgwMzAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iR0IxODAzMCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUdCSy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtR0JLLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyYmJkNDcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtR0JLLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IkdCSyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tMjAyMi1KUC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYzY3YzE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUpQLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy0yMDIyLUpQIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy0yMDIyLUtSLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNzgwNGEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTIwMjItS1IueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTIwMjItS1IiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmMGFiODMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTEzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmM2VkNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTMueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMTMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThkNmZkNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0xNS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xNSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgxODVjMi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0yLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS0zLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgxMzQ5NDEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktMy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0zIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGY5OTM1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTQueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTUueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY4NmJmOS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS01LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTUiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS02LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzNDQ0YmYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS02Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktNy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWU5NWQ1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTcueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktNyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUlTTy04ODU5LTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY0ZDMwMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS04LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1JU08tODg1OS05LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwODM5MzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSVNPLTg4NTktOS54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS05Ij8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSklTX1gwMjAxLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1KSVNfWDAyMDEueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNhNDJkOC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1KSVNfWDAyMDEueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSklTX1gwMjAxIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSklTX1gwMjEyLTE5OTAueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUpJU19YMDIxMi0xOTkwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmNzBiNzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtSklTX1gwMjEyLTE5OTAueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSklTX1gwMjEyLTE5OTAiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1LT0k4LVIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMzA0NWU2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LUtPSTgtUi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJLT0k4LVIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1TaGlmdF9KSVMueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWI0ZTYyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVNoaWZ0X0pJUy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJTaGlmdF9KSVMiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1USVMtNjIwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmZDMyYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVElTLTYyMC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJUSVMtNjIwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVTLUFTQ0lJLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3ZWE4YjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVMtQVNDSUkueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVMtQVNDSUkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTYueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZWM1NTMwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi0xNi54bWwiCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi0xNkJFLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNThjMGIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTE2QkUueG1sIgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtMTZMRS54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGQyZTBkLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LVVURi0xNkxFLnhtbCIKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QtVVRGLTgueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTI2ZjNiYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC1VVEYtOC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZDY1NmYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUwLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1MS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyYmMwYzMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUxLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Mi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ4YWM1ODUuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUyLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1My54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5ZTZhZWMuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjUzLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4MDYyOGYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU0LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1NS54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyNjcyNzAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU1LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NSI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ni54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1ZTAwNDkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU2LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1Ny54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIwOTVhNjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU3LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1NyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMTI1OC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRmYzVlOWEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3Qtd2luZG93cy0xMjU4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1OCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMzFqLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC13aW5kb3dzLTMxai54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzhjZmQ1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXdpbmRvd3MtMzFqLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMzFqIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1FVUMtQ04ueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtRVVDLUNOLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNmZGM2NDEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1FVUMtQ04ueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1FVUMtQ04iPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUVVQy1UVy54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1FVUMtVFcueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzQ4ZTM3YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUVVQy1UVy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LUVVQy1UVyI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtSklTMDIwOC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1KSVMwMjA4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZDA3ZmQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1KSVMwMjA4LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtSklTMDIwOCI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtSm9oYWIueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtSm9oYWIueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGVhZjg3YS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LUpvaGFiLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IngtSm9oYWIiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LU1TOTUwLUhLU0NTLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LU1TOTUwLUhLU0NTLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU4MDZiMzEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1NUzk1MC1IS1NDUy54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LU1TOTUwLUhLU0NTIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1ldWMtanAtbGludXgueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtZXVjLWpwLWxpbnV4LnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNDNkZmIuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1ldWMtanAtbGludXgueG1sIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0ieC1ldWMtanAtbGludXgiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LW1zd2luLTkzNi54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC1tc3dpbi05MzYueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiZjEwYS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LW1zd2luLTkzNi54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LW1zd2luLTkzNiI/PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ci0xMjM0NTY3ODkwCi1BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NDkueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0LXgtd2luZG93cy05NDkueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYThjOTNmNC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTQ5LnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Ingtd2luZG93cy05NDkiPz5hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotMTIzNDU2Nzg5MAotQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTUwLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvZ2VuZWRGaWxlcy0xLjQuMl8wNSBcMDUwMS40LjJfMDUtYjA0XDA1MS94bWwvdGVzdC14LXdpbmRvd3MtOTUwLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU0OGU1M2IuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3QteC13aW5kb3dzLTk1MC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ4LXdpbmRvd3MtOTUwIj8+YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKLTEyMzQ1Njc4OTAKLUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2dlbmVkRmlsZXMtMS40LjJfMDUgXDA1MDEuNC4yXzA1LWIwNFwwNTEveG1sL3Rlc3RNZXRob2RzLnRleHQiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjY4ZjI0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9nZW5lZEZpbGVzLTEuNC4yXzA1IFwwNTAxLjQuMl8wNS1iMDRcMDUxL3htbC90ZXN0TWV0aG9kcy50ZXh0IgorKysgL2Rldi9udWxsCkBAIC0xLDE5MyArMCwwIEBACi00OA0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJCaWc1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiQmlnNS1IS1NDUyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1KUCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkVVQy1LUiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIkdCMTgwMzAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJHQksiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tMjAyMi1KUCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy0yMDIyLUtSIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlOSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTEzIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTE1IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTIiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTEyKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktMyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS00IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTUiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE1KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJJU08tODg1OS03IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUxNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIklTTy04ODU5LTgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTE4KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSVNPLTg4NTktOSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMTkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJKSVNfWDAyMDEiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiSklTX1gwMjEyLTE5OTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTIxKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAiS09JOC1SIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyMigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlNoaWZ0X0pJUyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjMoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJUSVMtNjIwIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVTLUFTQ0lJIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUyNSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIlVURi0xNiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjYoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZCRSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjcoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtMTZMRSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJVVEYtOCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMjkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTAiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMwKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjUxIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzMSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1MiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTMiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTMzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU0IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNCgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1NSI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzUoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTEyNTYiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTM2KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAid2luZG93cy0xMjU3IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGUzNygpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIndpbmRvd3MtMTI1OCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzgoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ3aW5kb3dzLTMxaiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlMzkoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LUVVQy1DTiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDAoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LWV1Yy1qcC1saW51eCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDEoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LUVVQy1UVyI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDIoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LUpJUzAyMDgiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQzKCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC1Kb2hhYiI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQotCXB1YmxpYyB2b2lkIHRlc3RGaWxlNDQoKSB0aHJvd3MgQ29yZUV4Y2VwdGlvbiwgSU9FeGNlcHRpb24gIHsNCi0JCVN0cmluZyBjaGFyc2V0TmFtZSA9ICJ4LU1TOTUwLUhLU0NTIjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NSgpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtbXN3aW4tOTM2IjsNCi0JCWRvR2VuVGVzdChjaGFyc2V0TmFtZSk7DQotCX0NCi0JcHVibGljIHZvaWQgdGVzdEZpbGU0NigpIHRocm93cyBDb3JlRXhjZXB0aW9uLCBJT0V4Y2VwdGlvbiAgew0KLQkJU3RyaW5nIGNoYXJzZXROYW1lID0gIngtd2luZG93cy05NDkiOw0KLQkJZG9HZW5UZXN0KGNoYXJzZXROYW1lKTsNCi0JfQ0KLQlwdWJsaWMgdm9pZCB0ZXN0RmlsZTQ3KCkgdGhyb3dzIENvcmVFeGNlcHRpb24sIElPRXhjZXB0aW9uICB7DQotCQlTdHJpbmcgY2hhcnNldE5hbWUgPSAieC13aW5kb3dzLTk1MCI7DQotCQlkb0dlblRlc3QoY2hhcnNldE5hbWUpOw0KLQl9DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvRW1wdHlGaWxlLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9FbXB0eUZpbGUuaHRtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZjhiNWM4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPEhFQUQ+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04PgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktNiI+Ci08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4KLTxUSVRMRT5JQk0gV2ViU3BoZXJlIFNhbXBsZXMgR2FsbGVyeTwvVElUTEU+Ci08L0hFQUQ+Ci08RlJBTUVTRVQgcm93cz0iNzUsKiI+Ci0JPEZSQU1FIG5hbWU9InRpdGxlIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1RpdGxlLmh0bWwiIHNjcm9sbGluZz0iTk8iIG5vcmVzaXplPgotCTxGUkFNRVNFVCBjb2xzPSIxNjAsKiI+Ci0JCTxGUkFNRSBuYW1lPSJtZW51IiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L01lbnUuaHRtbCIgc2Nyb2xsaW5nPSJhdXRvIiBub3Jlc2l6ZT4KLQkJPEZSQU1FIG5hbWU9Im1haW4iIG1hcmdpbndpZHRoPSIwIiBtYXJnaW5oZWlnaHQ9IjAiIGZyYW1lYm9yZGVyPSIwIiBzcmM9Ik1lbnUvU2FtcGxlc0ludHJvLmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JPC9GUkFNRVNFVD4KLQk8Tk9GUkFNRVM+Ci0JPEJPRFk+Ci0JPFA+VG8gdmlldyB0aGlzIHBhZ2UsIHlvdSBuZWVkIGEgYnJvd3NlciB0aGF0IHN1cHBvcnRzIGZyYW1lcy48L1A+Ci0JPC9CT0RZPgotCTwvTk9GUkFNRVM+Ci08L0ZSQU1FU0VUPgotPC9IVE1MPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTGFyZ2VOb0VuY29kaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg0Y2E2MGUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vRW5jb2RpbmcuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDY2NCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy9EVEQvIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4KLQotPGh0bWw+Ci08aGVhZD4KLTxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iTW96aWxsYS80LjcgW2VuXSAoV2luTlQ7IFUpIFtOZXRzY2FwZV0iPgotPE1FVEEgY29udGVudD0idGV4dC9jc3MiIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSI+Ci08dGl0bGU+c21va2U8L3RpdGxlPgotPC9oZWFkPgotPGJvZHk+Ci08aDI+IFNtb2tlIFRlc3QgLSBYTUwgRWRpdG9yPC9oMj4KLUxhc3QgdXBkYXRlZDogSnVuZSAyNSwgMjAwMQotPFA+VGhpcyBTbW9rZSBUZXN0IHByaW1hcmlseSBmb2N1c2VzIG9uIHRoZSBSVFAgcG9ydGlvbiBvZiB0aGUgWE1MIAotRWRpdGlvciwgd2hpY2ggaXMgdGhlIFNvdXJjZSBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yLiBJdCBhbHNvIHBlcmZvcm1zIAotc29tZSBpbnRlZ3JhdGlvbiB0ZXN0aW5nLiBGb3IgZXhhbXBsZSwgaXQgdGVzdHMgc3luY2hyb25pemF0aW9uIGJldHdlZW4gCi10aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZXMgb2YgdGhlIFhNTCBFZGl0b3IsIGFzIHdlbGwgYXMgd2l0aCB0aGUgCi1PdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXdzLiBJdCBhbHNvIHZlcmlmaWVzIHRoYXQgZmlsZXMgY3JlYXRlZCAKLXRocm91Z2ggdGhlIFhNTCBGaWxlIHdpemFyZCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgWE1MIENhdGFsb2cgYXJlIAotc3VwcG9ydGVkIGFzIGV4cGVjdGVkLjwvUD4KLTxQPjxGT05UIGNvbG9yPSIjZmYwMDAwIj48Qj5OT1RFPC9CPjogWE1MIGZpbGVzIGFyZSBjYXNlLXNlbnNpdGl2ZSBzbyBiZSBzdXJlIHRoYXQgdGhpbmdzIGFwcGVhciAKLWV4YWN0bHkgYXMgbm90ZWQuPC9GT05UPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0dXAKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TZXR1cDwvRk9OVD48L0gyPgotPFA+PEI+U3RhcnRpbmcgQ2xlYW48L0I+PC9QPgotPHVsPgotICAgIDxsaT4gRGVsZXRlIGFueSBleGlzdGluZyB3b3JrYmVuY2g8L2xpPgotICAgIDxsaT4gU3RhcnQgRWNsaXBzZTwvbGk+Ci08L3VsPgotPFA+PEI+T3BlbiBhbiBYTUwgUGVyc3BlY3RpdmU8QlI+Ci08L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPk9wZW4gUGVyc3BlY3RpdmU8L0I+IHRvb2xiYXIgYnV0dG9uIGluIHRoZSB1cHBlciBsZWZ0PC9MST4KLSAgICA8TEk+U2VsZWN0IDxCPk90aGVyLi4uPC9CPjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj5YTUw8L0I+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgdmlld3MgYXBwZWFyIGluIHRoZSBYTUwgcGVyc3BlY3RpdmU6IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGUgbG9jYXRpb24gb2YgdGhlIE91dGxpbmUgYW5kIE5hdmlnYXRvciB2aWV3cyBhcmUgcmV2ZXJzZWQgZnJvbSB0aGUgUmVzb3VyY2UgYW5kIFdlYiBwZXJzcGVjdGl2ZXMuIERvIHdlIHdhbnQgdG8gdHJ5IHRvIGJlIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSBwZXJzcGVjdGl2ZXM/IEFsc28sIEkgb3BlbmVkIDxCPmRlZmVjdDwvQj4gMTc3NjY0IHRvIGVuYWJsZSBlYXN5IGFjY2VzcyB0byB0aGUgUHJvcGVydGllcyB2aWV3IGZyb20gd2l0aGluIHRoZSBYTUwgcGVyc3BlY3RpdmUuIElmIHRoaXMgdmlldyBpc24ndCBpbmNsdWRlZCBpbiB0aGUgUGVyc3BlY3RpdmUgYmVjYXVzZSBpdHMgdXNlIGlzIGxpbWl0ZWQsIHRoZW4gcmVjb21tZW5kIHdlIGF0IGxlYXN0IHByb3ZpZGUgYSBTaG93IG9yIEhpZGUgUHJvcGVydGllcyBWaWV3IHRvb2xiYXIgYnV0dG9uIChzaW1pbGFyIHRvIHRoZSBidXR0b25zIHRoYXQgUGFnZSBEZXNpZ25lciBwcm92aWRlcykuPC9GT05UPjwvTEk+Ci08L1VMPgotPFA+PEI+UHJvamVjdCBDcmVhdGlvbiBhbmQgRmlsZSBJbXBvcnRzPEJSPgotPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+Q3JlYXRlIGEgUHJvamVjdCwgPEI+WE1MVGVzdDI8L0I+IDwvTEk+Ci0gICAgPExJPkltcG9ydCB0aGUgZm9sbG93aW5nIGZpbGVzIGludG8gdGhpcyBwcm9qZWN0OgotICAgIDxVTD4KLSAgICAgICAgPExJPjxCPlB1cmNoYXNlT3JkZXIueHNkPC9CPjwvTEk+Ci0gICAgICAgIDxMST48Qj5JbnZvaWNlLmR0ZDwvQj48L0xJPgotICAgIDxMST48Qj5Kb2JEZXNjLnhtbDwvQj48L0xJPgotICAgIDxMST48Qj5XaXJlbGVzcy54bWw8L0I+PC9MST4KLSAgICA8TEk+PEI+Z290Y2hhVENCZWFucy5zZXQ8L0I+PC9MST4KLSAgICA8TEk+PEI+QVRTLmR0ZDwvQj48L0xJPgotICAgIDxMST48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+YW55IG90aGVycz88L0ZPTlQ+PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci08L1VMPgotCi08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgIENyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPkNyZWF0ZS9PcGVuL0VkaXQgdGVzdCBjYXNlczwvRk9OVD48L0gyPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gc2NyYXRjaDwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlNlbGVjdCB0aGUgPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPiB0b29sYmFyIGJ1dHRvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIENyZWF0ZSBhIFhNTCBGaWxlIHdpemFyZCBhcHBlYXJzIGFuZCB0aGUgRmluaXNoIGJ1dHRvbiBpcyBkaXNhYmxlZC4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPjxCPkRFRkVDVDo8L0I+IDE3NzY2MCAtIFhNTCBGaWxlIHdpemFyZDogZGlzYWJsZSBGaW5pc2ggYnV0dG9uIG9uIHRoZSBmaXJzdCBwYWdlPC9GT05UPi48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIGEgbmV3IFhNTCBmaWxlPC9CPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5mcm9tU2NyYXRjaDwvQj48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmc6Ci0gICAgPFVMPgotICAgICAgICA8TEk+ZnJvbVNjcmF0Y2gueG1sIGFwcGVhcnMgaW4gdGhlIE5hdmlnYXRvciB2aWV3LjwvTEk+Ci0gICAgICAgIDxMST5mcm9tU2NyYXRjaC54bWwgaXMgb3BlbiB0byB0aGUgRGVzaWduIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IgYW5kIGhhcyBmb2N1cy48L0xJPgotICAgICAgICA8TEk+dGhlIERlc2lnbiB0YWIgYXBwZWFycyBiZWZvcmUgdGhlIFNvdXJjZSB0YWIgaW4gdGhlIFhNTCBFZGl0b3IuPC9MST4KLSAgICAgICAgPExJPnRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlIHNob3cgbm8gY29udGVudC48L0xJPgotICAgICAgICA8TEk+dGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlld3Mgc2hvdyBub3RoaW5nLjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5Td2l0Y2ggdG8gdGhlIFNvdXJjZSBwYWdlLiBWZXJpZnkgdGhlIGN1cnNvciBhcHBlYXJzIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+UmlnaHQgbW91c2UgYnV0dG9uIDIgYW5kIHZlcmlmeSBhIHBvcHVwIG1lbnUgYXBwZWFycy48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uIFZlcmlmeSB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWwgbGlzdCBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7PC9CPjwvTEk+Ci0gICAgPExJPlZlcmlmeSAmbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7IGlzIGluc2VydGVkIGFuZCBhcHBlYXJzIHN5bnRheCBoaWdobGlnaHRlZCBhbmQgYW4gZW50cnkgYXBwZWFycyBmb3IgaXQgaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgWE1MIGRlY2xhcmF0aW9uIGFuZCB2ZXJpZnkgPEI+dmVyc2lvbjwvQj4gYW5kIDxCPmVuY29kaW5nPC9CPiBhcHBlYXIgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoaXMgdXNlZCB0byB3b3JrLCBidXQgbm93IGl0J3Mgbm90IHdvcmtpbmcuIE9wZW5lZCA8Qj5kZWZlY3Q8L0I+IDE3NzY2MiAtIFhNTCBkZWNsYXJhdGlvbiBhdHRyaWJ1dGVzIG5vdCBhcHBlYXJpbmcgaW4gUHJvcGVydGllcyB2aWV3LiBJZiB3ZSBkZWNpZGUgdG8gbm90IHRyZWF0IHZlcnNpb24gYW5kIGVuY29kaW5nIGFzIGF0dHJpYnV0ZXMsIHRoZW4gdGhpcyBzdGVwIHNob3VsZCBiZSByZW1vdmVkLjwvRk9OVD48L0xJPgotICAgIDxMST5Db250aW51ZSB0byB0aGUgbmV4dCBzZWN0aW9uLjwvTEk+Ci08L1VMPgotPFA+PEI+SWRlbnRpZnkgYSBsb2NhbCBEVEQgKDwvQj52ZXJpZmllcyBhIERURCBpcyBpbW1lZGlhdGVseSByZWNvZ25pemVkOyBpbiB0aGUgcGFzdCwgeW91IGhhZCB0byBjbG9zZSBhbmQgcmVvcGVuIHRoZSBXb3JrYmVuY2g8Qj4pPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+VHlwZSB0aGUgZm9sbG93aW5nIGFmdGVyIHRoZSBYTUwgZGVjbGFyYXRpb24gaW4gPEI+ZnJvbVNjcmF0Y2gueG1sPC9CPjogPEI+Jmx0OyFET0NUWVBFIEludm9pY2UgU1lTVEVNICZxdW90O0ludm9pY2UuZHRkJnF1b3Q7Jmd0OzwvQj4uIFRoZSB0ZXh0IHNob3VsZCBiZSBzeW50YXggaGlnaGxpZ2h0ZWQgYXMgeW91IHR5cGUgYW5kIHlvdSBzaG91bGQgc2VlIGFuIGVudHJ5IGdldCBhZGRlZCB0byB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gY3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIERPQ1RZUEUgZGVjbGFyYXRpb24uPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LlZlcmlmeSBvbmx5IDxCPkludm9pY2U8L0I+IGFuZCA8Qj5jb21tZW50PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QuICg8Qj5OT1RFPC9CPjogPEI+SW52b2ljZTwvQj4gaXMgdGhlIHJvb3QgZWxlbWVudCk8L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGFjY2VwdCA8Qj5JbnZvaWNlPC9CPiBhcyBhIHNlbGVjdGlvbi4gVmVyaWZ5IHRoZSBJbnZvaWNlIHN0YXJ0IGFuZCBlbmQgdGFncyBhcmUgaW5zZXJ0ZWQgaW50byB0aGUgU291cmNlIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmV0d2VlbiB0aGVtLiBBbiBlbGVtZW50IGVudHJ5IHNob3VsZCBhcHBlYXIgZm9yIEludm9pY2UgaW4gdGhlIE91dGxpbmUgdmlldy4gKDxCPk5PVEU8L0I+OiBYTUwgaXMgY2FzZS1zZW5zaXRpdmUgc28gYmUgc3VyZSB5b3Ugc2VlIEludm9pY2UgYW5kIG5vdCBpbnZvaWNlIGV2ZXJ5d2hlcmUpLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi4gVmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFycyBpbiB0aGUgcHJvcG9zYWwgbGlzdCAoaW4gdGhlIG9yZGVyIHNob3duKTogPEZPTlQgY29sb3I9IiNmZjAwMDAiPkl0ZW0gaXMgYXBwZWFyaW5nIGJlZm9yZSBIZWFkZXIuIFRoZSBkZWZhdWx0IGlzIG5vdCB0byBzb3J0IHRoZSBsaXN0IGFscGhhYmV0aWNhbGx5LiBUaGF0IG1lYW5zIHRoZSBsaXN0IHNob3VsZCBiZSBzb3J0ZWQgYmFzZWQgb24gdGhlIG9yZGVyIGluIHdoaWNoIHRoZSBjaGlsZCB0YWdzIGFyZSBkZWZpbmVkIGluIHRoZSBlbGVtZW50IGRlZmluaXRpb24gZm9yIEludm9pY2UgaW4gdGhlIERURC4gSW4gb3RoZXIgd29yZHMsIHVzZXJzIHNob3VsZCBzZWUgY2hpbGQgdGFncyBsaXN0ZWQgYWNjb3JkaW5nIHRvIHRoZWlyIHNlcXVlbmNpbmcgb3JkZXIgaW4gdGhlIERURCwgd2hpY2ggdGhlIERURCBFZGl0b3Igc2hvd3MuIFZpb2xhdGluZyB0aGUgc2VxdWVuY2luZyBvcmRlciBjYXVzZXMgYW4gWE1MIGZpbGUgdG8gYmVjb21lIG5vdCB2YWxpZC4gPEI+REVGRUNUOjwvQj4gMTc3NjY4PC9GT05UPgotICAgIDxVTD4KLSAgICAgICAgPExJPkhlYWRlcjwvTEk+Ci0gICAgICAgIDxMST5JdGVtPC9MST4KLSAgICAgICAgPExJPmNvbW1lbnQ8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBhY2NlcHQgPEI+SGVhZGVyPC9CPiBhcyBhIHNlbGVjdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIFNvdXJjZSBub3cgbG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGFuZCB0aGUgY3Vyc29yIGFwcGVhcnMgYmVmb3JlIDxCPmludm9pY2VOdW1iZXI8L0I+OjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjgzIiBzcmM9ImlkZW50aWZ5RFRELmpwZyIgd2lkdGg9IjQ4NSI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkhlYWRlcjwvQj4gYXBwZWFycyBuZXN0ZWQgdW5kZXIgPEI+SW52b2ljZTwvQj4gaW4gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICA8TEk+Q2xvc2UgdGhpcyBmaWxlLCBhbmQgcmVzcG9uZCA8Qj5ZZXM8L0I+IHdoZW4gcHJvbXB0ZWQgdG8gc2F2ZSB0aGUgY2hhbmdlcy48L0xJPgotICA8TEk+UmVvcGVuIHRoZSBmaWxlIGFuZCB2ZXJpZnkgdGhlIGNoYW5nZXMgd2VyZSBzYXZlZC48L0xJPgotICA8TEk+Q2xvc2UgdGhlIGZpbGUuIFZlcmlmeSBubyBzYXZlIGNoYW5nZXMgcHJvbXB0IGFwcGVhcnMuPC9MST4KLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhbiBpbXBvcnRlZCBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkZpbGUtJmd0O05ldy0mZ3Q7WE1MIEZpbGU8L0I+LjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgQ3JlYXRlIGEgWE1MIEZpbGUgd2l6YXJkIGFwcGVhcnMuPC9MST4KLSAgICA8TEk+U2VsZWN0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZSBmcm9tIGEgRFREIGZpbGU8L0I+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPmZyb21Mb2NhbERURDwvQj48L0xJPgotICAgICAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZTwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkltcG9ydCBGaWxlPC9CPiBidXR0b24KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Vc2UgdGhlIEJyb3dzZSBidXR0b24gdG8gZmluZCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlci4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldvdWxkIGJlIG5pY2UgaWYgdGhpcyB3ZXJlIGFscmVhZHkgZmlsbGVkIGluLiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgICAgICA8TEk+U2VsZWN0IDxCPkZpbmlzaDwvQj4gdG8gY2xvc2UgdGhlIEltcG9ydCBGaWxlIHdpemFyZDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotICAgIDxMST5FeHBhbmQgPEI+WE1MdGVzdDI8L0I+IGFuZCB0aGVuIHNlbGVjdCA8Qj50ZXN0Y2FzZS5kdGQ8L0I+LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V2FzIGV4cGVjdGluZyB0byBzZWUgdGhlIGltcG9ydGVkIGZpbGUgc2VsZWN0ZWQgaW4gdGhlIFdvcmtiZW5jaCBmaWxlcyBsaXN0LCBidXQgaXQgd2Fzbid0LiBPcGVuIGEgZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlLjwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj50ZXN0Y2FzZTwvQj4gYXMgdGhlIFJvb3QgRWxlbWVudC48L0xJPgotICAgIDxMST5BY2NlcHQgdGhlIGRlZmF1bHQgdG8gPEI+Q3JlYXRlIHJlcXVpcmVkIGNvbnRlbnQgb25seTwvQj4uPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPnRlc3RjYXNlLmR0ZDwvQj4gYXBwZWFycyBhcyB0aGUgU3lzdGVtIElkLjwvTEk+Ci0gICAgPExJPlNlbGVjdCBGaW5pc2guIFZlcmlmeSA8Qj5mcm9tTG9jYWxEVEQueG1sPC9CPiBhcHBlYXJzIGluIHRoZSBYTUwgRWRpdG9yLiBWZXJpZnkgdGhlIFNvdXJjZSBwYWdlIGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZzogPElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjkwIiBzcmM9ImltcG9ydERURC5qcGciIHdpZHRoPSI2NjAiPjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIE91dGxpbmUgdmlldyBhbmQgdGhlIGZvcm1hdHRpbmcgaW5kZW50YXRpb24gcmVmbGVjdCB0aGUgcHJvcGVyIGVsZW1lbnQvdGFnIGhpZXJhcmNoeS4gSGVyZSdzIHdoYXQgdGhlIE91dGxpbmUgdmlldyBzaG91bGQgbG9vayBsaWtlOjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjI5NyIgc3JjPSJvdXRsaW5lMS5qcGciIHdpZHRoPSI2NTUiPjwvTEk+Ci0gIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+aGVhZGVyPC9CPiBzdGFydCB0YWcuIAotICAgICAgICAgICAgVmVyaWZ5IDxCPmhlYWRlcjwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyBhbmQgaW4gdGhlIERlc2lnbiAKLSAgICAgICAgICAgIHBhZ2UgYW5kIHRoYXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFuZCBwcm9wZXJ0eSB2YWx1ZXMgYXBwZWFyIGluIHRoZSAKLSAgICAgICAgICAgIFByb3BlcnRpZXMgdmlldzoKLSAgICAgICAgPFRBQkxFIGJvcmRlcj0iMSI+Ci0gICAgICAgICAgICA8VEJPRFk+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+PEI+UHJvcGVydHk8L0I+PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+PEI+VmFsdWU8L0I+PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPmNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+d2VidG9vbDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5udW1iZXI8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij5pZHZhbHVlMDwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdGF0ZTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPiZuYnNwOzwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5zdWJDYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPkFjY2Vzc2FiaWxpdHk8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3ViU3ViQ2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij4mbmJzcDs8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICA8L1RCT0RZPgotICAgICAgICA8L1RBQkxFPgotICAgICAgICA8L0xJPgotCTxMST5Gcm9tIHRoZSBPdXRsaW5lIHZpZXcsIHNlbGVjdCB0aGUgPEI+dGVzdEJ1Y2tldDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnRlc3RCdWNrZXQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgdGhlIGN1cnJlbnQgbWFya2VyCi0gICAgICAgICAgICBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIG9mIHRoZSBTb3VyY2UgcGFnZSBpbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIHRoZSAKLSAgICAgICAgICAgIDxCPnRlc3RCdWNrZXQ8L0I+IHRhZy4gVGhlIFByb3BlcnRpZXMgdmlldyBzaG91bGQgc2hvdyBhIHByb3BlcnR5IG9mIDxCPnR5cGU8L0I+Ci0gICAgICAgICAgICB3aXRoIGEgdmFsdWUgb2YgPEI+Q29tcG9uZW50VGVzdDwvQj4uCi0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPiAKLSAgICA8TEk+VmVyaWZ5IGVkaXQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgYW5kIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcgKGZvY3VzIGhlcmUgaXMgb24gYWRkaW5nIGF0dHJpYnV0ZXMgYW5kIGF0dHJpYnV0ZSB2YWx1ZXMpLgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCB1c2UgY29udGVudCBhc3Npc3QgdG8gaW5zZXJ0IGFuIGF0dHJpYnV0ZSBhbmQgYXR0cmlidXRlIHZhbHVlCi0gICAgICAgICAgICBmb3IgdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlIDxCPmNhdGVnb3J5PC9CPiBhdHRyaWJ1dGUgaW4gdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+VHlwZSA8Qj5zcGFjZTwvQj4gYW5kIHRoZW4gaGl0IHByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgb25seSA8Qj5zdGF0ZTwvQj4gYW5kIDxCPnN1YlN1YkNhdGVnb3J5PC9CPiBhcHBlYXIgaW4gdGhlIHByb3Bvc2FsIGxpc3QgKGNvbnRlbnQgYXNzaXN0IGlzIHNtYXJ0IGVub3VnaCBub3QgdG8gbGlzdCBhbnkgYXR0cmlidXRlcyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gdGhlIHN0YXJ0IHRhZyBzaW5jZSBhdHRyaWJ1dGVzIGNhbiBvbmx5IGFwcGVhciBvbmNlLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5zdGF0ZTwvQj4uPC9MST4gICAKLSAgICAgICAgICAgIDxMST5WZXJpZnkgPEI+c3RhdGU9IlVuZGVyQ29uc3RydWN0aW9uIjwvQj4gaXMgaW5zZXJ0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChjb250ZW50IGFzc2lzdCBhdXRvbWF0aWNhbGx5IGluc2VydHMgYW55IGRlZmF1bHQgdmFsdWVzLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS4gVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSBhbmQgUHJvcGVydGllcyB2aWV3IHJlZmxlY3QgdGhpcyBjaGFuZ2UuPC9MST4gICAgICAgICAKLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBQcm9wZXJ0aWVzIHZpZXcsIHVwZGF0ZSB0aGUgPEI+c3RhdGU8L0I+IGF0dHJpYnV0ZSB2YWx1ZSB0byAiVW5kZXJSZXZpZXciIAotICAgICAgICAgICAgKGEgcHVsbGRvd24gbGlzdCBvZiB2YWx1ZXMgc2hvdWxkIGJlIGF2YWlsYWJsZSkuIFZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZAotICAgICAgICAgICAgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzLgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZSB0byB0aGUgPEI+aGVhZGVyPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+QnJpbmcgdXAgdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSA8Qj5oZWFkZXI8L0I+IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5BZGQgQXR0cmlidXRlLT5zdWJTdWJDYXRlZ29yeTwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudSAoaXQncyBzbWFydAotICAgICAgICAgICAgICAgIGVub3VnaCB0byBrbm93IHdoaWNoIGF0dHJpYnV0ZXMgaGF2ZW4ndCBiZWVuIHNwZWNpZmllZCB5ZXQgLi4uIGxpa2UgY29udGVudCAKLSAgICAgICAgICAgICAgICBhc3Npc3QuIENvb2whKS48L0xJPgotICAgICAgICAgICAgPExJPlR5cGUgaW4gYSB2YWx1ZSBvZiA8Qj5LZXlib2FyZCBzdXBwb3J0PC9CPi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgY2hhbmdlIGlzIHJlZmxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIFByb3BlcnRpZXMgdmlldzwvTEk+Ci0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLTwvVUw+Ci08UD48Qj5PcGVuIGFuIFhNTCBGaWxlIHRoYXQgcmVmZXJlbmNlcyBhIHJlbW90ZSBEVEQ8L0I+PC9QPgotPFVMPgotICAgIDxMST5PcGVuIHRoZSA8Qj5XaXJlbGVzcy54bWw8L0I+IGZpbGUuPC9MST4KLSAgICA8TEk+VmVyaWZ5IGl0IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBpbiB0aGUgU291cmNlIHBhZ2U6PElNRyBib3JkZXI9IjAiIGhlaWdodD0iMjM5IiBzcmM9IndpcmVsZXNzLmpwZyIgd2lkdGg9IjY1NiI+PC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBPdXRsaW5lIHZpZXcgYW5kIHRoZSBmb3JtYXR0aW5nIGluZGVudGF0aW9uIHJlZmxlY3QgdGhlIHByb3BlciAKLSAgICAgICAgZWxlbWVudC90YWcgaGllcmFyY2h5LiBIZXJlJ3Mgd2hhdCB0aGUgT3V0bGluZSB2aWV3IHNob3VsZCBsb29rIGxpa2U6IDxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjE4OSIgc3JjPSJvdXRsaW5lMi5qcGciIHdpZHRoPSI2NTYiPjwvTEk+IAotICAgIDxMST5WZXJpZnkgY29udGVudCBhc3Npc3QgPEZPTlQgY29sb3I9IiNmZjAwMDAiPkRlZmVjdCAxNzYzNzkgKGluIHZlcmlmeSBzdGF0ZSwgYnV0IHN0aWxsIG5vdCB3b3JraW5nKTwvRk9OVD4uPC9MST4KLSAgICAgICAgPFVMPgotICAgICAgICAgICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIDxCPndtbDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0IG9uIHRoZSBuZXcgbGluZS48L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAoaW4gdGhlIG9yZGVyIHNob3duKTogCi0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPmhlYWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST50ZW1wbGF0ZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNhcmQ8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSA8Qj53bWw8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+VHlwZSBhIHNwYWNlIGJlZm9yZSB0aGUgZW5kaW5nIGRlbGltaXRlciBvbiB0aGUgY2FyZCBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Q8L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgYXBwZWFyIGFzIHByb3Bvc2FscyAobm90IG5lY2Vzc2FyaWx5IGluIHRoZQotICAgICAgICAgICAgICAgb3JkZXIgc2hvd24pLiAKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+dGl0bGU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5uZXdjb250ZXh0PC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b3JkZXJlZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnhtbDpsYW5nPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b25lbnRlcmJhY2t3YXJkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+b250aW1lcjwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmlkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+Y2xhc3M8L0xJPgotICAgICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgICAgPC9MST4KLSAgICAgICAgICAgPExJPlBvc2l0aW9uIHRoZSBjdXJzb3Igd2l0aGluIHRoZSA8Qj5tZXRob2Q8L0I+IGF0dHJpYnV0ZSB2YWx1ZSBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdDwvTEk+Ci0gICAgICAgICAgIDxMST5WZXJpZnkgPEI+cG9zdDwvQj4gYW5kIDxCPmdldDwvQj4gYXBwZWFyIGFzIHByb3Bvc2Fscy48L0xJPgotICAgICAgICA8L1VMPgotICAgIDxMST5WZXJpZnkgc2VsZWN0aW9uIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgCi0gICAgICAgIGFuZCBQcm9wZXJ0aWVzIHZpZXcuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNsaWNrIHdpdGhpbiB0aGUgPEI+Y2FyZDwvQj4gc3RhcnQgdGFnLiAKLSAgICAgICAgICAgIFZlcmlmeSA8Qj5jYXJkPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IGFuZCBpbiB0aGUgRGVzaWduIAotICAgICAgICAgICAgcGFnZSBhbmQgdGhhdCB0aGUgY29udGVudCBhc3Npc3QgcHJvcG9zYWxzIGxpc3RlZCBhYm92ZSBmb3IgdGhlCi0gICAgICAgICAgICA8Qj5jYXJkPC9CPiB0YWcgYXBwZWFyIGFzIHByb3BlcnRpZXMgaW4gdGhlIFByb3BlcnRpZXMgdmlldy4gTm8gdmFsdWVzIHNob3VsZCBhcHBlYXIgZm9yIHRoZXNlIHByb3BlcnRpZXMuPC9MST4KLQk8TEk+RnJvbSB0aGUgT3V0bGluZSB2aWV3LCBzZWxlY3QgdGhlIDxCPnBvc3RmaWVsZDwvQj4gdGFnLgotICAgICAgICAgICAgVmVyaWZ5IDxCPnBvc3RmaWVsZDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCB0aGUgY3VycmVudCBtYXJrZXIKLSAgICAgICAgICAgIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gb2YgdGhlIFNvdXJjZSBwYWdlIGluZGljYXRlcyB0aGUgcmFuZ2Ugb2YgdGhlIAotICAgICAgICAgICAgPEI+cG9zdGZpZWxkPC9CPiB0YWcuIFRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvdWxkIHNob3cgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLAotICAgICAgICAgICAgbm9uZSBvZiB3aGljaCBzaG91bGQgaGF2ZSBhIHZhbHVlOgotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST5uYW1lPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+dmFsdWU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5pZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNsYXNzPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgPC9VTD4gICAKLSAgICA8L0xJPgotICAgIDxMST5WZXJpZnkgZWRpdCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3IChmb2N1cyBoZXJlIGlzIG9uIGFkZGluZyBlbGVtZW50cy90YWdzKS4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgY29weSBhbmQgcGFzdGUgdGhlIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIGluIHRoZSA8Qj5jYXJkPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5Ob3RpY2UgdGhlIHJhbmdlIG9mIHRoZSA8Qj5jYXJkPC9CPiB0YWcgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBhcmVhLjwvTEk+Ci0gICAgICAgICAgICA8TEk+Q29weSB0aGlzIHJhbmdlIG9mIGxpbmVzIHVzaW5nIHRoZSA8Qj5FZGl0LT5Db3B5PC9CPiBwdWxsZG93biBtZW51IHNlbGVjdGlvbi48L0xJPgotICAgICAgICAgICAgPExJPlBhc3RlIGFmdGVyIHRoZSA8Qj5jYXJkPC9CPiBlbmQgdGFnIHVzaW5nIEN0cmwrVi48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgYXBwcm9wcmlhdGUgbGluZXMgd2VyZSBwYXN0ZWQgbiB0aGUgU291cmNlIHBhZ2UuCi0gICAgICAgICAgICAgICAgVmVyaWZ5IHRoZSBEZXNpZ24gcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgdGhlIFByb3BlcnRpZXMgCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLjwvTEk+ICAgICAgICAgCi0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgRGVzaWduIHBhZ2UsIGFkZCBhbm90aGVyIDxCPmNhcmQ8L0I+IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5CcmluZyB1cCB0aGUgcG9wdXAgbWVudSBmb3IgdGhlIDxCPndtbDwvQj4gdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+U2VsZWN0IDxCPkFkZCBDaGlsZC0+Y2FyZDwvQj4gZnJvbSB0aGUgcG9wdXAgbWVudS48L0xJPgotICAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgU291cmNlIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIHRoZSBQcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLiBOT1RFOiBpdCBzaG91bGQgaGF2ZSBnZW5lcmF0ZWQgb3V0Ci0gICAgICAgICAgICAgICAgdGhlIHNhbWUgdGhpbmcgYXMgdGhlIG9yaWdpbmFsIGNhcmQgdGFnLCB3aXRoIHRoZSBleGNlcHRpb24KLSAgICAgICAgICAgICAgICB0aGF0IGEgPEI+bWV0aG9kPC9CPiBhdHRyaWJ1dGUgc2hvdWxkIG5vdCBleGlzdCBpbiB0aGUgPEI+Z288L0I+IHN0YXJ0IHRhZy4gPC9MST4KLSAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgIDwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPiAKLTwvVUw+Ci08UD48Qj5DcmVhdGUgYW5kIFZhbGlkYXRlIGFuIFhNTCBGaWxlIGZyb20gYSBzY2hlbWE8L0I+PEJSPgotCi08UD4odGhlc2Ugc3RlcHMgYXJlIHRha2VuIGZyb20gdGhlICdEZXNpZ24nIHNtb2tlIHRlc3QsIGV4Y2VwdCB0aGUgU291cmNlIFBhZ2UgaXMgdGhlIGZvY3VzKTwvUD4KLTx1bD4KLTxsaT4KLVJpZ2h0IG1vdXNlIGJ1dHRvbiAyIG9uIHRoZSBQdXJjaGFzZU9yZGVyLnhzZCBhbmQgc2VsZWN0IDxiPkNyZWF0ZSBYTUwKLUZpbGU8L2I+LjwvbGk+Ci0KLTxsaT4KLUFjY2VwdCB0aGUgZGVmYXVsdCBmaWxlIG5hbWVzLjwvbGk+Ci0KLTxsaT4KLUluIHRoZSBTZWxlY3QgUm9vdCBFbGVtZW50IHBhZ2UsIGNob29zZSA8Yj5wdXJjaGFzZU9yZGVyPC9iPiBhcyByb290IGVsZW1lbnQuPC9saT4KLQotPGxpPgotQ2hvb3NlIDxiPkNyZWF0ZSByZXF1aXJlZCBhbmQgb3B0aW9uYWwgY29udGVudDwvYj4gdG8gY3JlYXRlIGEgbWluaW1hbAotZG9jdW1lbnQuPC9saT4KLQotPGxpPgotRW50ZXIgPGI+cG88L2I+IGFzIHRoZSBuYW1lc3BhY2UgcHJlZml4LjwvbGk+Ci0KLTxsaT5PbiBGaW5pc2gsIGEgUHVyY2hhc2VPcmRlci54bWwgaXMgY3JlYXRlZCBhbmQgdGhlIFhNTCBFZGl0b3IgaXMgb3BlbmVkLiAoU2VsZWN0IFNvdXJjZSBQYWdlIGlmIG5vdCBhbHJlYWR5IHRoZXJlLik8L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBzaG91bGQgYmUgaW52YWxpZC48L2xpPgotCi08bGk+Ci1Eb3VibGUgY2xpY2sgb24gdGhlIGVycm9yIG1lc3NhZ2UuIEl0IHNob3VsZCBiZSBwb3NpdGlvbmVkIHRvIHRoZSBsaW5lCi1pbiBlcnJvciwgaS5lLiB0aGUgPGI+cGFydE51bTwvYj4gYXR0cmlidXRlLiBJdCBpcyBpbnZhbGlkIGJlY2F1c2UgdGhlCi12YWx1ZSBpcyBub3Qgc2V0IHRvIG1hdGNoIHRoZSBYTUwgc2NoZW1hIHBhdHRlcm4gZmFjZXQgImQzLVtBLVpdezJ9IiAoMwotZGlnaXRzIGZvbGxvd2VkIGJ5IDIgY2hhcmFjdGVycykuPC9saT4KLQotPGxpPkluIHRoZSBTb3VyY2UgVmlldywgbG9jYXRlIHRoZSA8Yj5wYXJ0TnVtPC9iPiBhdHRyaWJ1dGUgdW5kZXIgZWxlbWVudCBpdGVtLgotRW50ZXIgdGhlIHZhbHVlIDMzMy1BQi48L2xpPgotCi08bGk+Ci1SdW4gVmFsaWRhdGUuIFRoZSBQdXJjaGFzZU9yZGVyLnhtbCBkb2N1bWVudCBzaG91bGQgbm93IGJlIHZhbGlkLjwvbGk+Ci08L1VMPgotPFVMPgotICA8TEk+Ci0gIDxIUj48L0xJPgotICA8bGk+UGxhY2UgdGhlIGN1cnNvciBhZnRlciB0aGUgJmx0O2l0ZW1zJmd0OyB0YWcgYW5kIGJlc3VyZSAiaXRlbSIgaXMgCi0gIGxpc3RlZCBpbiB0aGUgY29udGVudCBhc3Npc3QgbGlzdC4gPC9saT4KLTxsaT5SZW5hbWUgdGhlIHB1cmNoYXNlT3JkZXIueHNkIHRvLCBzYXksIHB1cmNoYXNlT3JkZXJIT0xELnhzZDwvbGk+Ci08bGk+VmVyaWZ5IHRoYXQgY29udGVudCBhc3Npc3Qgc3RpbGwgZ2l2ZXMgeW91ICJpdGVtIiBhcyBhYm92ZS48L2xpPgotPGxpPk5vdyBzZWxlY3QgdGhlICJSZWxvYWQgRGVwZW5kYW5jaWVzIiBidXR0b24uPC9saT4KLTxsaT5WZXJpZnkgdGhhdCBub3cgY29udGVudCBhc3Npc3Qgbm8gbG9uZ2VyIGxpc3RzIGFueSBpdGVtcyBvdGhlciAKLXRoYXQgdGhlIG1hY3JvICJjb21tZW50Ii48L2xpPgotPGxpPlJlcGVhdCBtYWtpbmcgcHVyY2hhc2VPcmRlci54c2Qgd29ya2FibGUgYWdhaW4uPC9saT4KLTwvdWw+Ci08UD48L1A+PFA+PC9QPjxQPjwvUD48UD48L1A+PFA+PC9QPjwvUD4KLTxQPjxCPk9wZW4gYW4gWE1MIEZpbGUgZm9yIGEgc2hpcHBlZCBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+Ci08QlI+Ci1bcHV0IGluIG9wdGlvbmFsIHNlY3Rpb24gLi4gdGhpcyBpc24ndCBhIGN1c3RvbWVyIHNjZW5lcmlvXTxCUj4KLVRvIHZlcmlmeSB0aGF0IHNoaXBwZWQgRFREcyBhcmUgd29ya2luZzo8QlI+Ci08VUw+Ci08TEk+Ci1Vc2UgYSB3ZWIgcHJvamVjdCB3aXRoIGEgc3RhbmRhcmQgd2ViLnhtbCBmaWxlIGluIGl0LiBCZSBzdXJlIAotdGhlcmUgaXMgbm8gd2ViLWFwcF8yXzIuZHRkIGZpbGUgaW4gdGhlIGRpcmVjdG9yeS4gSW4gdGhlIHdlYi54bWwgZmlsZSAKLWl0c2VsZiwgbWFuZ2xlIHRoZSB3ZWItYXBwXzJfMi5kdGQgZmlsZW5hbWUgaW4gdGhlIHN5c3RlbSBpZCBhIGxpdHRsZSwgc3VjaCBhcyAKLWNoYW5nZSBpdCB0byB4ZWItYXBwXzJfMi5kdGQgdG8gYmUgc3VyZSBpdCBjYW4ndCBiZSBmb3VuZCB2aWEgdGhlCi1ub3JtYWwgaHR0cCBtZXRob2QgKFRoaXMgaXNuJ3QgcmVhbGx5IG5lY2Vzc2FyeSBmb3IgdGhlIGZ1bnRpb24gdG8gd29yaywKLWl0cyBqdXN0IHRvIGJlIHN1cmUgb25seSB0aGUgY2F0YWxvZyBmdW5jdGlvbiBpcyBpbiBlZmZlY3QpLgotPC9MST4KLTxMST4KLUdvIHRvIHRoZSBwcmVmZXJlbmNlcyBwYWdlLCBhbmQgb3BlbiB0aGUgWE1MIENhdGFsb2cuIFZlcmlmeSB0aGVyZSAKLWlzIGFuIGVudHJ5IGZvciAtLy9TdW4gTWljcm9zeXN0ZW1zLCBJbmMuLy9EVEQgV2ViIEFwcGxpY2F0aW9uIDIuMi8vRU4uCi08L0xJPgotPExJPgotT25jZSBhbGwgdGhlIHByZXAgd29yayBpcyBkb25lIChmaWxlcyBkZWxldGVkLCB0ZXh0IG1vZGlmaWVkKSwgeW91IHNob3VsZCAKLWV4aXQgYW5kIHJlc3RhcnQgRWNsaXBzZSB0byBiZSBzdXJlIHlvdSBoYXZlIGEgZnJlc2ggc3RhcnQuCi08L0xJPgotPExJPgotT3BlbiB0aGUgd2ViLnhtbCBmaWxlIGFuZCBiZSBzdXJlIHRoYXQgY29udGVudCBhc3Npc3Qgd29ya3MgZm9yIHRoYXQgZmlsZS4KLUZvciBleGFtcGxlLCByaWdodCBhZnRlciB0aGUgZW5kIG9mIHRoZSAmbHQ7L2Rpc3BsYXktbmFtZSZndDsgdGFnLCBjdHJsLXNwYWNlIAotc2hvdWxkIHByb3ZpZGUgYSBsb25nIGxpc3Qgb2YgZWxlbWVudHMsIHN0YXJ0aW5nIHdpdGggc2VydmxldCwgc2VydmxldC1tYXBwaW5nLCBldGMuCi1UaGlzIGluZGljYXRlcyB0aGUgc2hpcHBlZCBEVEQgZnVuY3Rpb24gaXMgd29ya2luZyBhbmQgY29uZmlndXJlZCAKLWNvcnJlY3RseSAoYXQgbGVhc3QgZm9yIHRoZSB3ZWIueG1sIGZpbGUpLgotPC9MST4KLTwvVUw+Ci08L1A+Ci08UD48Qj5DcmVhdGUgYW4gWE1MIEZpbGUgZnJvbSBhIG5ldyBEVEQgY2F0YWxvZyBlbnRyeTwvQj48QlI+PElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotCi08Yj5UaGUgZm9sbG93aW5nIGNvbWVzIGRpcmVjdGx5IGZyb20gdGhlICdEZXNpZ24nIFNtb2tlIFRlc3Q6IFhNTCBDYXRhbG9nIGZvciBYTUwgU2NoZW1hPC9iPgotPHVsPgotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sIHRvIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZDwvbGk+Ci0KLTxsaT4KLUNyZWF0ZSBhIG5ldyBwcm9qZWN0LCBYTUxUZXN0MjwvbGk+Ci0KLTxsaT4KLU1vdmUgdGhlIFB1cmNoYXNlT3JkZXIueHNkIGludG8gWE1MVGVzdDIuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlIG9uIFB1cmNoYXNlT3JkZXIueG1sLiBZb3Ugd2lsbCBub3RpY2UgdGhhdCBpdCBpcyBubyBsb25nZXIKLXZhbGlkLiBUaGUgZXJyb3IgbWVzc2FnZSBzaG91bGQgZ2l2ZSB5b3UgYSBoaW50IHRoYXQgdGhlIGZpbGUgUHVyY2hhc2VPcmRlci54c2QKLWNhbiBubyBsb25nZXIgYmUgZm91bmQuPC9saT4KLQotPGxpPgotT3BlbiB0aGUgV2luZG93LT5QcmVmZXJlbmNlcyBhbmQgc2VsZWN0IHRoZSBYTUwgQ2F0YWxvZy48L2xpPgotCi08bGk+Ci1FbnRlciB0aGUgcGFpciA8Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IGY6XGVjbGlwc2VcWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+PC9saT4KLQotPGJyPk9yIGFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIGEgcmVsYXRpdmUgcGF0aCB0byB0aGUgaW5zdGFsbCBkaXJlY3RvcnkKLW9mIHRoZSB3b3JrYmVuY2ggYXMgZm9sbG93czoKLTxicj48Yj5JZCA9IFB1cmNoYXNlT3JkZXIueHNkIFVyaSA9IC5cWE1MVGVzdDJcUHVyY2hhc2VPcmRlci54c2Q8L2I+Ci08bGk+Ci1DbGljayBvbiB0aGUgUmVsb2FkIGJ1dHRvbiB0byByZWxvYWQgdGhlIGNhdGFsb2cgc2V0dGluZ3MuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgZG9jdW1lbnQgc2hvdWxkIG5vdyBiZSB2YWxpZC48L2xpPgotPC91bD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICBTYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5TYXZlL1ZhbGlkYXRlIHRlc3QgY2FzZXM8L0ZPTlQ+PC9IMj4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZTwvQj48QlI+Ci0oTk9URTogdGhlIDxCPklkZW50aWZ5IGEgbG9jYWwgRFREPC9CPiB0ZXN0IGNhc2UgdGVzdHMgdGhlIHNhdmUgcHJvbXB0IG9uIGEgZmlsZSBjbG9zZS4pPC9QPgotPFVMPgotICA8TEk+SWYgYW55IGZpbGVzIGFyZSBvcGVuLCBzZWxlY3QgPEI+RmlsZS0mZ3Q7Q2xvc2UgQWxsPC9CPiAob3IgPEI+Q3RybCtTaGlmdCtGNDwvQj4pIHRvIGNsb3NlIHRoZW0uPC9MST4KLSAgPExJPk9wZW4gYW55IHhtbCBmaWxlIGluIHRoZSA8Qj5YTUxUZXN0MjwvQj4gcHJvamVjdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQWxsPC9CPiBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFzPC9CPiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlPC9CPiB0b29sYmFyIGJ1dHRvbiAoYSBkaXNrZXR0ZSkgaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmUgQXM8L0I+IHRvb2xiYXIgYnV0dG9uIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZGlzYWJsZWQgb24gdGhlIFNvdXJjZSBwb3B1cCBtZW51LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+V291bGQgYmUgbmljZSBpZiB0aGUgRGVzaWduIHBvcHVwIG1lbnUgYWxzbyBoYWQgYSBTYXZlIHNlbGVjdGlvbi4gT3BlbiBhIHN1Z2dlc3Rpb24gZGVmZWN0LjwvRk9OVD48L0xJPgotICAgIDxMST5ubyA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBmb2xsb3dpbmcgKGNoYW5nZXMtbWFkZSBjb25kaXRpb24pOgotICA8VUw+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmU8L0I+IGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBbGw8L0I+IGlzIGVuYWJsZWQ8L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZTwvQj4gdG9vbGJhciBidXR0b24gKGEgZGlza2V0dGUpIGlzIGVuYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+U2F2ZTwvQj4gaXMgZW5hYmxlZCBvbiB0aGUgU291cmNlIHBvcHVwIG1lbnUuPC9MST4KLSAgICA8TEk+YSA8Qj4qPC9CPiBhcHBlYXJzIGluIHRoZSBmaWxlIHRhYi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5IaXQgPEI+Q3RybCtTPC9CPi4gPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5GaWxlLSZndDtTYXZlIEFsbDxCPjwvQj4uPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPk1ha2UgYSBjaGFuZ2UgaW4gdGhlIFByb3BlcnRpZXMgdmlldy48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+U2VsZWN0IDxCPlNhdmU8L0I+IGZyb20gdGhlIFNvdXJjZSBwb3B1cCBtZW51LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5DbG9zZSBhbmQgdGhlbiByZW9wZW4gdGhlIGZpbGUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcyB0aGF0IHdlcmUgbWFkZSBpbiB0aGUgcHJldmlvdXMgc3RlcHMgYXBwZWFyIGluIHRoZSBEZXNpZ24gYW5kIFNvdXJjZSBwYWdlcy48L0xJPgotPC9VTD4KLTxQPjxCPlNhdmluZyBhbiBYTUwgRmlsZSBhY3Jvc3MgbXVsdGlwbGUgcGVyc3BlY3RpdmVzIChvcHRpb25hbCk8L0I+PC9QPgotPFVMPgotICA8TEk+T3BlbiBhbnkgeG1sIGZpbGUgaW4gdGhlIDxCPlhNTFRlc3QyPC9CPiBwcm9qZWN0LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIHRvIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5PcGVuIGFub3RoZXIgWE1MIFBlcnNwZWN0aXZlIGJ5OgotICA8VUw+Ci0gICAgPExJPjxCPnNlbGVjdGluZyBQZXJzcGVjdGl2ZS0mZ3Q7T3Blbi0mZ3Q7T3RoZXIuLi48L0I+PC9MST4KLSAgICA8TEk+d2hpbGUgaG9sZGluZyBkb3duIHRoZSA8Qj5TaGlmdDwvQj4ga2V5LCBzZWxlY3QgPEI+WE1MPC9CPi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5WZXJpZnkgYW5vdGhlciBYTUwgUGVyc3BlY3RpdmUgYnV0dG9uIGFwcGVhcnMgaW4gdGhlIGxlZnRoYW5kIHNpZGUgb2YgdGhlIFdvcmtiZW5jaCB0byByZXByZXNlbnQgdGhpcyBzZWNvbmQgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPk9wZW4gdGhlIHNhbWUgeG1sIGZpbGUgYXMgaW4gdGhlIGZpcnN0IHN0ZXAgYWJvdmUuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkgaW4gYm90aCBYTUwgUGVyc3BlY3RpdmVzIGFuZCB2ZXJpZnkgdGhhdCB0aGUgY2hhbmdlcyBtYWRlIHRvIHRoZSBmaWxlIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZSBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhlICogbmV2ZXIgYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIgb2YgdGhlIHNlY29uZCBwZXJzcGVjdGl2ZSBldmVuIHdoZW4gbWFrZSBjaGFuZ2VzIHRvIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUuIFRhbGsgdG8gRGF2aWQuPC9GT05UPjwvTEk+Ci0gIDxMST5NYWtlIHNvbWUgY2hhbmdlcyB0byB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlc2UgY2hhbmdlcyBhcHBlYXIgaW4gdGhlIHNhbWUgZmlsZSBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUuPC9MST4KLSAgPExJPkNsb3NlIHRoZSBmaWxlIGluIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUgYW5kIHJlc3BvbmQgPEI+WWVzPC9CPiB0byB0aGUgc2F2ZSBjaGFuZ2VzIHByb21wdC48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9uIGFwcGxpZXMgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlLjwvTEk+Ci08L1VMPgotPFA+PEI+VmFsaWRhdGluZyBhIG5vbiB3ZWxsIGZvcm1lZCBYTUwgRmlsZSAobm8gRFREL1NjaGVtYSk8L0I+PEJSPgotKE5PVEU6IGl0J3MgaW1wb3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBiZSB0eXBlZCBpbi4gVGhpcyB0ZXN0IGNhc2UgdHJpZXMgdG8gY292ZXIgc29tZSBvZiB0aGUgbW9yZSBjb21tb24gZXJyb3JzIHRoYXQgcmVuZGVyIGFuIFhNTCBmaWxlIGFzIG5vdCBiZWluZyB3ZWxsLWZvcm1lZC4gSXQgaXMgbm90IGludGVuZGVkIHRvIHZlcmlmeSB0aGF0IGFsbCBwb3NzaWJsZSBlcnJvcnMgYXJlIGJlaW5nIGRldGVjdGVkIGFuZCBncmFjZWZ1bGx5IGhhbmRsZWQuICk8L1A+Ci08VUw+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST48TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj48L0xJPgotICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZQotICAgIDxVTD4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5YTUxUZXN0MjwvQj4gYXMgdGhlIGZvbGRlcjwvTEk+Ci0gICAgICAgIDxMST5TcGVjaWZ5IGEgRmlsZSBuYW1lIG9mIDxCPk5vbldlbGxGb3JtZWQ8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+PC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICA8TEk+U2VsZWN0IDxCPiZsdDs/eG1sIHZlcnNpb249JnF1b3Q7MS4wJnF1b3Q7IGVuY29kaW5nPSZxdW90O1VURi04JnF1b3Q7PyZndDsuPC9CPjwvTEk+Ci0gIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgWE1MIGRlY2xhcmF0aW9uLjwvTEk+Ci0gIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gIDxMST5TZWxlY3QgY29tbWVudC48L0xJPgotICA8TEk+RW1iZWQgbW9yZSB0aGFuIDIgY29uc2VjdXRpdmUgZGFzaGVzIGluIHRoZSBjb21tZW50LiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBtb3JlIHRoYW4gMiBjb25zZWN1dGl2ZSBkYXNoZXMgY2FuIG5vdCBiZSBlbWJlZGRlZCB3aXRoaW4gYSBjb21tZW50KTwvRk9OVD48L0xJPgotICA8TEk+VHlwZSBpbiB0aGUgcmVtYWluaW5nIGxpbmVzIGFzIHNob3duIGJlbG93OiAKLSAgICAgICAgPEZPTlQgY29sb3I9IiNmZjAwMDAiPihJIGNhbid0IHNob3cgdGhlIGxpbmVzIHVudGlsIGRlZmVjdCAxNzc3NTUgaXMgZml4ZWQgLi4uIHVudGlsIHRoZW4sIGhlcmUncyB0aGUgdHlwZSBvZiB0aGluZ3MgdGhhdCBjYXVzZSAKLSAgICAgICAgYSBkb2N1bWVudCB0byBub3QgYmUgd2VsbC1mb3JtZWQpOjwvRk9OVD4KLSAgPFVMPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCBhbmQgZW5kIHRhZyB0aGF0IGRvbid0IG1hdGNoIGluIHRoZWlyIGNhc2Ugc2Vuc2l0aXZpdHkgCi0gICAgICAgIChlLmcuLCAmbHQ7dGFnJmd0OyBhbmQgJmx0Oy9UYWcmZ3Q7KS4gPC9MST4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgYW5kIGVuZCB0YWcgd2hlcmUgdGhlIHN0YXJ0IHRhZyBjb250YWlucyBhbiBhdHRyaWJ1dGUgdmFsdWUgdGhhdCBpcyBub3QgCi0gICAgICAgIGVuY2xvc2VkIGluIHF1b3Rlcy4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiB0aGlzIGlzIHBlcm1pdHRlZCBpbiBIVE1MLCBidXQgbm90IFhNTCk8L0ZPTlQ+PC9MST4KLSAgICA8TEk+Y3JlYXRlIHRhZ3MgdGhhdCBhcmUgbm90IHByb3Blcmx5IG5lc3RlZC4KLSAgICAgICAgPEZPTlQgY29sb3I9IiMwMDAwZmYiPihOT1RFOiBhIGNoaWxkIHRhZyBtdXN0IGJlIGNvbXBsZXRlZCBiZWZvcmUgaXRzIHBhcmVudCB0YWcpPC9GT05UPjwvTEk+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IHRhZyB3aXRob3V0IGEgY29ycmVzb25kaW5nIGVuZCB0YWcuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogYWxsIHN0YXJ0IHRhZ3MgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBlbmQgdGFnIHVubGVzcyB0aGUgCi0gICAgICAgIHRhZyBpcyBhbiBlbXB0eSB0YWcsIGluIHdoaWNoIGNhc2UgdGhlIHNob3J0aGFuZCB2ZXJzaW9uIGNhbiBiZSB1c2VkICgmbHQ7c2hvcnRUYWcvJmd0OykpLjwvRk9OVD48L0xJPgotICAgIDxMST5kbyBub3QgcHJvdmlkZSBhbiBhdHRyaWJ1dGUgdmFsdWUgKD0mcXVvdDt2YWx1ZSZxdW90OykuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogdGhpcyBpcyBwZXJtaXR0ZWQgaW4gSFRNTCBmb3IgdGhvc2UgYXR0cmlidXRlcyB0aGF0IGhhdmUgCi0gICAgICAgIG9ubHkgb25lIHZhbHVlLCBidXQgaXQncyBub3QgdmFsaWQgaW4gWE1MKTwvRk9OVD48L0xJPgotICAgICA8TEk+ZGVmaW5lIGFuIGF0dHJpYnV0ZSBtb3JlIHRoYW4gb25jZSBpbiBhIHN0YXJ0IHRhZy48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5TYXZlIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5WZXJpZnkgZXJyb3JzIGFyZSBsaXN0ZWQgaW4gdGhlIFRhc2tzIHZpZXcgZm9yIHRoZSBhYm92ZSB2aW9sYXRpb25zIGFuZCB0aGF0IGVycm9yIG1hcmtlcnMgYXBwZWFyIG9uIHRoZSBhcHByb3ByaWF0ZSAKLSAgICAgICAgIGxpbmVzIGluIHRoZSBTb3VyY2UgcGFnZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPkknbSBub3Qgc3VyZSBob3cgdGhlIERlc2lnbiBwYWdlIGhhbmRsZXMgYW55IG9mIHRoZXNlIHZpb2xhdGlvbnMgCi0gICAgICAgICBhbmQgd2hhdCB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3LiBUYWxrIHRvIENyYWlnIGFuZCBEYXZpZC48L0ZPTlQ+PC9MST4KLSAgPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi0KLTxQPjxCPlZhbGlkYXRlIGFuIFhNTCBGaWxlIGJhc2VkIG9uIGEgRFREPC9CPjwvUD4KLTxVTD4KLTxMST5PcGVuIDxCPmZyb21TY3JhdGNoLnhtbDwvQj4uPC9MST4KLTxMST5EZWxldGUgYSBjaGFyYWN0ZXIgZnJvbSBvbmUgb2YgdGhlIHN0YXJ0IHRhZ3MgKG1pc3R5cGluZyBhIHRhZyBpcyBub3QgdW5jb21tb24pLjwvTEk+Ci08TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdCB3aXRoaW4gdGhlIGJhZCB0YWcuIFZlcmlmeSBhIG1lc3NhZ2UgYXBwZWFycyBpbiB0aGUgc3RhdHVzIGFyZWEKLW9mIHRoZSBXb3JrYmVuY2ggaW5kaWNhdGluZyB0aGF0IHRoZSBiYWQgdGFnIGlzIGFuIHVua25vd24gdGFnLjwvTEk+Ci08TEk+U2VsZWN0IHRoZSA8Qj5WYWxpZGF0ZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST4KLTxMST5WZXJpZnkgYW4gZXJyb3IgYXBwZWFycyBpbiB0aGUgVGFza3MgdmlldyBhbmQgYW4gZXJyb3IgbWFya2VyIGFwcGVhcnMgaW4gdGhlIFNvdXJjZSBwYWdlCi10byBmbGFnIHRoZSBpbnZhbGlkIHRhZy48L0xJPgotPExJPlNlbGVjdCA8Qj5FZGl0LT5VbmRvPC9CPiBmcm9tIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotPExJPlZlcmlmeSB0aGUgYmFkIHRhZyBlcnJvciBubyBsb25nZXIgYXBwZWFycyBpbiB0aGUgVGFza3Mgdmlldy48L0xJPgotPExJPlJlbW92ZSB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGZyb20gdGhlIFNvdXJjZSBwYWdlLjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBhbiBlcnJvciBhcHBlYXJzIGluIHRoZSBUYXNrcyB2aWV3IGluZGljYXRpbmcgdGhhdCB0aGUgPEI+SGVhZGVyPC9CPiBlbmQgdGFnIGlzIG1pc3Npbmc8L0xJPgotPExJPkNsb3NlIHRoZSBmaWxlLCByZXNwb25kaW5nIDxCPlllczwvQj4gdG8gdGhlIHNhdmUgY2hhbmdlcyBwcm9tcHQuPC9MST4KLTxMST5Eb3VibGUtY2xpY2sgb24gdGhlIGVycm9yIGluIHRoZSBUYXNrcyB2aWV3LCBhbmQgdmVyaWZ5IDxCPmZyb21TY3JhdGNoLnhtbDwvQj4gb3BlbnMgdG8gdGhlCi1hcHByb3ByaWF0ZSBsaW5lIGluIHRoZSBTb3VyY2UgcGFnZSBvZiB0aGUgWE1MIEVkaXRvci48L0xJPgotPExJPkhlcmUncyBzb21lIG90aGVyIHZpb2xhdGlvbnMgdGhhdCBjYW4gYmUgYXR0ZW1wdGVkOgotPFVMPgotPExJPlNwZWNpZnkgYSBiYWQgYXR0cmlidXRlLjwvTEk+Ci08TEk+U3BlY2lmeSBhIGJhZCBhdHRyaWJ1dGUgdmFsdWUuPC9MST4KLTxMST5TcGVjaWZ5IGNoaWxkIHRhZ3Mgb3V0IG9mIHNlcXVlbmNpbmcgb3JkZXI8L0xJPgotPExJPlZpb2xhdGUgdGhlIG9jY3VycmVuY2UgaW5kaWNhdG9yIGZvciBhIHRhZyAoZS5nLiwgaWYgdGhlIERURCBzaG93cyA/LCB0aGVuIG9ubHkKLTAgb3IgMSBvY2N1cnJlbmNlcyBvZiB0aGUgdGFnIGlzIHBlcm1pdHRlZCkuCi08L1VMPjwvTEk+Ci08TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotPExJPlZlcmlmeSBlcnJvcnMgYXJlIGxpc3RlZCBpbiB0aGUgVGFza3MgdmlldyBmb3IgdGhlIGFib3ZlIHZpb2xhdGlvbnMgYW5kIHRoYXQgZXJyb3IgbWFya2VycyBhcHBlYXIgb24gdGhlIGFwcHJvcHJpYXRlIAotbGluZXMgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SSdtIG5vdCBzdXJlIGhvdyB0aGUgRGVzaWduIHBhZ2UgaGFuZGxlcyBhbnkgb2YgdGhlc2UgdmlvbGF0aW9ucyAKLWFuZCB3aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYW5kIERhdmlkLjwvRk9OVD48L0xJPgotPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIHNhdmVkLjwvTEk+Ci08L1VMPgotCi08IS0tICByZW1vdmVkIHNpbmNlIGRvbmUgZWxzZXdoZXJlIGFzIHBhcnQgb2Ygb3RoZXIgc2NlbmVyaW9zCi08UD48Qj5WYWxpZGF0ZSBhbiBYTUwgRmlsZSBiYXNlZCBvbiBhIFNjaGVtYTwvQj48QlI+Ci0tLT4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIFNwZWNpZmljIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxCPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5Tb3VyY2UgU3BlY2lmaWMgdGVzdCBjYXNlcyAob3B0aW9uYWwpPC9GT05UPjwvQj48L0gyPgotPFA+PEI+VXNpbmcgdGhlIEF1dG8gQ29tcGxldGlvbiBDb250ZW50IEFzc2lzdCBQcmVmZXJlbmNlPC9CPjxCUj4KLTxVTD4KLTxMST5PcGVuIGEgYW55IFhNTCBmaWxlIHRoYXQgaGFzIGVub3VnaCB0YWdzIHRvIHByb3ZpZGUgc3ludGF4IGhpZ2h0bGlnaHRpbmcuPC9MST4KLTxMST5XaGlsZSB0aGF0IGZpbGUgaXMgbGVmdCBvcGVuLCBnbyB0byB0aGUgUHJlZmVyZW5jZXMgcGFnZSwgc2VsZWN0Ci1YTUwgRWRpdG9yLCB0aGVuIFNvdXJjZSBTdHlsZXMuIDwvTEk+Ci08TEk+T24gdGhhdCBwYWdlLCB1c2UgdGhlIG1vdXNlIHRvICJzZWxlY3QiIGEgdGFnIG5hbWUuIFRoZSB0YWcgbmFtZSBpcyBub3QgbGl0ZXJhbGx5Ci1zZWxlY3RlZCwgYnV0IHdoZW4geW91IGNsaWNrIG9uIGFuIGVsZW1lbnQgaW4gdGhlIGV4YW1wbGUgdGV4dCwgdGhlIGxpc3QKLWFib3ZlIGl0IHdpbGwgZGlzcGxheSB0aGUgdHlwZSBvZiBlbGVtZW50IGl0IGlzLCBhbmQgd2hhdCBpdHMgY3VycmVudCBjb2xvcnMgYXJlLjwvTEk+Ci08TEk+Rm9yICJ0YWcgbmFtZSIsIHNlbGVjdCB0aGUgYm9sZCBjaGVjayBib3guIFRoZW4gcHJlc3MgQXBwbHksIGFuZCB5b3Ugc2hvdWxkCi1zZWUgdGhlIGNoYW5nZSB0YWtlIGVmZmVjdCBpbiB5b3VyIGFjdGl2ZSBlZGl0b3IuPC9MST4KLTxMST5TZWxlY3QgIkRlZmF1bHRzIiBhbmQgbWFrZSBzdXJlIHRoZSB0YWcgbmFtZXMgYXJlIHNldCBiYWNrIHRvIG5vdCBib2xkLjwvTEk+Ci08L1VMPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPFA+PEI+RG91YmxlLUNsaWNraW5nIFdpdGhpbiB0aGUgU291cmNlPC9CPiA8QlI+Ci0oTk9URTogaWYgeW91IGNvbnRpbnVlIHRvIGRvdWJsZS1jbGljayBhdCBhIGdpdmVuIGN1cnNvciBwb3NpdGlvbiwgdGhlIHNlbGVjdGlvbiBhcmVhIHdpbGwgY29udGludWUgdG8gZXhwYW5kLiBXaGVuIHRoZSBtYXhpbXVtIHJlZ2lvbiBhcmVhIGhhcyBiZWVuIHJlYWNoZWQsIHRoZSBuZXh0IGRvdWJsZS1jbGljayB3aWxsIGNhdXNlIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uIFNvLCB0aGUgc2VsZWN0aW9ucyB3aWxsIHdyYXAvY3ljbGUuIDxGT05UIGNvbG9yPSIjMDAwMGZmIj5Db29sITwvRk9OVD4pLjwvUD4KLTxVTD4KLSAgPExJPk9wZW4gPEI+Sm9iRGVzYy54bWw8L0I+LjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIHRhZyBjb250ZW50OgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+TWlkZGxld2FyZTwvQj4gb24gbGluZSA3LjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5NaWRkbGV3YXJlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIGFuZCBEZXNpZ24gcGFnZXMgYW5kIDxCPkJ1c1R5cGU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ob3Qgc3VyZSB3aGF0IHRoZSBQcm9wZXJ0aWVzIHZpZXcgaXMgc3VwcG9zZWQgdG8gc2hvdy4gSXQgZ29lcyBibGFuay4gU2VlIGRlZmVjdCAxNzc3NTMuIEFsc28sIDxCPk1pZGRsZXdhcmU8L0I+IHdhc24ndCBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYXMgaGFkIGV4cGVjdGVkLiBUaGUgRGVzaWduIHBhZ2Ugb25seSBzZWVtcyB0byBzdGF5IGluIHN5bmMgYXQgdGhlIGVsZW1lbnQvdGFnIGxldmVsIGxpa2UgdGhlIE91dGxpbmUgdmlldy4gVGFsayB0byBDcmFpZyBhYm91dCB0aGlzLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5BcHBsaWNhdGlvbiBhbmQgTWlkZGxld2FyZSBTb2Z0d2FyZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzIGFuZCA8Qj5CdXNUeXBlPC9CPiByZW1haW5zIHRvIGJlIHRoZSBvbmx5IHRoaW5nIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhIHRhZyBuYW1lOgotICA8VUw+Ci0gICAgPExJPkRvdWJsZS1jbGljayB3aXRoaW4gPEI+SG93VG9BcHBseTwvQj4gb24gbGluZSA2MS48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlLCBEZXNpZ24gcGFnZSwgYW5kIE91dGxpbmUgdmlldy4gCi0gICAgICAgIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gdGhlIAotICAgICAgICBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYWdhaW4gYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpIGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UuIDxCPkhvd1RvQXBwbHk8L0I+IHNob3VsZCByZW1haW4gc2VsZWN0ZWQgaW4KLSAgICAgICAgdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIHZpZXcuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGFuIGF0dHJpYnV0ZSBuYW1lOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtFbmQ8L0I+IHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmRpc3RyaWJ1dGU8L0I+IG9uIGxpbmUgNjEuIFZlcmlmeSA8Qj5kaXN0cmlidXRlPC9CPiBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgCi0gICAgICAgIHZpZXcuIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gCi0gICAgICAgIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZT0iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+ICAgICAgICAgICAgICAgICAKLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci0gPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYW4gYXR0cmlidXRlIHZhbHVlOgotICA8VUw+Ci0gICAgPExJPlR5cGUgPEI+Q3RybCtIb21lPC9CPiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+U2Nyb2xsIGRvd24gc3VjaCB0aGF0IGxpbmUgNjEgaXMgdmlzaWJsZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPmludGVybmFsPC9CPiBvbiBsaW5lIDYxLiBWZXJpZnkgPEI+aW50ZXJuYWw8L0I+IGlzIHNlbGVjdGVkIAotICAgICAgICBpbiB0aGUgU291cmNlIHBhZ2UgYW5kIDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSAKLSAgICAgICAgdmlldy4gPEI+Y2xhc3M8L0I+LCA8Qj5kaXN0cmlidXRlPC9CPiwgPEI+aWQ8L0I+LCBhbmQgPEI+bmFtZTwvQj4gc2hvdWxkIGFwcGVhciBpbiAKLSAgICAgICAgdGhlIFByb3BlcnRpZXMgdmlldy4gT25seSA8Qj5kaXN0cmlidXRlPC9CPiBzaG91bGQgc2hvdyBhIHZhbHVlLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj4iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSA8Qj5kaXN0cmlidXRlPSJpbnRlcm5hbCI8L0I+IGlzCi0gICAgICAgIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuPC9MST4gICAgICAgICAgICAgICAgIAotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyBpcyBzZWxlY3RlZCBpbiB0aGUgU291cmNlIHBhZ2UgKGluY2x1ZGluZyBpdHMgZGVsaW1pdGVycykuIE5vdGhpbmcgc2hvdWxkIGNoYW5nZSBpbiB0aGUgRGVzaWduIHBhZ2Ugb3Igdmlld3MuIDxCPjxGT05UIGNvbG9yPSIjZmYwMDAwIj5Ib3dUb0FwcGx5PC9GT05UPjwvQj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+IGFuZCBhbGwgZGVzY2VuZGVudHMgYmVjb21lIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgKGRlZmVjdCAxNzc3NTIpLiBBbHNvLCB0aGUgUHJvcGVydGllcyB2aWV3IHNob3dzIG5vIHByb3BlcnRpZXMgKGRlZmVjdCAxNzc3NTMpLjwvRk9OVD48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2tpbmcgYWdhaW4gd2lsbCBjYXVzZSBjeWNsaW5nIGJhY2sgdG8gdGhlIG9yaWdpbmFsIHNlbGVjdGlvbi48L0xJPgotICA8L1VMPjwvTEk+Ci08L1VMPgotCi08UD48Qj5Gb3JtYXR0aW5nIGEgRmlsZSBDcmVhdGVkIGJ5IERpZmZlcmVudCBFZGl0b3JzPC9CPjxCUj4KLTx1bD4KLTxsaT4KLUltcG9ydCB0aGUgPGI+Sm9iUG9zdGluZy5kdGQ8L2I+IGFuZCA8Yj5Kb2JEZXNjLnhtbDwvYj48L2xpPgotCi08bGk+Ci1PcGVuIHRoZSBKb2JEZXNjLnhtbC4gQ2hlY2sgdGhlIHNvdXJjZSBmb3IgaW5kZW50YXRpb24gdG8gc2VlIGlmIGl0IHByZXNlcnZlcwotdGhlIHdoaXRlIHNwYWNlIGZyb20gdGhlIG9yaWdpbmFsIGRvY3VtZW50LjwvbGk+Ci0KLTxsaT4KLVRoZSBvcmlnbmFsIGRvY3VtZW50IHVzZXMgc3BhY2VzIGFuZCB0YWJzLCBzbyB0aGUgZm9ybWF0dGluZyB3aWxsIGFwcGVhciBhIGxpdHRsZSB3cm9uZy4KLUJ5IHVzaW5nIHRoZSByaWdodC9sZWZ0IGFycm93cywgdmVyaWZ5IHRoYXQgc29tZSBzcGFjZSBpcyBzcGFjZXMgYW5kIHNvbWUgc3BhY2UKLWlzIHRhYiBjaGFyYWN0ZXJzLjwvbGk+Ci08TEk+VXNlICdmb3JtYXQgZG9jdW1lbnQnIHRvIGJlIHN1cmUgaXQgZm9ybWF0cy4gPC9MST4KLTxMST5UaGUgZGVmYXVsdCBpcyB0byBmb3JtYXQgd2l0aCBzcGFjZXMgLi4uIHZlcmlmeSBvbmx5IHNwYWNlcyByZW1haW4gaW4gZmlsZSwgbm90IHRhYiBjaGFyYWN0ZXMuIAotKEp1c3QgYSBsaXR0bGUgbW92ZW1lbnQgd2l0aCB0aGUgYXJyb3cga2V5cyBzaG91bGQgc3VmZmljZS48L0xJPgotPExJPkdvIHRvIHRoZSBwcmVmZXJlbmNlIHBhZ2UgdG8gY2hhbmdlIHRoZSBmb3JtYXQgc2V0dGluZ3MgZm9yIHRoZSBYTUwgRWRpdG9yCi10byB1c2UgdGhlIHRhYiBjaGFyYWN0ZXIgaW5zdGVhZCBvZiA0IHNwYWNlcy4gV2hpbGUgdGhlcmUsIHZlcmlmeSB0aGF0IHRoZSBkaWFsb2cKLXdpbGwgbm90IGFsbG93IG90aGVyIHZhbHVlcyB0byBiZSBpbnRlcmVkIGV4Y2VwdCAid2hpdGVzcGFjZSIgLi4uJ1x0J3MgYW5kIGJsYW5rcy4KLTwvTEk+Ci08TEk+Rm9ybWF0IHRoZSBkb2N1bWVudCBhZ2FpbiBhbmQgYmUgc3VyZSB0aGlzIHRpbWUgdGFiIGNoYXJhY3RlcnMgd2VyZSB1c2VkLjwvTEk+Ci08L3VsPgotPElNRyBib3JkZXI9IjAiIGhlaWdodD0iNjMiIHNyYz0idTAxMWFuaS5naWYiIHdpZHRoPSI2MyI+PC9QPgotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXIgdGVzdCBjYXNlcwotICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0+Ci08SDI+PEI+PEZPTlQgY29sb3I9IiMwMDAwZmYiPk90aGVyIHRlc3QgY2FzZXM8L0ZPTlQ+PC9CPjwvSDI+Ci08UD48Qj5Bc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gYSBuZXcgZmlsZSB0eXBlPC9CPjwvUD4KLTxVTD4KLSAgPExJPldpbmRvdy0mZ3Q7UHJlZmVyZW5jZXM8Qj48L0I+LjwvTEk+Ci0gIDxMST5FeHBhbmQgPEI+V29ya2JlbmNoPC9CPi48L0xJPgotICA8TEk+U2VsZWN0IDxCPkZpbGUgRWRpdG9yczwvQj4uPC9MST4KLSAgPExJPlNlbGVjdCB0aGUgPEI+QWRkPC9CPiBidXR0b24gdG8gYWRkIGEgbmV3IGZpbGUgdHlwZS48L0xJPgotICA8TEk+U3BlY2lmeSBhIGZpbGUgdHlwZSBvZiA8Qj4qLnNldDwvQj4gYW5kIHRoZW4gY2xvc2UgdGhlIEFkZCBkaWFsb2cuPC9MST4KLSAgPExJPlZlcmlmeSA8Qj4qLnNldDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIGxpc3Qgb2YgZmlsZSB0eXBlcy48L0xJPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5BZGQ8L0I+IGJ1dHRvbiB0byBhc3NvY2lhdGUgdGhlIFhNTCBFZGl0b3IgdG8gdGhlIG5ldyBmaWxlIHR5cGUuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5YTUwgRWRpdG9yPC9CPiBmcm9tIHRoZSBsaXN0IG9mIGVkaXRvcnMuIFZlcmlmeSBpdCBhcHBlYXJzIHdpdGggaXRzIG93biBzcGVjaWFsIGljb24uIENsb3NlIHRoZSBkaWFsb2cuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5OT1RFOiB3YWl0aW5nIHRvIGhlYXIgYmFjayBmcm9tIE9USSBvbiBob3cgY2FuIHByZXZlbnQgMiBYTUwgRWRpdG9yIGVudHJpZXMgZnJvbSBhcHBlYXJpbmcgaW4gdGhlIGxpc3QuPC9GT05UPjwvTEk+Ci0gIDxMST5WZXJpZnkgPEI+WE1MIEVkaXRvcjwvQj4gYXBwZWFycyBhcyB0aGUgZGVmYXVsdCBlZGl0b3Igbm93IGZvciB0aGUgPEI+Ki5zZXQ8L0I+IGZpbGUgdHlwZS48L0xJPgotICA8TEk+T3BlbiA8Qj5nb3RjaGFUQ0JlYW5zLnNldDwvQj4gZnJvbSB0aGUgTmF2aWdhdG9yIHZpZXcuIFZlcmlmeSBpdCBvcGVucyB0byB0aGUgWE1MIEVkaXRvci48L0xJPgotPC9VTD4KLTxQPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5USEUgRU5EITwvRk9OVD48L1A+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9MYXJnZU5vbkRlZmF1bHQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2JjZGQxNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL0xhcmdlTm9uRGVmYXVsdC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNjY1ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDL0RURC8gSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPgotCi08aHRtbD4KLTxoZWFkPgotPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+Ci08bWV0YSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9Ik1vemlsbGEvNC43IFtlbl0gKFdpbk5UOyBVKSBbTmV0c2NhcGVdIj4KLTxNRVRBIGNvbnRlbnQ9InRleHQvY3NzIiBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiPgotPHRpdGxlPnNtb2tlPC90aXRsZT4KLTwvaGVhZD4KLTxib2R5PgotPGgyPiBTbW9rZSBUZXN0IC0gWE1MIEVkaXRvcjwvaDI+Ci1MYXN0IHVwZGF0ZWQ6IEp1bmUgMjUsIDIwMDEKLTxQPlRoaXMgU21va2UgVGVzdCBwcmltYXJpbHkgZm9jdXNlcyBvbiB0aGUgUlRQIHBvcnRpb24gb2YgdGhlIFhNTCAKLUVkaXRpb3IsIHdoaWNoIGlzIHRoZSBTb3VyY2UgcGFnZSBvZiB0aGUgWE1MIEVkaXRvci4gSXQgYWxzbyBwZXJmb3JtcyAKLXNvbWUgaW50ZWdyYXRpb24gdGVzdGluZy4gRm9yIGV4YW1wbGUsIGl0IHRlc3RzIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIAotdGhlIERlc2lnbiBhbmQgU291cmNlIHBhZ2VzIG9mIHRoZSBYTUwgRWRpdG9yLCBhcyB3ZWxsIGFzIHdpdGggdGhlIAotT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3cy4gSXQgYWxzbyB2ZXJpZmllcyB0aGF0IGZpbGVzIGNyZWF0ZWQgCi10aHJvdWdoIHRoZSBYTUwgRmlsZSB3aXphcmQgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIFhNTCBDYXRhbG9nIGFyZSAKLXN1cHBvcnRlZCBhcyBleHBlY3RlZC48L1A+Ci08UD48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+PEI+Tk9URTwvQj46IFhNTCBmaWxlcyBhcmUgY2FzZS1zZW5zaXRpdmUgc28gYmUgc3VyZSB0aGF0IHRoaW5ncyBhcHBlYXIgCi1leGFjdGx5IGFzIG5vdGVkLjwvRk9OVD48L1A+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldHVwCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U2V0dXA8L0ZPTlQ+PC9IMj4KLTxQPjxCPlN0YXJ0aW5nIENsZWFuPC9CPjwvUD4KLTx1bD4KLSAgICA8bGk+IERlbGV0ZSBhbnkgZXhpc3Rpbmcgd29ya2JlbmNoPC9saT4KLSAgICA8bGk+IFN0YXJ0IEVjbGlwc2U8L2xpPgotPC91bD4KLTxQPjxCPk9wZW4gYW4gWE1MIFBlcnNwZWN0aXZlPEJSPgotPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5PcGVuIFBlcnNwZWN0aXZlPC9CPiB0b29sYmFyIGJ1dHRvbiBpbiB0aGUgdXBwZXIgbGVmdDwvTEk+Ci0gICAgPExJPlNlbGVjdCA8Qj5PdGhlci4uLjwvQj48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+WE1MPC9CPjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIHZpZXdzIGFwcGVhciBpbiB0aGUgWE1MIHBlcnNwZWN0aXZlOiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+VGhlIGxvY2F0aW9uIG9mIHRoZSBPdXRsaW5lIGFuZCBOYXZpZ2F0b3Igdmlld3MgYXJlIHJldmVyc2VkIGZyb20gdGhlIFJlc291cmNlIGFuZCBXZWIgcGVyc3BlY3RpdmVzLiBEbyB3ZSB3YW50IHRvIHRyeSB0byBiZSBjb25zaXN0ZW50IGFjcm9zcyB0aGUgcGVyc3BlY3RpdmVzPyBBbHNvLCBJIG9wZW5lZCA8Qj5kZWZlY3Q8L0I+IDE3NzY2NCB0byBlbmFibGUgZWFzeSBhY2Nlc3MgdG8gdGhlIFByb3BlcnRpZXMgdmlldyBmcm9tIHdpdGhpbiB0aGUgWE1MIHBlcnNwZWN0aXZlLiBJZiB0aGlzIHZpZXcgaXNuJ3QgaW5jbHVkZWQgaW4gdGhlIFBlcnNwZWN0aXZlIGJlY2F1c2UgaXRzIHVzZSBpcyBsaW1pdGVkLCB0aGVuIHJlY29tbWVuZCB3ZSBhdCBsZWFzdCBwcm92aWRlIGEgU2hvdyBvciBIaWRlIFByb3BlcnRpZXMgVmlldyB0b29sYmFyIGJ1dHRvbiAoc2ltaWxhciB0byB0aGUgYnV0dG9ucyB0aGF0IFBhZ2UgRGVzaWduZXIgcHJvdmlkZXMpLjwvRk9OVD48L0xJPgotPC9VTD4KLTxQPjxCPlByb2plY3QgQ3JlYXRpb24gYW5kIEZpbGUgSW1wb3J0czxCUj4KLTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPkNyZWF0ZSBhIFByb2plY3QsIDxCPlhNTFRlc3QyPC9CPiA8L0xJPgotICAgIDxMST5JbXBvcnQgdGhlIGZvbGxvd2luZyBmaWxlcyBpbnRvIHRoaXMgcHJvamVjdDoKLSAgICA8VUw+Ci0gICAgICAgIDxMST48Qj5QdXJjaGFzZU9yZGVyLnhzZDwvQj48L0xJPgotICAgICAgICA8TEk+PEI+SW52b2ljZS5kdGQ8L0I+PC9MST4KLSAgICA8TEk+PEI+Sm9iRGVzYy54bWw8L0I+PC9MST4KLSAgICA8TEk+PEI+V2lyZWxlc3MueG1sPC9CPjwvTEk+Ci0gICAgPExJPjxCPmdvdGNoYVRDQmVhbnMuc2V0PC9CPjwvTEk+Ci0gICAgPExJPjxCPkFUUy5kdGQ8L0I+PC9MST4KLSAgICA8TEk+PEZPTlQgY29sb3I9IiNmZjAwMDAiPmFueSBvdGhlcnM/PC9GT05UPjwvTEk+Ci0gICAgPC9VTD4KLSAgICA8L0xJPgotPC9VTD4KLQotPCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgICAgICAgICAgICBDcmVhdGUvT3Blbi9FZGl0IHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5DcmVhdGUvT3Blbi9FZGl0IHRlc3QgY2FzZXM8L0ZPTlQ+PC9IMj4KLTxQPjxCPkNyZWF0ZSBhbiBYTUwgRmlsZSBmcm9tIHNjcmF0Y2g8L0I+PC9QPgotPFVMPgotICAgIDxMST5TZWxlY3QgdGhlIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj4gdG9vbGJhciBidXR0b24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBDcmVhdGUgYSBYTUwgRmlsZSB3aXphcmQgYXBwZWFycyBhbmQgdGhlIEZpbmlzaCBidXR0b24gaXMgZGlzYWJsZWQuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj48Qj5ERUZFQ1Q6PC9CPiAxNzc2NjAgLSBYTUwgRmlsZSB3aXphcmQ6IGRpc2FibGUgRmluaXNoIGJ1dHRvbiBvbiB0aGUgZmlyc3QgcGFnZTwvRk9OVD4uPC9MST4KLSAgICA8TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSBhIG5ldyBYTUwgZmlsZTwvQj48L0xJPgotICAgIDxMST5HbyB0byB0aGUgTmV4dCBwYWdlCi0gICAgPFVMPgotICAgICAgICA8TEk+U2VsZWN0IDxCPlhNTFRlc3QyPC9CPiBhcyB0aGUgZm9sZGVyPC9MST4KLSAgICAgICAgPExJPlNwZWNpZnkgYSBGaWxlIG5hbWUgb2YgPEI+ZnJvbVNjcmF0Y2g8L0I+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nOgotICAgIDxVTD4KLSAgICAgICAgPExJPmZyb21TY3JhdGNoLnhtbCBhcHBlYXJzIGluIHRoZSBOYXZpZ2F0b3Igdmlldy48L0xJPgotICAgICAgICA8TEk+ZnJvbVNjcmF0Y2gueG1sIGlzIG9wZW4gdG8gdGhlIERlc2lnbiBwYWdlIG9mIHRoZSBYTUwgRWRpdG9yIGFuZCBoYXMgZm9jdXMuPC9MST4KLSAgICAgICAgPExJPnRoZSBEZXNpZ24gdGFiIGFwcGVhcnMgYmVmb3JlIHRoZSBTb3VyY2UgdGFiIGluIHRoZSBYTUwgRWRpdG9yLjwvTEk+Ci0gICAgICAgIDxMST50aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZSBzaG93IG5vIGNvbnRlbnQuPC9MST4KLSAgICAgICAgPExJPnRoZSBPdXRsaW5lIGFuZCBQcm9wZXJ0aWVzIHZpZXdzIHNob3cgbm90aGluZy48L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+U3dpdGNoIHRvIHRoZSBTb3VyY2UgcGFnZS4gVmVyaWZ5IHRoZSBjdXJzb3IgYXBwZWFycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPlJpZ2h0IG1vdXNlIGJ1dHRvbiAyIGFuZCB2ZXJpZnkgYSBwb3B1cCBtZW51IGFwcGVhcnMuPC9MST4KLSAgICA8TEk+SGl0IDxCPkN0cmwrU3BhY2U8L0I+LiBWZXJpZnkgdGhlIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FsIGxpc3QgYXBwZWFycy48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+Jmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OzwvQj48L0xJPgotICAgIDxMST5WZXJpZnkgJmx0Oz94bWwgdmVyc2lvbj0mcXVvdDsxLjAmcXVvdDsgZW5jb2Rpbmc9JnF1b3Q7VVRGLTgmcXVvdDs/Jmd0OyBpcyBpbnNlcnRlZCBhbmQgYXBwZWFycyBzeW50YXggaGlnaGxpZ2h0ZWQgYW5kIGFuIGVudHJ5IGFwcGVhcnMgZm9yIGl0IGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciB3aXRoaW4gdGhlIFhNTCBkZWNsYXJhdGlvbiBhbmQgdmVyaWZ5IDxCPnZlcnNpb248L0I+IGFuZCA8Qj5lbmNvZGluZzwvQj4gYXBwZWFyIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5UaGlzIHVzZWQgdG8gd29yaywgYnV0IG5vdyBpdCdzIG5vdCB3b3JraW5nLiBPcGVuZWQgPEI+ZGVmZWN0PC9CPiAxNzc2NjIgLSBYTUwgZGVjbGFyYXRpb24gYXR0cmlidXRlcyBub3QgYXBwZWFyaW5nIGluIFByb3BlcnRpZXMgdmlldy4gSWYgd2UgZGVjaWRlIHRvIG5vdCB0cmVhdCB2ZXJzaW9uIGFuZCBlbmNvZGluZyBhcyBhdHRyaWJ1dGVzLCB0aGVuIHRoaXMgc3RlcCBzaG91bGQgYmUgcmVtb3ZlZC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+Q29udGludWUgdG8gdGhlIG5leHQgc2VjdGlvbi48L0xJPgotPC9VTD4KLTxQPjxCPklkZW50aWZ5IGEgbG9jYWwgRFREICg8L0I+dmVyaWZpZXMgYSBEVEQgaXMgaW1tZWRpYXRlbHkgcmVjb2duaXplZDsgaW4gdGhlIHBhc3QsIHlvdSBoYWQgdG8gY2xvc2UgYW5kIHJlb3BlbiB0aGUgV29ya2JlbmNoPEI+KTwvQj48L1A+Ci08VUw+Ci0gICAgPExJPlR5cGUgdGhlIGZvbGxvd2luZyBhZnRlciB0aGUgWE1MIGRlY2xhcmF0aW9uIGluIDxCPmZyb21TY3JhdGNoLnhtbDwvQj46IDxCPiZsdDshRE9DVFlQRSBJbnZvaWNlIFNZU1RFTSAmcXVvdDtJbnZvaWNlLmR0ZCZxdW90OyZndDs8L0I+LiBUaGUgdGV4dCBzaG91bGQgYmUgc3ludGF4IGhpZ2hsaWdodGVkIGFzIHlvdSB0eXBlIGFuZCB5b3Ugc2hvdWxkIHNlZSBhbiBlbnRyeSBnZXQgYWRkZWQgdG8gdGhlIE91dGxpbmUgdmlldy48L0xJPgotICAgIDxMST5IaXQgPEI+RW50ZXI8L0I+IHRvIGNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSBET0NUWVBFIGRlY2xhcmF0aW9uLjwvTEk+Ci0gICAgPExJPkhpdCA8Qj5DdHJsK1NwYWNlPC9CPi5WZXJpZnkgb25seSA8Qj5JbnZvaWNlPC9CPiBhbmQgPEI+Y29tbWVudDwvQj4gYXBwZWFyIGluIHRoZSBwcm9wb3NhbCBsaXN0LiAoPEI+Tk9URTwvQj46IDxCPkludm9pY2U8L0I+IGlzIHRoZSByb290IGVsZW1lbnQpPC9MST4KLSAgICA8TEk+SGl0IDxCPkVudGVyPC9CPiB0byBhY2NlcHQgPEI+SW52b2ljZTwvQj4gYXMgYSBzZWxlY3Rpb24uIFZlcmlmeSB0aGUgSW52b2ljZSBzdGFydCBhbmQgZW5kIHRhZ3MgYXJlIGluc2VydGVkIGludG8gdGhlIFNvdXJjZSBhbmQgdGhlIGN1cnNvciBhcHBlYXJzIGJldHdlZW4gdGhlbS4gQW4gZWxlbWVudCBlbnRyeSBzaG91bGQgYXBwZWFyIGZvciBJbnZvaWNlIGluIHRoZSBPdXRsaW5lIHZpZXcuICg8Qj5OT1RFPC9CPjogWE1MIGlzIGNhc2Utc2Vuc2l0aXZlIHNvIGJlIHN1cmUgeW91IHNlZSBJbnZvaWNlIGFuZCBub3QgaW52b2ljZSBldmVyeXdoZXJlKS48L0xJPgotICAgIDxMST5IaXQgPEI+Q3RybCtTcGFjZTwvQj4uIFZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhcnMgaW4gdGhlIHByb3Bvc2FsIGxpc3QgKGluIHRoZSBvcmRlciBzaG93bik6IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JdGVtIGlzIGFwcGVhcmluZyBiZWZvcmUgSGVhZGVyLiBUaGUgZGVmYXVsdCBpcyBub3QgdG8gc29ydCB0aGUgbGlzdCBhbHBoYWJldGljYWxseS4gVGhhdCBtZWFucyB0aGUgbGlzdCBzaG91bGQgYmUgc29ydGVkIGJhc2VkIG9uIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgY2hpbGQgdGFncyBhcmUgZGVmaW5lZCBpbiB0aGUgZWxlbWVudCBkZWZpbml0aW9uIGZvciBJbnZvaWNlIGluIHRoZSBEVEQuIEluIG90aGVyIHdvcmRzLCB1c2VycyBzaG91bGQgc2VlIGNoaWxkIHRhZ3MgbGlzdGVkIGFjY29yZGluZyB0byB0aGVpciBzZXF1ZW5jaW5nIG9yZGVyIGluIHRoZSBEVEQsIHdoaWNoIHRoZSBEVEQgRWRpdG9yIHNob3dzLiBWaW9sYXRpbmcgdGhlIHNlcXVlbmNpbmcgb3JkZXIgY2F1c2VzIGFuIFhNTCBmaWxlIHRvIGJlY29tZSBub3QgdmFsaWQuIDxCPkRFRkVDVDo8L0I+IDE3NzY2ODwvRk9OVD4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5IZWFkZXI8L0xJPgotICAgICAgICA8TEk+SXRlbTwvTEk+Ci0gICAgICAgIDxMST5jb21tZW50PC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci0gICAgPExJPkhpdCA8Qj5FbnRlcjwvQj4gdG8gYWNjZXB0IDxCPkhlYWRlcjwvQj4gYXMgYSBzZWxlY3Rpb24uPC9MST4KLSAgICA8TEk+VmVyaWZ5IHRoZSBTb3VyY2Ugbm93IGxvb2tzIGxpa2UgdGhlIGZvbGxvd2luZyBhbmQgdGhlIGN1cnNvciBhcHBlYXJzIGJlZm9yZSA8Qj5pbnZvaWNlTnVtYmVyPC9CPjo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI4MyIgc3JjPSJpZGVudGlmeURURC5qcGciIHdpZHRoPSI0ODUiPjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj5IZWFkZXI8L0I+IGFwcGVhcnMgbmVzdGVkIHVuZGVyIDxCPkludm9pY2U8L0I+IGluIHRoZSBPdXRsaW5lIHZpZXcuPC9MST4KLSAgPExJPkNsb3NlIHRoaXMgZmlsZSwgYW5kIHJlc3BvbmQgPEI+WWVzPC9CPiB3aGVuIHByb21wdGVkIHRvIHNhdmUgdGhlIGNoYW5nZXMuPC9MST4KLSAgPExJPlJlb3BlbiB0aGUgZmlsZSBhbmQgdmVyaWZ5IHRoZSBjaGFuZ2VzIHdlcmUgc2F2ZWQuPC9MST4KLSAgPExJPkNsb3NlIHRoZSBmaWxlLiBWZXJpZnkgbm8gc2F2ZSBjaGFuZ2VzIHByb21wdCBhcHBlYXJzLjwvTEk+Ci08L1VMPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gYW4gaW1wb3J0ZWQgRFREPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5GaWxlLSZndDtOZXctJmd0O1hNTCBGaWxlPC9CPi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIENyZWF0ZSBhIFhNTCBGaWxlIHdpemFyZCBhcHBlYXJzLjwvTEk+Ci0gICAgPExJPlNlbGVjdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGUgZnJvbSBhIERURCBmaWxlPC9CPjwvTEk+Ci0gICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5mcm9tTG9jYWxEVEQ8L0I+PC9MST4KLSAgICAgICAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2U8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+U2VsZWN0IHRoZSA8Qj5JbXBvcnQgRmlsZTwvQj4gYnV0dG9uCi0gICAgPFVMPgotICAgICAgICA8TEk+VXNlIHRoZSBCcm93c2UgYnV0dG9uIHRvIGZpbmQgPEI+dGVzdGNhc2UuZHRkPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXIuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5Xb3VsZCBiZSBuaWNlIGlmIHRoaXMgd2VyZSBhbHJlYWR5IGZpbGxlZCBpbi4gT3BlbiBhIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICAgICAgPExJPlNlbGVjdCA8Qj5GaW5pc2g8L0I+IHRvIGNsb3NlIHRoZSBJbXBvcnQgRmlsZSB3aXphcmQ8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4KLSAgICA8TEk+RXhwYW5kIDxCPlhNTHRlc3QyPC9CPiBhbmQgdGhlbiBzZWxlY3QgPEI+dGVzdGNhc2UuZHRkPC9CPi4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldhcyBleHBlY3RpbmcgdG8gc2VlIHRoZSBpbXBvcnRlZCBmaWxlIHNlbGVjdGVkIGluIHRoZSBXb3JrYmVuY2ggZmlsZXMgbGlzdCwgYnV0IGl0IHdhc24ndC4gT3BlbiBhIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+R28gdG8gdGhlIE5leHQgcGFnZS48L0xJPgotICAgIDxMST5TZWxlY3QgPEI+dGVzdGNhc2U8L0I+IGFzIHRoZSBSb290IEVsZW1lbnQuPC9MST4KLSAgICA8TEk+QWNjZXB0IHRoZSBkZWZhdWx0IHRvIDxCPkNyZWF0ZSByZXF1aXJlZCBjb250ZW50IG9ubHk8L0I+LjwvTEk+Ci0gICAgPExJPlZlcmlmeSA8Qj50ZXN0Y2FzZS5kdGQ8L0I+IGFwcGVhcnMgYXMgdGhlIFN5c3RlbSBJZC48L0xJPgotICAgIDxMST5TZWxlY3QgRmluaXNoLiBWZXJpZnkgPEI+ZnJvbUxvY2FsRFRELnhtbDwvQj4gYXBwZWFycyBpbiB0aGUgWE1MIEVkaXRvci4gVmVyaWZ5IHRoZSBTb3VyY2UgcGFnZSBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmc6IDxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjI5MCIgc3JjPSJpbXBvcnREVEQuanBnIiB3aWR0aD0iNjYwIj48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBPdXRsaW5lIHZpZXcgYW5kIHRoZSBmb3JtYXR0aW5nIGluZGVudGF0aW9uIHJlZmxlY3QgdGhlIHByb3BlciBlbGVtZW50L3RhZyBoaWVyYXJjaHkuIEhlcmUncyB3aGF0IHRoZSBPdXRsaW5lIHZpZXcgc2hvdWxkIGxvb2sgbGlrZTo8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIyOTciIHNyYz0ib3V0bGluZTEuanBnIiB3aWR0aD0iNjU1Ij48L0xJPgotICA8TEk+VmVyaWZ5IHNlbGVjdGlvbiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIAotICAgICAgICBhbmQgUHJvcGVydGllcyB2aWV3LgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjbGljayB3aXRoaW4gdGhlIDxCPmhlYWRlcjwvQj4gc3RhcnQgdGFnLiAKLSAgICAgICAgICAgIFZlcmlmeSA8Qj5oZWFkZXI8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBPdXRsaW5lIHZpZXcgYW5kIGluIHRoZSBEZXNpZ24gCi0gICAgICAgICAgICBwYWdlIGFuZCB0aGF0IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcyBhbmQgcHJvcGVydHkgdmFsdWVzIGFwcGVhciBpbiB0aGUgCi0gICAgICAgICAgICBQcm9wZXJ0aWVzIHZpZXc6Ci0gICAgICAgIDxUQUJMRSBib3JkZXI9IjEiPgotICAgICAgICAgICAgPFRCT0RZPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPjxCPlByb3BlcnR5PC9CPjwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPjxCPlZhbHVlPC9CPjwvVEQ+Ci0gICAgICAgICAgICAgICAgPC9UUj4KLSAgICAgICAgICAgICAgICA8VFI+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iMTAwIj5jYXRlZ29yeTwvVEQ+Ci0gICAgICAgICAgICAgICAgICAgIDxURCB3aWR0aD0iNzYiPndlYnRvb2w8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+bnVtYmVyPC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+aWR2YWx1ZTA8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3RhdGU8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij4mbmJzcDs8L1REPgotICAgICAgICAgICAgICAgIDwvVFI+Ci0gICAgICAgICAgICAgICAgPFRSPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9IjEwMCI+c3ViQ2F0ZWdvcnk8L1REPgotICAgICAgICAgICAgICAgICAgICA8VEQgd2lkdGg9Ijc2Ij5BY2Nlc3NhYmlsaXR5PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgICAgIDxUUj4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSIxMDAiPnN1YlN1YkNhdGVnb3J5PC9URD4KLSAgICAgICAgICAgICAgICAgICAgPFREIHdpZHRoPSI3NiI+Jm5ic3A7PC9URD4KLSAgICAgICAgICAgICAgICA8L1RSPgotICAgICAgICAgICAgPC9UQk9EWT4KLSAgICAgICAgPC9UQUJMRT4KLSAgICAgICAgPC9MST4KLQk8TEk+RnJvbSB0aGUgT3V0bGluZSB2aWV3LCBzZWxlY3QgdGhlIDxCPnRlc3RCdWNrZXQ8L0I+IHRhZy4KLSAgICAgICAgICAgIFZlcmlmeSA8Qj50ZXN0QnVja2V0PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIHRoZSBjdXJyZW50IG1hcmtlcgotICAgICAgICAgICAgaW4gdGhlIGxlZnRoYW5kIG1hcmdpbiBvZiB0aGUgU291cmNlIHBhZ2UgaW5kaWNhdGVzIHRoZSByYW5nZSBvZiB0aGUgCi0gICAgICAgICAgICA8Qj50ZXN0QnVja2V0PC9CPiB0YWcuIFRoZSBQcm9wZXJ0aWVzIHZpZXcgc2hvdWxkIHNob3cgYSBwcm9wZXJ0eSBvZiA8Qj50eXBlPC9CPgotICAgICAgICAgICAgd2l0aCBhIHZhbHVlIG9mIDxCPkNvbXBvbmVudFRlc3Q8L0I+LgotICAgICAgICA8L0xJPgotICAgIDwvVUw+ICAgCi0gICAgPC9MST4gCi0gICAgPExJPlZlcmlmeSBlZGl0IHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRoZSBEZXNpZ24gcGFnZSwgU291cmNlIHBhZ2UsIGFuZCAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3IChmb2N1cyBoZXJlIGlzIG9uIGFkZGluZyBhdHRyaWJ1dGVzIGFuZCBhdHRyaWJ1dGUgdmFsdWVzKS4KLSAgICA8VUw+Ci0gICAgICAgIDxMST5Gcm9tIHRoZSBTb3VyY2UgcGFnZSwgdXNlIGNvbnRlbnQgYXNzaXN0IHRvIGluc2VydCBhbiBhdHRyaWJ1dGUgYW5kIGF0dHJpYnV0ZSB2YWx1ZQotICAgICAgICAgICAgZm9yIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy4KLSAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIGFmdGVyIHRoZSA8Qj5jYXRlZ29yeTwvQj4gYXR0cmlidXRlIGluIHRoZSA8Qj5oZWFkZXI8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlR5cGUgPEI+c3BhY2U8L0I+IGFuZCB0aGVuIGhpdCBwcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0LjwvTEk+Ci0gICAgICAgICAgICA8TEk+VmVyaWZ5IG9ubHkgPEI+c3RhdGU8L0I+IGFuZCA8Qj5zdWJTdWJDYXRlZ29yeTwvQj4gYXBwZWFyIGluIHRoZSBwcm9wb3NhbCBsaXN0IChjb250ZW50IGFzc2lzdCBpcyBzbWFydCBlbm91Z2ggbm90IHRvIGxpc3QgYW55IGF0dHJpYnV0ZXMgdGhhdCBhbHJlYWR5IGV4aXN0IGluIHRoZSBzdGFydCB0YWcgc2luY2UgYXR0cmlidXRlcyBjYW4gb25seSBhcHBlYXIgb25jZS4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+c3RhdGU8L0I+LjwvTEk+ICAgCi0gICAgICAgICAgICA8TEk+VmVyaWZ5IDxCPnN0YXRlPSJVbmRlckNvbnN0cnVjdGlvbiI8L0I+IGlzIGluc2VydGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoY29udGVudCBhc3Npc3QgYXV0b21hdGljYWxseSBpbnNlcnRzIGFueSBkZWZhdWx0IHZhbHVlcy4gPEZPTlQgY29sb3I9IiMwMDAwZmYiPkNvb2whPC9GT05UPikuIFZlcmlmeSB0aGUgRGVzaWduIHBhZ2UgYW5kIFByb3BlcnRpZXMgdmlldyByZWZsZWN0IHRoaXMgY2hhbmdlLjwvTEk+ICAgICAgICAgCi0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgICAgICA8TEk+RnJvbSB0aGUgUHJvcGVydGllcyB2aWV3LCB1cGRhdGUgdGhlIDxCPnN0YXRlPC9CPiBhdHRyaWJ1dGUgdmFsdWUgdG8gIlVuZGVyUmV2aWV3IiAKLSAgICAgICAgICAgIChhIHB1bGxkb3duIGxpc3Qgb2YgdmFsdWVzIHNob3VsZCBiZSBhdmFpbGFibGUpLiBWZXJpZnkgdGhlIGNoYW5nZSBpcyByZWZsZWN0ZWQKLSAgICAgICAgICAgIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcy4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIERlc2lnbiBwYWdlLCBhZGQgYW4gYXR0cmlidXRlIGFuZCBhdHRyaWJ1dGUgdmFsdWUgdG8gdGhlIDxCPmhlYWRlcjwvQj4gdGFnLgotICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgPExJPkJyaW5nIHVwIHRoZSBwb3B1cCBtZW51IGZvciB0aGUgPEI+aGVhZGVyPC9CPiB0YWcuPC9MST4KLSAgICAgICAgICAgIDxMST5TZWxlY3QgPEI+QWRkIEF0dHJpYnV0ZS0+c3ViU3ViQ2F0ZWdvcnk8L0I+IGZyb20gdGhlIHBvcHVwIG1lbnUgKGl0J3Mgc21hcnQKLSAgICAgICAgICAgICAgICBlbm91Z2ggdG8ga25vdyB3aGljaCBhdHRyaWJ1dGVzIGhhdmVuJ3QgYmVlbiBzcGVjaWZpZWQgeWV0IC4uLiBsaWtlIGNvbnRlbnQgCi0gICAgICAgICAgICAgICAgYXNzaXN0LiBDb29sISkuPC9MST4KLSAgICAgICAgICAgIDxMST5UeXBlIGluIGEgdmFsdWUgb2YgPEI+S2V5Ym9hcmQgc3VwcG9ydDwvQj4uPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGNoYW5nZSBpcyByZWZsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCBQcm9wZXJ0aWVzIHZpZXc8L0xJPgotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICA8L1VMPgotICAgIDwvTEk+Ci08L1VMPgotPFA+PEI+T3BlbiBhbiBYTUwgRmlsZSB0aGF0IHJlZmVyZW5jZXMgYSByZW1vdGUgRFREPC9CPjwvUD4KLTxVTD4KLSAgICA8TEk+T3BlbiB0aGUgPEI+V2lyZWxlc3MueG1sPC9CPiBmaWxlLjwvTEk+Ci0gICAgPExJPlZlcmlmeSBpdCBsb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgaW4gdGhlIFNvdXJjZSBwYWdlOjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjIzOSIgc3JjPSJ3aXJlbGVzcy5qcGciIHdpZHRoPSI2NTYiPjwvTEk+Ci0gICAgPExJPlZlcmlmeSB0aGUgT3V0bGluZSB2aWV3IGFuZCB0aGUgZm9ybWF0dGluZyBpbmRlbnRhdGlvbiByZWZsZWN0IHRoZSBwcm9wZXIgCi0gICAgICAgIGVsZW1lbnQvdGFnIGhpZXJhcmNoeS4gSGVyZSdzIHdoYXQgdGhlIE91dGxpbmUgdmlldyBzaG91bGQgbG9vayBsaWtlOiA8SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSIxODkiIHNyYz0ib3V0bGluZTIuanBnIiB3aWR0aD0iNjU2Ij48L0xJPiAKLSAgICA8TEk+VmVyaWZ5IGNvbnRlbnQgYXNzaXN0IDxGT05UIGNvbG9yPSIjZmYwMDAwIj5EZWZlY3QgMTc2Mzc5IChpbiB2ZXJpZnkgc3RhdGUsIGJ1dCBzdGlsbCBub3Qgd29ya2luZyk8L0ZPTlQ+LjwvTEk+Ci0gICAgICAgIDxVTD4KLSAgICAgICAgICAgPExJPkNyZWF0ZSBhIG5ldyBsaW5lIGFmdGVyIHRoZSA8Qj53bWw8L0I+IHN0YXJ0IHRhZy48L0xJPgotICAgICAgICAgICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdCBvbiB0aGUgbmV3IGxpbmUuPC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhciBhcyBwcm9wb3NhbHMgKGluIHRoZSBvcmRlciBzaG93bik6IAotICAgICAgICAgICAgICAgPFVMPgotICAgICAgICAgICAgICAgICAgIDxMST5oZWFkPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+dGVtcGxhdGU8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jYXJkPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgICAgICAgIDxMST5DcmVhdGUgYSBuZXcgbGluZSBhZnRlciB0aGUgPEI+d21sPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlR5cGUgYSBzcGFjZSBiZWZvcmUgdGhlIGVuZGluZyBkZWxpbWl0ZXIgb24gdGhlIGNhcmQgc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgIDxMST5Qcm9tcHQgZm9yIGNvbnRlbnQgYXNzaXN0PC9MST4KLSAgICAgICAgICAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIGFwcGVhciBhcyBwcm9wb3NhbHMgKG5vdCBuZWNlc3NhcmlseSBpbiB0aGUKLSAgICAgICAgICAgICAgIG9yZGVyIHNob3duKS4gCi0gICAgICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICAgICAgICAgPExJPnRpdGxlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+bmV3Y29udGV4dDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9yZGVyZWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST54bWw6bGFuZzwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9uZW50ZXJiYWNrd2FyZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPm9udGltZXI8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5pZDwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPmNsYXNzPC9MST4KLSAgICAgICAgICAgICAgIDwvVUw+Ci0gICAgICAgICAgIDwvTEk+Ci0gICAgICAgICAgIDxMST5Qb3NpdGlvbiB0aGUgY3Vyc29yIHdpdGhpbiB0aGUgPEI+bWV0aG9kPC9CPiBhdHRyaWJ1dGUgdmFsdWUgaW4gdGhlIDxCPmdvPC9CPiBzdGFydCB0YWcuPC9MST4KLSAgICAgICAgICAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Q8L0xJPgotICAgICAgICAgICA8TEk+VmVyaWZ5IDxCPnBvc3Q8L0I+IGFuZCA8Qj5nZXQ8L0I+IGFwcGVhciBhcyBwcm9wb3NhbHMuPC9MST4KLSAgICAgICAgPC9VTD4KLSAgICA8TEk+VmVyaWZ5IHNlbGVjdGlvbiBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiB0aGUgRGVzaWduIHBhZ2UsIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIAotICAgICAgICBhbmQgUHJvcGVydGllcyB2aWV3LgotICAgIDxVTD4KLSAgICAgICAgPExJPkZyb20gdGhlIFNvdXJjZSBwYWdlLCBjbGljayB3aXRoaW4gdGhlIDxCPmNhcmQ8L0I+IHN0YXJ0IHRhZy4gCi0gICAgICAgICAgICBWZXJpZnkgPEI+Y2FyZDwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIE91dGxpbmUgdmlldyBhbmQgaW4gdGhlIERlc2lnbiAKLSAgICAgICAgICAgIHBhZ2UgYW5kIHRoYXQgdGhlIGNvbnRlbnQgYXNzaXN0IHByb3Bvc2FscyBsaXN0ZWQgYWJvdmUgZm9yIHRoZQotICAgICAgICAgICAgPEI+Y2FyZDwvQj4gdGFnIGFwcGVhciBhcyBwcm9wZXJ0aWVzIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE5vIHZhbHVlcyBzaG91bGQgYXBwZWFyIGZvciB0aGVzZSBwcm9wZXJ0aWVzLjwvTEk+Ci0JPExJPkZyb20gdGhlIE91dGxpbmUgdmlldywgc2VsZWN0IHRoZSA8Qj5wb3N0ZmllbGQ8L0I+IHRhZy4KLSAgICAgICAgICAgIFZlcmlmeSA8Qj5wb3N0ZmllbGQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBEZXNpZ24gcGFnZSBhbmQgdGhlIGN1cnJlbnQgbWFya2VyCi0gICAgICAgICAgICBpbiB0aGUgbGVmdGhhbmQgbWFyZ2luIG9mIHRoZSBTb3VyY2UgcGFnZSBpbmRpY2F0ZXMgdGhlIHJhbmdlIG9mIHRoZSAKLSAgICAgICAgICAgIDxCPnBvc3RmaWVsZDwvQj4gdGFnLiBUaGUgUHJvcGVydGllcyB2aWV3IHNob3VsZCBzaG93IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcywKLSAgICAgICAgICAgIG5vbmUgb2Ygd2hpY2ggc2hvdWxkIGhhdmUgYSB2YWx1ZToKLSAgICAgICAgICAgICAgIDxVTD4KLSAgICAgICAgICAgICAgICAgICA8TEk+bmFtZTwvTEk+Ci0gICAgICAgICAgICAgICAgICAgPExJPnZhbHVlPC9MST4KLSAgICAgICAgICAgICAgICAgICA8TEk+aWQ8L0xJPgotICAgICAgICAgICAgICAgICAgIDxMST5jbGFzczwvTEk+Ci0gICAgICAgICAgICAgICA8L1VMPgotICAgICAgICAgICA8L0xJPgotICAgIDwvVUw+ICAgCi0gICAgPC9MST4KLSAgICA8TEk+VmVyaWZ5IGVkaXQgc3luY2hyb25pemF0aW9uIGJldHdlZW4gdGhlIERlc2lnbiBwYWdlLCBTb3VyY2UgcGFnZSwgT3V0bGluZSB2aWV3LCBhbmQgCi0gICAgICAgIFByb3BlcnRpZXMgdmlldyAoZm9jdXMgaGVyZSBpcyBvbiBhZGRpbmcgZWxlbWVudHMvdGFncykuCi0gICAgPFVMPgotICAgICAgICA8TEk+RnJvbSB0aGUgU291cmNlIHBhZ2UsIGNvcHkgYW5kIHBhc3RlIHRoZSA8Qj5jYXJkPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+UG9zaXRpb24gdGhlIGN1cnNvciBpbiB0aGUgPEI+Y2FyZDwvQj4gc3RhcnQgdGFnLjwvTEk+Ci0gICAgICAgICAgICA8TEk+Tm90aWNlIHRoZSByYW5nZSBvZiB0aGUgPEI+Y2FyZDwvQj4gdGFnIGluIHRoZSBsZWZ0aGFuZCBtYXJnaW4gYXJlYS48L0xJPgotICAgICAgICAgICAgPExJPkNvcHkgdGhpcyByYW5nZSBvZiBsaW5lcyB1c2luZyB0aGUgPEI+RWRpdC0+Q29weTwvQj4gcHVsbGRvd24gbWVudSBzZWxlY3Rpb24uPC9MST4KLSAgICAgICAgICAgIDxMST5QYXN0ZSBhZnRlciB0aGUgPEI+Y2FyZDwvQj4gZW5kIHRhZyB1c2luZyBDdHJsK1YuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIGFwcHJvcHJpYXRlIGxpbmVzIHdlcmUgcGFzdGVkIG4gdGhlIFNvdXJjZSBwYWdlLgotICAgICAgICAgICAgICAgIFZlcmlmeSB0aGUgRGVzaWduIHBhZ2UsIE91dGxpbmUgdmlldywgYW5kIHRoZSBQcm9wZXJ0aWVzIAotICAgICAgICAgICAgICAgIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS48L0xJPiAgICAgICAgIAotICAgICAgICAgICAgPC9VTD4KLSAgICAgICAgPC9MST4KLSAgICAgICAgPExJPkZyb20gdGhlIERlc2lnbiBwYWdlLCBhZGQgYW5vdGhlciA8Qj5jYXJkPC9CPiB0YWcuCi0gICAgICAgICAgICA8VUw+Ci0gICAgICAgICAgICA8TEk+QnJpbmcgdXAgdGhlIHBvcHVwIG1lbnUgZm9yIHRoZSA8Qj53bWw8L0I+IHRhZy48L0xJPgotICAgICAgICAgICAgPExJPlNlbGVjdCA8Qj5BZGQgQ2hpbGQtPmNhcmQ8L0I+IGZyb20gdGhlIHBvcHVwIG1lbnUuPC9MST4KLSAgICAgICAgICAgIDxMST5WZXJpZnkgdGhlIFNvdXJjZSBwYWdlLCBPdXRsaW5lIHZpZXcsIGFuZCB0aGUgUHJvcGVydGllcwotICAgICAgICAgICAgICAgIHZpZXcgcmVmbGVjdCB0aGlzIGNoYW5nZS4gTk9URTogaXQgc2hvdWxkIGhhdmUgZ2VuZXJhdGVkIG91dAotICAgICAgICAgICAgICAgIHRoZSBzYW1lIHRoaW5nIGFzIHRoZSBvcmlnaW5hbCBjYXJkIHRhZywgd2l0aCB0aGUgZXhjZXB0aW9uCi0gICAgICAgICAgICAgICAgdGhhdCBhIDxCPm1ldGhvZDwvQj4gYXR0cmlidXRlIHNob3VsZCBub3QgZXhpc3QgaW4gdGhlIDxCPmdvPC9CPiBzdGFydCB0YWcuIDwvTEk+Ci0gICAgICAgICAgICA8L1VMPgotICAgICAgICA8L0xJPgotICAgIDwvVUw+Ci0gICAgPC9MST4gCi08L1VMPgotPFA+PEI+Q3JlYXRlIGFuZCBWYWxpZGF0ZSBhbiBYTUwgRmlsZSBmcm9tIGEgc2NoZW1hPC9CPjxCUj4KLQotPFA+KHRoZXNlIHN0ZXBzIGFyZSB0YWtlbiBmcm9tIHRoZSAnRGVzaWduJyBzbW9rZSB0ZXN0LCBleGNlcHQgdGhlIFNvdXJjZSBQYWdlIGlzIHRoZSBmb2N1cyk8L1A+Ci08dWw+Ci08bGk+Ci1SaWdodCBtb3VzZSBidXR0b24gMiBvbiB0aGUgUHVyY2hhc2VPcmRlci54c2QgYW5kIHNlbGVjdCA8Yj5DcmVhdGUgWE1MCi1GaWxlPC9iPi48L2xpPgotCi08bGk+Ci1BY2NlcHQgdGhlIGRlZmF1bHQgZmlsZSBuYW1lcy48L2xpPgotCi08bGk+Ci1JbiB0aGUgU2VsZWN0IFJvb3QgRWxlbWVudCBwYWdlLCBjaG9vc2UgPGI+cHVyY2hhc2VPcmRlcjwvYj4gYXMgcm9vdCBlbGVtZW50LjwvbGk+Ci0KLTxsaT4KLUNob29zZSA8Yj5DcmVhdGUgcmVxdWlyZWQgYW5kIG9wdGlvbmFsIGNvbnRlbnQ8L2I+IHRvIGNyZWF0ZSBhIG1pbmltYWwKLWRvY3VtZW50LjwvbGk+Ci0KLTxsaT4KLUVudGVyIDxiPnBvPC9iPiBhcyB0aGUgbmFtZXNwYWNlIHByZWZpeC48L2xpPgotCi08bGk+T24gRmluaXNoLCBhIFB1cmNoYXNlT3JkZXIueG1sIGlzIGNyZWF0ZWQgYW5kIHRoZSBYTUwgRWRpdG9yIGlzIG9wZW5lZC4gKFNlbGVjdCBTb3VyY2UgUGFnZSBpZiBub3QgYWxyZWFkeSB0aGVyZS4pPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgc2hvdWxkIGJlIGludmFsaWQuPC9saT4KLQotPGxpPgotRG91YmxlIGNsaWNrIG9uIHRoZSBlcnJvciBtZXNzYWdlLiBJdCBzaG91bGQgYmUgcG9zaXRpb25lZCB0byB0aGUgbGluZQotaW4gZXJyb3IsIGkuZS4gdGhlIDxiPnBhcnROdW08L2I+IGF0dHJpYnV0ZS4gSXQgaXMgaW52YWxpZCBiZWNhdXNlIHRoZQotdmFsdWUgaXMgbm90IHNldCB0byBtYXRjaCB0aGUgWE1MIHNjaGVtYSBwYXR0ZXJuIGZhY2V0ICJkMy1bQS1aXXsyfSIgKDMKLWRpZ2l0cyBmb2xsb3dlZCBieSAyIGNoYXJhY3RlcnMpLjwvbGk+Ci0KLTxsaT5JbiB0aGUgU291cmNlIFZpZXcsIGxvY2F0ZSB0aGUgPGI+cGFydE51bTwvYj4gYXR0cmlidXRlIHVuZGVyIGVsZW1lbnQgaXRlbS4KLUVudGVyIHRoZSB2YWx1ZSAzMzMtQUIuPC9saT4KLQotPGxpPgotUnVuIFZhbGlkYXRlLiBUaGUgUHVyY2hhc2VPcmRlci54bWwgZG9jdW1lbnQgc2hvdWxkIG5vdyBiZSB2YWxpZC48L2xpPgotPC9VTD4KLTxVTD4KLSAgPExJPgotICA8SFI+PC9MST4KLSAgPGxpPlBsYWNlIHRoZSBjdXJzb3IgYWZ0ZXIgdGhlICZsdDtpdGVtcyZndDsgdGFnIGFuZCBiZXN1cmUgIml0ZW0iIGlzIAotICBsaXN0ZWQgaW4gdGhlIGNvbnRlbnQgYXNzaXN0IGxpc3QuIDwvbGk+Ci08bGk+UmVuYW1lIHRoZSBwdXJjaGFzZU9yZGVyLnhzZCB0bywgc2F5LCBwdXJjaGFzZU9yZGVySE9MRC54c2Q8L2xpPgotPGxpPlZlcmlmeSB0aGF0IGNvbnRlbnQgYXNzaXN0IHN0aWxsIGdpdmVzIHlvdSAiaXRlbSIgYXMgYWJvdmUuPC9saT4KLTxsaT5Ob3cgc2VsZWN0IHRoZSAiUmVsb2FkIERlcGVuZGFuY2llcyIgYnV0dG9uLjwvbGk+Ci08bGk+VmVyaWZ5IHRoYXQgbm93IGNvbnRlbnQgYXNzaXN0IG5vIGxvbmdlciBsaXN0cyBhbnkgaXRlbXMgb3RoZXIgCi10aGF0IHRoZSBtYWNybyAiY29tbWVudCIuPC9saT4KLTxsaT5SZXBlYXQgbWFraW5nIHB1cmNoYXNlT3JkZXIueHNkIHdvcmthYmxlIGFnYWluLjwvbGk+Ci08L3VsPgotPFA+PC9QPjxQPjwvUD48UD48L1A+PFA+PC9QPjxQPjwvUD48L1A+Ci08UD48Qj5PcGVuIGFuIFhNTCBGaWxlIGZvciBhIHNoaXBwZWQgRFREIGNhdGFsb2cgZW50cnk8L0I+PEJSPgotPEJSPgotW3B1dCBpbiBvcHRpb25hbCBzZWN0aW9uIC4uIHRoaXMgaXNuJ3QgYSBjdXN0b21lciBzY2VuZXJpb108QlI+Ci1UbyB2ZXJpZnkgdGhhdCBzaGlwcGVkIERURHMgYXJlIHdvcmtpbmc6PEJSPgotPFVMPgotPExJPgotVXNlIGEgd2ViIHByb2plY3Qgd2l0aCBhIHN0YW5kYXJkIHdlYi54bWwgZmlsZSBpbiBpdC4gQmUgc3VyZSAKLXRoZXJlIGlzIG5vIHdlYi1hcHBfMl8yLmR0ZCBmaWxlIGluIHRoZSBkaXJlY3RvcnkuIEluIHRoZSB3ZWIueG1sIGZpbGUgCi1pdHNlbGYsIG1hbmdsZSB0aGUgd2ViLWFwcF8yXzIuZHRkIGZpbGVuYW1lIGluIHRoZSBzeXN0ZW0gaWQgYSBsaXR0bGUsIHN1Y2ggYXMgCi1jaGFuZ2UgaXQgdG8geGViLWFwcF8yXzIuZHRkIHRvIGJlIHN1cmUgaXQgY2FuJ3QgYmUgZm91bmQgdmlhIHRoZQotbm9ybWFsIGh0dHAgbWV0aG9kIChUaGlzIGlzbid0IHJlYWxseSBuZWNlc3NhcnkgZm9yIHRoZSBmdW50aW9uIHRvIHdvcmssCi1pdHMganVzdCB0byBiZSBzdXJlIG9ubHkgdGhlIGNhdGFsb2cgZnVuY3Rpb24gaXMgaW4gZWZmZWN0KS4KLTwvTEk+Ci08TEk+Ci1HbyB0byB0aGUgcHJlZmVyZW5jZXMgcGFnZSwgYW5kIG9wZW4gdGhlIFhNTCBDYXRhbG9nLiBWZXJpZnkgdGhlcmUgCi1pcyBhbiBlbnRyeSBmb3IgLS8vU3VuIE1pY3Jvc3lzdGVtcywgSW5jLi8vRFREIFdlYiBBcHBsaWNhdGlvbiAyLjIvL0VOLgotPC9MST4KLTxMST4KLU9uY2UgYWxsIHRoZSBwcmVwIHdvcmsgaXMgZG9uZSAoZmlsZXMgZGVsZXRlZCwgdGV4dCBtb2RpZmllZCksIHlvdSBzaG91bGQgCi1leGl0IGFuZCByZXN0YXJ0IEVjbGlwc2UgdG8gYmUgc3VyZSB5b3UgaGF2ZSBhIGZyZXNoIHN0YXJ0LgotPC9MST4KLTxMST4KLU9wZW4gdGhlIHdlYi54bWwgZmlsZSBhbmQgYmUgc3VyZSB0aGF0IGNvbnRlbnQgYXNzaXN0IHdvcmtzIGZvciB0aGF0IGZpbGUuCi1Gb3IgZXhhbXBsZSwgcmlnaHQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgJmx0Oy9kaXNwbGF5LW5hbWUmZ3Q7IHRhZywgY3RybC1zcGFjZSAKLXNob3VsZCBwcm92aWRlIGEgbG9uZyBsaXN0IG9mIGVsZW1lbnRzLCBzdGFydGluZyB3aXRoIHNlcnZsZXQsIHNlcnZsZXQtbWFwcGluZywgZXRjLgotVGhpcyBpbmRpY2F0ZXMgdGhlIHNoaXBwZWQgRFREIGZ1bmN0aW9uIGlzIHdvcmtpbmcgYW5kIGNvbmZpZ3VyZWQgCi1jb3JyZWN0bHkgKGF0IGxlYXN0IGZvciB0aGUgd2ViLnhtbCBmaWxlKS4KLTwvTEk+Ci08L1VMPgotPC9QPgotPFA+PEI+Q3JlYXRlIGFuIFhNTCBGaWxlIGZyb20gYSBuZXcgRFREIGNhdGFsb2cgZW50cnk8L0I+PEJSPjxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLQotPGI+VGhlIGZvbGxvd2luZyBjb21lcyBkaXJlY3RseSBmcm9tIHRoZSAnRGVzaWduJyBTbW9rZSBUZXN0OiBYTUwgQ2F0YWxvZyBmb3IgWE1MIFNjaGVtYTwvYj4KLTx1bD4KLTxsaT4KLVJ1biBWYWxpZGF0ZSBvbiBQdXJjaGFzZU9yZGVyLnhtbCB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQ8L2xpPgotCi08bGk+Ci1DcmVhdGUgYSBuZXcgcHJvamVjdCwgWE1MVGVzdDI8L2xpPgotCi08bGk+Ci1Nb3ZlIHRoZSBQdXJjaGFzZU9yZGVyLnhzZCBpbnRvIFhNTFRlc3QyLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZSBvbiBQdXJjaGFzZU9yZGVyLnhtbC4gWW91IHdpbGwgbm90aWNlIHRoYXQgaXQgaXMgbm8gbG9uZ2VyCi12YWxpZC4gVGhlIGVycm9yIG1lc3NhZ2Ugc2hvdWxkIGdpdmUgeW91IGEgaGludCB0aGF0IHRoZSBmaWxlIFB1cmNoYXNlT3JkZXIueHNkCi1jYW4gbm8gbG9uZ2VyIGJlIGZvdW5kLjwvbGk+Ci0KLTxsaT4KLU9wZW4gdGhlIFdpbmRvdy0+UHJlZmVyZW5jZXMgYW5kIHNlbGVjdCB0aGUgWE1MIENhdGFsb2cuPC9saT4KLQotPGxpPgotRW50ZXIgdGhlIHBhaXIgPGI+SWQgPSBQdXJjaGFzZU9yZGVyLnhzZCBVcmkgPSBmOlxlY2xpcHNlXFhNTFRlc3QyXFB1cmNoYXNlT3JkZXIueHNkPC9iPjwvbGk+Ci0KLTxicj5PciBhbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSBhIHJlbGF0aXZlIHBhdGggdG8gdGhlIGluc3RhbGwgZGlyZWN0b3J5Ci1vZiB0aGUgd29ya2JlbmNoIGFzIGZvbGxvd3M6Ci08YnI+PGI+SWQgPSBQdXJjaGFzZU9yZGVyLnhzZCBVcmkgPSAuXFhNTFRlc3QyXFB1cmNoYXNlT3JkZXIueHNkPC9iPgotPGxpPgotQ2xpY2sgb24gdGhlIFJlbG9hZCBidXR0b24gdG8gcmVsb2FkIHRoZSBjYXRhbG9nIHNldHRpbmdzLjwvbGk+Ci0KLTxsaT4KLVJ1biBWYWxpZGF0ZS4gVGhlIFB1cmNoYXNlT3JkZXIueG1sIGRvY3VtZW50IHNob3VsZCBub3cgYmUgdmFsaWQuPC9saT4KLTwvdWw+Ci08IS0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICAgICAgICAgICAgICAgICAgU2F2ZS9WYWxpZGF0ZSB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U2F2ZS9WYWxpZGF0ZSB0ZXN0IGNhc2VzPC9GT05UPjwvSDI+Ci08UD48Qj5TYXZpbmcgYW4gWE1MIEZpbGU8L0I+PEJSPgotKE5PVEU6IHRoZSA8Qj5JZGVudGlmeSBhIGxvY2FsIERURDwvQj4gdGVzdCBjYXNlIHRlc3RzIHRoZSBzYXZlIHByb21wdCBvbiBhIGZpbGUgY2xvc2UuKTwvUD4KLTxVTD4KLSAgPExJPklmIGFueSBmaWxlcyBhcmUgb3Blbiwgc2VsZWN0IDxCPkZpbGUtJmd0O0Nsb3NlIEFsbDwvQj4gKG9yIDxCPkN0cmwrU2hpZnQrRjQ8L0I+KSB0byBjbG9zZSB0aGVtLjwvTEk+Ci0gIDxMST5PcGVuIGFueSB4bWwgZmlsZSBpbiB0aGUgPEI+WE1MVGVzdDI8L0I+IHByb2plY3QuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIChuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9uKToKLSAgPFVMPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlPC9CPiBpcyBkaXNhYmxlZC48L0xJPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlIEFsbDwvQj4gaXMgZGlzYWJsZWQuPC9MST4KLSAgICA8TEk+PEI+RmlsZS0mZ3Q7U2F2ZSBBczwvQj4gaXMgZW5hYmxlZC48L0xJPgotICAgIDxMST50aGUgPEI+U2F2ZTwvQj4gdG9vbGJhciBidXR0b24gKGEgZGlza2V0dGUpIGlzIGRpc2FibGVkLjwvTEk+Ci0gICAgPExJPnRoZSA8Qj5TYXZlIEFzPC9CPiB0b29sYmFyIGJ1dHRvbiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPlNhdmU8L0I+IGlzIGRpc2FibGVkIG9uIHRoZSBTb3VyY2UgcG9wdXAgbWVudS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPldvdWxkIGJlIG5pY2UgaWYgdGhlIERlc2lnbiBwb3B1cCBtZW51IGFsc28gaGFkIGEgU2F2ZSBzZWxlY3Rpb24uIE9wZW4gYSBzdWdnZXN0aW9uIGRlZmVjdC48L0ZPTlQ+PC9MST4KLSAgICA8TEk+bm8gPEI+KjwvQj4gYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSBpbiB0aGUgU291cmNlIHBhZ2UuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgZm9sbG93aW5nIChjaGFuZ2VzLW1hZGUgY29uZGl0aW9uKToKLSAgPFVMPgotICAgIDxMST48Qj5GaWxlLSZndDtTYXZlPC9CPiBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPkZpbGUtJmd0O1NhdmUgQWxsPC9CPiBpcyBlbmFibGVkPC9MST4KLSAgICA8TEk+dGhlIDxCPlNhdmU8L0I+IHRvb2xiYXIgYnV0dG9uIChhIGRpc2tldHRlKSBpcyBlbmFibGVkLjwvTEk+Ci0gICAgPExJPjxCPlNhdmU8L0I+IGlzIGVuYWJsZWQgb24gdGhlIFNvdXJjZSBwb3B1cCBtZW51LjwvTEk+Ci0gICAgPExJPmEgPEI+KjwvQj4gYXBwZWFycyBpbiB0aGUgZmlsZSB0YWIuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+SGl0IDxCPkN0cmwrUzwvQj4uIDwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBjaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+RmlsZS0mZ3Q7U2F2ZSBBbGw8Qj48L0I+LjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIG5vLWNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5LjwvTEk+Ci0gIDxMST5NYWtlIGEgY2hhbmdlIGluIHRoZSBQcm9wZXJ0aWVzIHZpZXcuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgY2hhbmdlcy1tYWRlIGNvbmRpdGlvbnMgYXBwbHkuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5TYXZlPC9CPiBmcm9tIHRoZSBTb3VyY2UgcG9wdXAgbWVudS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZSBuby1jaGFuZ2VzLW1hZGUgY29uZGl0aW9ucyBhcHBseS48L0xJPgotICA8TEk+Q2xvc2UgYW5kIHRoZW4gcmVvcGVuIHRoZSBmaWxlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMgdGhhdCB3ZXJlIG1hZGUgaW4gdGhlIHByZXZpb3VzIHN0ZXBzIGFwcGVhciBpbiB0aGUgRGVzaWduIGFuZCBTb3VyY2UgcGFnZXMuPC9MST4KLTwvVUw+Ci08UD48Qj5TYXZpbmcgYW4gWE1MIEZpbGUgYWNyb3NzIG11bHRpcGxlIHBlcnNwZWN0aXZlcyAob3B0aW9uYWwpPC9CPjwvUD4KLTxVTD4KLSAgPExJPk9wZW4gYW55IHhtbCBmaWxlIGluIHRoZSA8Qj5YTUxUZXN0MjwvQj4gcHJvamVjdC48L0xJPgotICA8TEk+TWFrZSBhIGNoYW5nZSB0byB0aGUgZmlsZS48L0xJPgotICA8TEk+T3BlbiBhbm90aGVyIFhNTCBQZXJzcGVjdGl2ZSBieToKLSAgPFVMPgotICAgIDxMST48Qj5zZWxlY3RpbmcgUGVyc3BlY3RpdmUtJmd0O09wZW4tJmd0O090aGVyLi4uPC9CPjwvTEk+Ci0gICAgPExJPndoaWxlIGhvbGRpbmcgZG93biB0aGUgPEI+U2hpZnQ8L0I+IGtleSwgc2VsZWN0IDxCPlhNTDwvQj4uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+VmVyaWZ5IGFub3RoZXIgWE1MIFBlcnNwZWN0aXZlIGJ1dHRvbiBhcHBlYXJzIGluIHRoZSBsZWZ0aGFuZCBzaWRlIG9mIHRoZSBXb3JrYmVuY2ggdG8gcmVwcmVzZW50IHRoaXMgc2Vjb25kIHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5PcGVuIHRoZSBzYW1lIHhtbCBmaWxlIGFzIGluIHRoZSBmaXJzdCBzdGVwIGFib3ZlLjwvTEk+Ci0gIDxMST5WZXJpZnkgdGhlIGNoYW5nZXMtbWFkZSBjb25kaXRpb25zIGFwcGx5IGluIGJvdGggWE1MIFBlcnNwZWN0aXZlcyBhbmQgdmVyaWZ5IHRoYXQgdGhlIGNoYW5nZXMgbWFkZSB0byB0aGUgZmlsZSBpbiB0aGUgZmlyc3QgcGVyc3BlY3RpdmUgYXBwZWFyIGluIHRoZSBzYW1lIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPlRoZSAqIG5ldmVyIGFwcGVhcnMgaW4gdGhlIGZpbGUgdGFiIG9mIHRoZSBzZWNvbmQgcGVyc3BlY3RpdmUgZXZlbiB3aGVuIG1ha2UgY2hhbmdlcyB0byB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlLiBUYWxrIHRvIERhdmlkLjwvRk9OVD48L0xJPgotICA8TEk+TWFrZSBzb21lIGNoYW5nZXMgdG8gdGhlIGZpbGUgaW4gdGhlIHNlY29uZCBwZXJzcGVjdGl2ZS48L0xJPgotICA8TEk+VmVyaWZ5IHRoZXNlIGNoYW5nZXMgYXBwZWFyIGluIHRoZSBzYW1lIGZpbGUgaW4gdGhlIGZpcnN0IHBlcnNwZWN0aXZlLjwvTEk+Ci0gIDxMST5DbG9zZSB0aGUgZmlsZSBpbiB0aGUgc2Vjb25kIHBlcnNwZWN0aXZlIGFuZCByZXNwb25kIDxCPlllczwvQj4gdG8gdGhlIHNhdmUgY2hhbmdlcyBwcm9tcHQuPC9MST4KLSAgPExJPlZlcmlmeSB0aGUgbm8tY2hhbmdlcy1tYWRlIGNvbmRpdGlvbiBhcHBsaWVzIGluIHRoZSBmaXJzdCBwZXJzcGVjdGl2ZS48L0xJPgotPC9VTD4KLTxQPjxCPlZhbGlkYXRpbmcgYSBub24gd2VsbCBmb3JtZWQgWE1MIEZpbGUgKG5vIERURC9TY2hlbWEpPC9CPjxCUj4KLShOT1RFOiBpdCdzIGltcG9ydGFudCB0aGF0IHRoZSBmb2xsb3dpbmcgYmUgdHlwZWQgaW4uIFRoaXMgdGVzdCBjYXNlIHRyaWVzIHRvIGNvdmVyIHNvbWUgb2YgdGhlIG1vcmUgY29tbW9uIGVycm9ycyB0aGF0IHJlbmRlciBhbiBYTUwgZmlsZSBhcyBub3QgYmVpbmcgd2VsbC1mb3JtZWQuIEl0IGlzIG5vdCBpbnRlbmRlZCB0byB2ZXJpZnkgdGhhdCBhbGwgcG9zc2libGUgZXJyb3JzIGFyZSBiZWluZyBkZXRlY3RlZCBhbmQgZ3JhY2VmdWxseSBoYW5kbGVkLiApPC9QPgotPFVMPgotICA8TEk+U2VsZWN0IHRoZSA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+PExJPkFjY2VwdCB0aGUgZGVmYXVsdCB0byA8Qj5DcmVhdGUgYSBuZXcgWE1MIGZpbGU8L0I+PC9MST4KLSAgPExJPkdvIHRvIHRoZSBOZXh0IHBhZ2UKLSAgICA8VUw+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+WE1MVGVzdDI8L0I+IGFzIHRoZSBmb2xkZXI8L0xJPgotICAgICAgICA8TEk+U3BlY2lmeSBhIEZpbGUgbmFtZSBvZiA8Qj5Ob25XZWxsRm9ybWVkPC9CPjwvTEk+Ci0gICAgICAgIDxMST5TZWxlY3QgPEI+RmluaXNoPC9CPjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3QuPC9MST4KLSAgPExJPlNlbGVjdCA8Qj4mbHQ7P3htbCB2ZXJzaW9uPSZxdW90OzEuMCZxdW90OyBlbmNvZGluZz0mcXVvdDtVVEYtOCZxdW90Oz8mZ3Q7LjwvQj48L0xJPgotICA8TEk+Q3JlYXRlIGEgbmV3IGxpbmUgYWZ0ZXIgdGhlIFhNTCBkZWNsYXJhdGlvbi48L0xJPgotICA8TEk+UHJvbXB0IGZvciBjb250ZW50IGFzc2lzdC48L0xJPgotICA8TEk+U2VsZWN0IGNvbW1lbnQuPC9MST4KLSAgPExJPkVtYmVkIG1vcmUgdGhhbiAyIGNvbnNlY3V0aXZlIGRhc2hlcyBpbiB0aGUgY29tbWVudC4gCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogbW9yZSB0aGFuIDIgY29uc2VjdXRpdmUgZGFzaGVzIGNhbiBub3QgYmUgZW1iZWRkZWQgd2l0aGluIGEgY29tbWVudCk8L0ZPTlQ+PC9MST4KLSAgPExJPlR5cGUgaW4gdGhlIHJlbWFpbmluZyBsaW5lcyBhcyBzaG93biBiZWxvdzogCi0gICAgICAgIDxGT05UIGNvbG9yPSIjZmYwMDAwIj4oSSBjYW4ndCBzaG93IHRoZSBsaW5lcyB1bnRpbCBkZWZlY3QgMTc3NzU1IGlzIGZpeGVkIC4uLiB1bnRpbCB0aGVuLCBoZXJlJ3MgdGhlIHR5cGUgb2YgdGhpbmdzIHRoYXQgY2F1c2UgCi0gICAgICAgIGEgZG9jdW1lbnQgdG8gbm90IGJlIHdlbGwtZm9ybWVkKTo8L0ZPTlQ+Ci0gIDxVTD4KLSAgICA8TEk+Y3JlYXRlIGEgc3RhcnQgYW5kIGVuZCB0YWcgdGhhdCBkb24ndCBtYXRjaCBpbiB0aGVpciBjYXNlIHNlbnNpdGl2aXR5IAotICAgICAgICAoZS5nLiwgJmx0O3RhZyZndDsgYW5kICZsdDsvVGFnJmd0OykuIDwvTEk+Ci0gICAgPExJPmNyZWF0ZSBhIHN0YXJ0IGFuZCBlbmQgdGFnIHdoZXJlIHRoZSBzdGFydCB0YWcgY29udGFpbnMgYW4gYXR0cmlidXRlIHZhbHVlIHRoYXQgaXMgbm90IAotICAgICAgICBlbmNsb3NlZCBpbiBxdW90ZXMuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogdGhpcyBpcyBwZXJtaXR0ZWQgaW4gSFRNTCwgYnV0IG5vdCBYTUwpPC9GT05UPjwvTEk+Ci0gICAgPExJPmNyZWF0ZSB0YWdzIHRoYXQgYXJlIG5vdCBwcm9wZXJseSBuZXN0ZWQuCi0gICAgICAgIDxGT05UIGNvbG9yPSIjMDAwMGZmIj4oTk9URTogYSBjaGlsZCB0YWcgbXVzdCBiZSBjb21wbGV0ZWQgYmVmb3JlIGl0cyBwYXJlbnQgdGFnKTwvRk9OVD48L0xJPgotICAgIDxMST5jcmVhdGUgYSBzdGFydCB0YWcgd2l0aG91dCBhIGNvcnJlc29uZGluZyBlbmQgdGFnLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IGFsbCBzdGFydCB0YWdzIG11c3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZW5kIHRhZyB1bmxlc3MgdGhlIAotICAgICAgICB0YWcgaXMgYW4gZW1wdHkgdGFnLCBpbiB3aGljaCBjYXNlIHRoZSBzaG9ydGhhbmQgdmVyc2lvbiBjYW4gYmUgdXNlZCAoJmx0O3Nob3J0VGFnLyZndDspKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+ZG8gbm90IHByb3ZpZGUgYW4gYXR0cmlidXRlIHZhbHVlICg9JnF1b3Q7dmFsdWUmcXVvdDspLgotICAgICAgICA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+KE5PVEU6IHRoaXMgaXMgcGVybWl0dGVkIGluIEhUTUwgZm9yIHRob3NlIGF0dHJpYnV0ZXMgdGhhdCBoYXZlIAotICAgICAgICBvbmx5IG9uZSB2YWx1ZSwgYnV0IGl0J3Mgbm90IHZhbGlkIGluIFhNTCk8L0ZPTlQ+PC9MST4KLSAgICAgPExJPmRlZmluZSBhbiBhdHRyaWJ1dGUgbW9yZSB0aGFuIG9uY2UgaW4gYSBzdGFydCB0YWcuPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+U2F2ZSB0aGUgZmlsZS48L0xJPgotICA8TEk+VmVyaWZ5IGVycm9ycyBhcmUgbGlzdGVkIGluIHRoZSBUYXNrcyB2aWV3IGZvciB0aGUgYWJvdmUgdmlvbGF0aW9ucyBhbmQgdGhhdCBlcnJvciBtYXJrZXJzIGFwcGVhciBvbiB0aGUgYXBwcm9wcmlhdGUgCi0gICAgICAgICBsaW5lcyBpbiB0aGUgU291cmNlIHBhZ2UuIDxGT05UIGNvbG9yPSIjZmYwMDAwIj5JJ20gbm90IHN1cmUgaG93IHRoZSBEZXNpZ24gcGFnZSBoYW5kbGVzIGFueSBvZiB0aGVzZSB2aW9sYXRpb25zIAotICAgICAgICAgYW5kIHdoYXQgd2lsbCBhcHBlYXIgaW4gdGhlIE91dGxpbmUgYW5kIFByb3BlcnRpZXMgdmlldy4gVGFsayB0byBDcmFpZyBhbmQgRGF2aWQuPC9GT05UPjwvTEk+Ci0gIDxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBzYXZlZC48L0xJPgotPC9VTD4KLQotCi08UD48Qj5WYWxpZGF0ZSBhbiBYTUwgRmlsZSBiYXNlZCBvbiBhIERURDwvQj48L1A+Ci08VUw+Ci08TEk+T3BlbiA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+LjwvTEk+Ci08TEk+RGVsZXRlIGEgY2hhcmFjdGVyIGZyb20gb25lIG9mIHRoZSBzdGFydCB0YWdzIChtaXN0eXBpbmcgYSB0YWcgaXMgbm90IHVuY29tbW9uKS48L0xJPgotPExJPlByb21wdCBmb3IgY29udGVudCBhc3Npc3Qgd2l0aGluIHRoZSBiYWQgdGFnLiBWZXJpZnkgYSBtZXNzYWdlIGFwcGVhcnMgaW4gdGhlIHN0YXR1cyBhcmVhCi1vZiB0aGUgV29ya2JlbmNoIGluZGljYXRpbmcgdGhhdCB0aGUgYmFkIHRhZyBpcyBhbiB1bmtub3duIHRhZy48L0xJPgotPExJPlNlbGVjdCB0aGUgPEI+VmFsaWRhdGU8L0I+IHRvb2xiYXIgYnV0dG9uLjwvTEk+Ci08TEk+VmVyaWZ5IGFuIGVycm9yIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcgYW5kIGFuIGVycm9yIG1hcmtlciBhcHBlYXJzIGluIHRoZSBTb3VyY2UgcGFnZQotdG8gZmxhZyB0aGUgaW52YWxpZCB0YWcuPC9MST4KLTxMST5TZWxlY3QgPEI+RWRpdC0+VW5kbzwvQj4gZnJvbSB0aGUgU291cmNlIHBhZ2UuPC9MST4KLTxMST5WZXJpZnkgdGhlIGJhZCB0YWcgZXJyb3Igbm8gbG9uZ2VyIGFwcGVhcnMgaW4gdGhlIFRhc2tzIHZpZXcuPC9MST4KLTxMST5SZW1vdmUgdGhlIDxCPkhlYWRlcjwvQj4gZW5kIHRhZyBmcm9tIHRoZSBTb3VyY2UgcGFnZS48L0xJPgotPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLTxMST5WZXJpZnkgYW4gZXJyb3IgYXBwZWFycyBpbiB0aGUgVGFza3MgdmlldyBpbmRpY2F0aW5nIHRoYXQgdGhlIDxCPkhlYWRlcjwvQj4gZW5kIHRhZyBpcyBtaXNzaW5nPC9MST4KLTxMST5DbG9zZSB0aGUgZmlsZSwgcmVzcG9uZGluZyA8Qj5ZZXM8L0I+IHRvIHRoZSBzYXZlIGNoYW5nZXMgcHJvbXB0LjwvTEk+Ci08TEk+RG91YmxlLWNsaWNrIG9uIHRoZSBlcnJvciBpbiB0aGUgVGFza3MgdmlldywgYW5kIHZlcmlmeSA8Qj5mcm9tU2NyYXRjaC54bWw8L0I+IG9wZW5zIHRvIHRoZQotYXBwcm9wcmlhdGUgbGluZSBpbiB0aGUgU291cmNlIHBhZ2Ugb2YgdGhlIFhNTCBFZGl0b3IuPC9MST4KLTxMST5IZXJlJ3Mgc29tZSBvdGhlciB2aW9sYXRpb25zIHRoYXQgY2FuIGJlIGF0dGVtcHRlZDoKLTxVTD4KLTxMST5TcGVjaWZ5IGEgYmFkIGF0dHJpYnV0ZS48L0xJPgotPExJPlNwZWNpZnkgYSBiYWQgYXR0cmlidXRlIHZhbHVlLjwvTEk+Ci08TEk+U3BlY2lmeSBjaGlsZCB0YWdzIG91dCBvZiBzZXF1ZW5jaW5nIG9yZGVyPC9MST4KLTxMST5WaW9sYXRlIHRoZSBvY2N1cnJlbmNlIGluZGljYXRvciBmb3IgYSB0YWcgKGUuZy4sIGlmIHRoZSBEVEQgc2hvd3MgPywgdGhlbiBvbmx5Ci0wIG9yIDEgb2NjdXJyZW5jZXMgb2YgdGhlIHRhZyBpcyBwZXJtaXR0ZWQpLgotPC9VTD48L0xJPgotPExJPlNhdmUgdGhlIGZpbGUuPC9MST4KLTxMST5WZXJpZnkgZXJyb3JzIGFyZSBsaXN0ZWQgaW4gdGhlIFRhc2tzIHZpZXcgZm9yIHRoZSBhYm92ZSB2aW9sYXRpb25zIGFuZCB0aGF0IGVycm9yIG1hcmtlcnMgYXBwZWFyIG9uIHRoZSBhcHByb3ByaWF0ZSAKLWxpbmVzIGluIHRoZSBTb3VyY2UgcGFnZS4gPEZPTlQgY29sb3I9IiNmZjAwMDAiPkknbSBub3Qgc3VyZSBob3cgdGhlIERlc2lnbiBwYWdlIGhhbmRsZXMgYW55IG9mIHRoZXNlIHZpb2xhdGlvbnMgCi1hbmQgd2hhdCB3aWxsIGFwcGVhciBpbiB0aGUgT3V0bGluZSBhbmQgUHJvcGVydGllcyB2aWV3LiBUYWxrIHRvIENyYWlnIGFuZCBEYXZpZC48L0ZPTlQ+PC9MST4KLTxMST5SZW9wZW4gdGhlIGZpbGUgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBzYXZlZC48L0xJPgotPC9VTD4KLQotPCEtLSAgcmVtb3ZlZCBzaW5jZSBkb25lIGVsc2V3aGVyZSBhcyBwYXJ0IG9mIG90aGVyIHNjZW5lcmlvcwotPFA+PEI+VmFsaWRhdGUgYW4gWE1MIEZpbGUgYmFzZWQgb24gYSBTY2hlbWE8L0I+PEJSPgotLS0+Ci08SU1HIGJvcmRlcj0iMCIgaGVpZ2h0PSI2MyIgc3JjPSJ1MDExYW5pLmdpZiIgd2lkdGg9IjYzIj48L1A+Ci0KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBTcGVjaWZpYyB0ZXN0IGNhc2VzCi0gICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLT4KLTxIMj48Qj48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+U291cmNlIFNwZWNpZmljIHRlc3QgY2FzZXMgKG9wdGlvbmFsKTwvRk9OVD48L0I+PC9IMj4KLTxQPjxCPlVzaW5nIHRoZSBBdXRvIENvbXBsZXRpb24gQ29udGVudCBBc3Npc3QgUHJlZmVyZW5jZTwvQj48QlI+Ci08VUw+Ci08TEk+T3BlbiBhIGFueSBYTUwgZmlsZSB0aGF0IGhhcyBlbm91Z2ggdGFncyB0byBwcm92aWRlIHN5bnRheCBoaWdodGxpZ2h0aW5nLjwvTEk+Ci08TEk+V2hpbGUgdGhhdCBmaWxlIGlzIGxlZnQgb3BlbiwgZ28gdG8gdGhlIFByZWZlcmVuY2VzIHBhZ2UsIHNlbGVjdAotWE1MIEVkaXRvciwgdGhlbiBTb3VyY2UgU3R5bGVzLiA8L0xJPgotPExJPk9uIHRoYXQgcGFnZSwgdXNlIHRoZSBtb3VzZSB0byAic2VsZWN0IiBhIHRhZyBuYW1lLiBUaGUgdGFnIG5hbWUgaXMgbm90IGxpdGVyYWxseQotc2VsZWN0ZWQsIGJ1dCB3aGVuIHlvdSBjbGljayBvbiBhbiBlbGVtZW50IGluIHRoZSBleGFtcGxlIHRleHQsIHRoZSBsaXN0Ci1hYm92ZSBpdCB3aWxsIGRpc3BsYXkgdGhlIHR5cGUgb2YgZWxlbWVudCBpdCBpcywgYW5kIHdoYXQgaXRzIGN1cnJlbnQgY29sb3JzIGFyZS48L0xJPgotPExJPkZvciAidGFnIG5hbWUiLCBzZWxlY3QgdGhlIGJvbGQgY2hlY2sgYm94LiBUaGVuIHByZXNzIEFwcGx5LCBhbmQgeW91IHNob3VsZAotc2VlIHRoZSBjaGFuZ2UgdGFrZSBlZmZlY3QgaW4geW91ciBhY3RpdmUgZWRpdG9yLjwvTEk+Ci08TEk+U2VsZWN0ICJEZWZhdWx0cyIgYW5kIG1ha2Ugc3VyZSB0aGUgdGFnIG5hbWVzIGFyZSBzZXQgYmFjayB0byBub3QgYm9sZC48L0xJPgotPC9VTD4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLTxQPjxCPkRvdWJsZS1DbGlja2luZyBXaXRoaW4gdGhlIFNvdXJjZTwvQj4gPEJSPgotKE5PVEU6IGlmIHlvdSBjb250aW51ZSB0byBkb3VibGUtY2xpY2sgYXQgYSBnaXZlbiBjdXJzb3IgcG9zaXRpb24sIHRoZSBzZWxlY3Rpb24gYXJlYSB3aWxsIGNvbnRpbnVlIHRvIGV4cGFuZC4gV2hlbiB0aGUgbWF4aW11bSByZWdpb24gYXJlYSBoYXMgYmVlbiByZWFjaGVkLCB0aGUgbmV4dCBkb3VibGUtY2xpY2sgd2lsbCBjYXVzZSB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLiBTbywgdGhlIHNlbGVjdGlvbnMgd2lsbCB3cmFwL2N5Y2xlLiA8Rk9OVCBjb2xvcj0iIzAwMDBmZiI+Q29vbCE8L0ZPTlQ+KS48L1A+Ci08VUw+Ci0gIDxMST5PcGVuIDxCPkpvYkRlc2MueG1sPC9CPi48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiB0YWcgY29udGVudDoKLSAgPFVMPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPk1pZGRsZXdhcmU8L0I+IG9uIGxpbmUgNy48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+TWlkZGxld2FyZTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBhbmQgRGVzaWduIHBhZ2VzIGFuZCA8Qj5CdXNUeXBlPC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3LiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+Tm90IHN1cmUgd2hhdCB0aGUgUHJvcGVydGllcyB2aWV3IGlzIHN1cHBvc2VkIHRvIHNob3cuIEl0IGdvZXMgYmxhbmsuIFNlZSBkZWZlY3QgMTc3NzUzLiBBbHNvLCA8Qj5NaWRkbGV3YXJlPC9CPiB3YXNuJ3Qgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFzIGhhZCBleHBlY3RlZC4gVGhlIERlc2lnbiBwYWdlIG9ubHkgc2VlbXMgdG8gc3RheSBpbiBzeW5jIGF0IHRoZSBlbGVtZW50L3RhZyBsZXZlbCBsaWtlIHRoZSBPdXRsaW5lIHZpZXcuIFRhbGsgdG8gQ3JhaWcgYWJvdXQgdGhpcy48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGFnYWluIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgPEI+QXBwbGljYXRpb24gYW5kIE1pZGRsZXdhcmUgU29mdHdhcmU8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgYW5kIERlc2lnbiBwYWdlcyBhbmQgPEI+QnVzVHlwZTwvQj4gcmVtYWlucyB0byBiZSB0aGUgb25seSB0aGluZyBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3LjwvTEk+Ci0gICAgPExJPkRvdWJsZS1jbGlja2luZyBhZ2FpbiB3aWxsIGNhdXNlIGN5Y2xpbmcgYmFjayB0byB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uLjwvTEk+Ci0gIDwvVUw+PC9MST4KLSAgPExJPkRvdWJsZS1jbGlja2luZyB3aXRoaW4gYSB0YWcgbmFtZToKLSAgPFVMPgotICAgIDxMST5Eb3VibGUtY2xpY2sgd2l0aGluIDxCPkhvd1RvQXBwbHk8L0I+IG9uIGxpbmUgNjEuPC9MST4KLSAgICA8TEk+VmVyaWZ5IDxCPkhvd1RvQXBwbHk8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSwgRGVzaWduIHBhZ2UsIGFuZCBPdXRsaW5lIHZpZXcuIAotICAgICAgICA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIHRoZSAKLSAgICAgICAgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGFnYWluIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi48L0xJPgotICAgIDxMST5WZXJpZnkgdGhlIHdob2xlIDxCPkhvd1RvQXBwbHk8L0I+IHN0YXJ0IHRhZyAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKSBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlLiA8Qj5Ib3dUb0FwcGx5PC9CPiBzaG91bGQgcmVtYWluIHNlbGVjdGVkIGluCi0gICAgICAgIHRoZSBEZXNpZ24gcGFnZSBhbmQgT3V0bGluZSB2aWV3LiA8Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotICA8TEk+RG91YmxlLWNsaWNraW5nIHdpdGhpbiBhbiBhdHRyaWJ1dGUgbmFtZToKLSAgPFVMPgotICAgIDxMST5UeXBlIDxCPkN0cmwrRW5kPC9CPiB0byBwb3NpdGlvbiB0aGUgY3Vyc29yIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5kaXN0cmlidXRlPC9CPiBvbiBsaW5lIDYxLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZTwvQj4gaXMgc2VsZWN0ZWQgCi0gICAgICAgIGluIHRoZSBTb3VyY2UgcGFnZSBhbmQgPEI+SG93VG9BcHBseTwvQj4gaXMgc2VsZWN0ZWQgaW4gdGhlIERlc2lnbiBwYWdlIGFuZCBPdXRsaW5lIAotICAgICAgICB2aWV3LiA8Qj5jbGFzczwvQj4sIDxCPmRpc3RyaWJ1dGU8L0I+LCA8Qj5pZDwvQj4sIGFuZCA8Qj5uYW1lPC9CPiBzaG91bGQgYXBwZWFyIGluIAotICAgICAgICB0aGUgUHJvcGVydGllcyB2aWV3LiBPbmx5IDxCPmRpc3RyaWJ1dGU8L0I+IHNob3VsZCBzaG93IGEgdmFsdWUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IDxCPmRpc3RyaWJ1dGU9ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPiAgICAgICAgICAgICAgICAgCi0gICAgPExJPkRvdWJsZS1jbGljayBhdCB0aGUgc2FtZSBjdXJzb3IgcG9zaXRpb24uIFZlcmlmeSB0aGUgd2hvbGUgPEI+SG93VG9BcHBseTwvQj4gc3RhcnQgdGFnIGlzIHNlbGVjdGVkIGluIHRoZSBTb3VyY2UgcGFnZSAoaW5jbHVkaW5nIGl0cyBkZWxpbWl0ZXJzKS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotIDxMST5Eb3VibGUtY2xpY2tpbmcgd2l0aGluIGFuIGF0dHJpYnV0ZSB2YWx1ZToKLSAgPFVMPgotICAgIDxMST5UeXBlIDxCPkN0cmwrSG9tZTwvQj4gdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLjwvTEk+Ci0gICAgPExJPlNjcm9sbCBkb3duIHN1Y2ggdGhhdCBsaW5lIDYxIGlzIHZpc2libGUuPC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNrIHdpdGhpbiA8Qj5pbnRlcm5hbDwvQj4gb24gbGluZSA2MS4gVmVyaWZ5IDxCPmludGVybmFsPC9CPiBpcyBzZWxlY3RlZCAKLSAgICAgICAgaW4gdGhlIFNvdXJjZSBwYWdlIGFuZCA8Qj5Ib3dUb0FwcGx5PC9CPiBpcyBzZWxlY3RlZCBpbiB0aGUgRGVzaWduIHBhZ2UgYW5kIE91dGxpbmUgCi0gICAgICAgIHZpZXcuIDxCPmNsYXNzPC9CPiwgPEI+ZGlzdHJpYnV0ZTwvQj4sIDxCPmlkPC9CPiwgYW5kIDxCPm5hbWU8L0I+IHNob3VsZCBhcHBlYXIgaW4gCi0gICAgICAgIHRoZSBQcm9wZXJ0aWVzIHZpZXcuIE9ubHkgPEI+ZGlzdHJpYnV0ZTwvQj4gc2hvdWxkIHNob3cgYSB2YWx1ZS48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ImludGVybmFsIjwvQj4gaXMKLSAgICAgICAgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZS4gTm90aGluZyBzaG91bGQgY2hhbmdlIGluIHRoZSBEZXNpZ24gcGFnZSBvciB2aWV3cy48L0xJPgotICAgIDxMST5Eb3VibGUtY2xpY2sgYXQgdGhlIHNhbWUgY3Vyc29yIHBvc2l0aW9uLiBWZXJpZnkgPEI+ZGlzdHJpYnV0ZT0iaW50ZXJuYWwiPC9CPiBpcwotICAgICAgICBzZWxlY3RlZCBpbiB0aGUgU291cmNlLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLjwvTEk+ICAgICAgICAgICAgICAgICAKLSAgICA8TEk+RG91YmxlLWNsaWNrIGF0IHRoZSBzYW1lIGN1cnNvciBwb3NpdGlvbi4gVmVyaWZ5IHRoZSB3aG9sZSA8Qj5Ib3dUb0FwcGx5PC9CPiBzdGFydCB0YWcgaXMgc2VsZWN0ZWQgaW4gdGhlIFNvdXJjZSBwYWdlIChpbmNsdWRpbmcgaXRzIGRlbGltaXRlcnMpLiBOb3RoaW5nIHNob3VsZCBjaGFuZ2UgaW4gdGhlIERlc2lnbiBwYWdlIG9yIHZpZXdzLiA8Qj48Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+SG93VG9BcHBseTwvRk9OVD48L0I+PEZPTlQgY29sb3I9IiNmZjAwMDAiPiBhbmQgYWxsIGRlc2NlbmRlbnRzIGJlY29tZSBzZWxlY3RlZCBpbiB0aGUgT3V0bGluZSB2aWV3IChkZWZlY3QgMTc3NzUyKS4gQWxzbywgdGhlIFByb3BlcnRpZXMgdmlldyBzaG93cyBubyBwcm9wZXJ0aWVzIChkZWZlY3QgMTc3NzUzKS48L0ZPTlQ+PC9MST4KLSAgICA8TEk+RG91YmxlLWNsaWNraW5nIGFnYWluIHdpbGwgY2F1c2UgY3ljbGluZyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBzZWxlY3Rpb24uPC9MST4KLSAgPC9VTD48L0xJPgotPC9VTD4KLQotPFA+PEI+Rm9ybWF0dGluZyBhIEZpbGUgQ3JlYXRlZCBieSBEaWZmZXJlbnQgRWRpdG9yczwvQj48QlI+Ci08dWw+Ci08bGk+Ci1JbXBvcnQgdGhlIDxiPkpvYlBvc3RpbmcuZHRkPC9iPiBhbmQgPGI+Sm9iRGVzYy54bWw8L2I+PC9saT4KLQotPGxpPgotT3BlbiB0aGUgSm9iRGVzYy54bWwuIENoZWNrIHRoZSBzb3VyY2UgZm9yIGluZGVudGF0aW9uIHRvIHNlZSBpZiBpdCBwcmVzZXJ2ZXMKLXRoZSB3aGl0ZSBzcGFjZSBmcm9tIHRoZSBvcmlnaW5hbCBkb2N1bWVudC48L2xpPgotCi08bGk+Ci1UaGUgb3JpZ25hbCBkb2N1bWVudCB1c2VzIHNwYWNlcyBhbmQgdGFicywgc28gdGhlIGZvcm1hdHRpbmcgd2lsbCBhcHBlYXIgYSBsaXR0bGUgd3JvbmcuCi1CeSB1c2luZyB0aGUgcmlnaHQvbGVmdCBhcnJvd3MsIHZlcmlmeSB0aGF0IHNvbWUgc3BhY2UgaXMgc3BhY2VzIGFuZCBzb21lIHNwYWNlCi1pcyB0YWIgY2hhcmFjdGVycy48L2xpPgotPExJPlVzZSAnZm9ybWF0IGRvY3VtZW50JyB0byBiZSBzdXJlIGl0IGZvcm1hdHMuIDwvTEk+Ci08TEk+VGhlIGRlZmF1bHQgaXMgdG8gZm9ybWF0IHdpdGggc3BhY2VzIC4uLiB2ZXJpZnkgb25seSBzcGFjZXMgcmVtYWluIGluIGZpbGUsIG5vdCB0YWIgY2hhcmFjdGVzLiAKLShKdXN0IGEgbGl0dGxlIG1vdmVtZW50IHdpdGggdGhlIGFycm93IGtleXMgc2hvdWxkIHN1ZmZpY2UuPC9MST4KLTxMST5HbyB0byB0aGUgcHJlZmVyZW5jZSBwYWdlIHRvIGNoYW5nZSB0aGUgZm9ybWF0IHNldHRpbmdzIGZvciB0aGUgWE1MIEVkaXRvcgotdG8gdXNlIHRoZSB0YWIgY2hhcmFjdGVyIGluc3RlYWQgb2YgNCBzcGFjZXMuIFdoaWxlIHRoZXJlLCB2ZXJpZnkgdGhhdCB0aGUgZGlhbG9nCi13aWxsIG5vdCBhbGxvdyBvdGhlciB2YWx1ZXMgdG8gYmUgaW50ZXJlZCBleGNlcHQgIndoaXRlc3BhY2UiIC4uLidcdCdzIGFuZCBibGFua3MuCi08L0xJPgotPExJPkZvcm1hdCB0aGUgZG9jdW1lbnQgYWdhaW4gYW5kIGJlIHN1cmUgdGhpcyB0aW1lIHRhYiBjaGFyYWN0ZXJzIHdlcmUgdXNlZC48L0xJPgotPC91bD4KLTxJTUcgYm9yZGVyPSIwIiBoZWlnaHQ9IjYzIiBzcmM9InUwMTFhbmkuZ2lmIiB3aWR0aD0iNjMiPjwvUD4KLTwhLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE90aGVyIHRlc3QgY2FzZXMKLSAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tPgotPEgyPjxCPjxGT05UIGNvbG9yPSIjMDAwMGZmIj5PdGhlciB0ZXN0IGNhc2VzPC9GT05UPjwvQj48L0gyPgotPFA+PEI+QXNzb2NpYXRlIHRoZSBYTUwgRWRpdG9yIHRvIGEgbmV3IGZpbGUgdHlwZTwvQj48L1A+Ci08VUw+Ci0gIDxMST5XaW5kb3ctJmd0O1ByZWZlcmVuY2VzPEI+PC9CPi48L0xJPgotICA8TEk+RXhwYW5kIDxCPldvcmtiZW5jaDwvQj4uPC9MST4KLSAgPExJPlNlbGVjdCA8Qj5GaWxlIEVkaXRvcnM8L0I+LjwvTEk+Ci0gIDxMST5TZWxlY3QgdGhlIDxCPkFkZDwvQj4gYnV0dG9uIHRvIGFkZCBhIG5ldyBmaWxlIHR5cGUuPC9MST4KLSAgPExJPlNwZWNpZnkgYSBmaWxlIHR5cGUgb2YgPEI+Ki5zZXQ8L0I+IGFuZCB0aGVuIGNsb3NlIHRoZSBBZGQgZGlhbG9nLjwvTEk+Ci0gIDxMST5WZXJpZnkgPEI+Ki5zZXQ8L0I+IGlzIHNlbGVjdGVkIGluIHRoZSBsaXN0IG9mIGZpbGUgdHlwZXMuPC9MST4KLSAgPExJPlNlbGVjdCB0aGUgPEI+QWRkPC9CPiBidXR0b24gdG8gYXNzb2NpYXRlIHRoZSBYTUwgRWRpdG9yIHRvIHRoZSBuZXcgZmlsZSB0eXBlLjwvTEk+Ci0gIDxMST5TZWxlY3QgPEI+WE1MIEVkaXRvcjwvQj4gZnJvbSB0aGUgbGlzdCBvZiBlZGl0b3JzLiBWZXJpZnkgaXQgYXBwZWFycyB3aXRoIGl0cyBvd24gc3BlY2lhbCBpY29uLiBDbG9zZSB0aGUgZGlhbG9nLiA8Rk9OVCBjb2xvcj0iI2ZmMDAwMCI+Tk9URTogd2FpdGluZyB0byBoZWFyIGJhY2sgZnJvbSBPVEkgb24gaG93IGNhbiBwcmV2ZW50IDIgWE1MIEVkaXRvciBlbnRyaWVzIGZyb20gYXBwZWFyaW5nIGluIHRoZSBsaXN0LjwvRk9OVD48L0xJPgotICA8TEk+VmVyaWZ5IDxCPlhNTCBFZGl0b3I8L0I+IGFwcGVhcnMgYXMgdGhlIGRlZmF1bHQgZWRpdG9yIG5vdyBmb3IgdGhlIDxCPiouc2V0PC9CPiBmaWxlIHR5cGUuPC9MST4KLSAgPExJPk9wZW4gPEI+Z290Y2hhVENCZWFucy5zZXQ8L0I+IGZyb20gdGhlIE5hdmlnYXRvciB2aWV3LiBWZXJpZnkgaXQgb3BlbnMgdG8gdGhlIFhNTCBFZGl0b3IuPC9MST4KLTwvVUw+Ci08UD48Rk9OVCBjb2xvcj0iIzAwMDBmZiI+VEhFIEVORCE8L0ZPTlQ+PC9QPgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTXVsdGlOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NzIxMTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9NdWx0aU5vbkRlZmF1bHQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTxIRUFEPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+Ci08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS02Ij4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9FbmNvZGluZy5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MGU0ZmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob0VuY29kaW5nLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvTm9ybWFsTm9uRGVmYXVsdC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob3JtYWxOb25EZWZhdWx0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMzBjOWYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvaHRtbC9Ob3JtYWxOb25EZWZhdWx0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2h0bWwvbm9xdW90ZXMuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjU0Y2RlNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9odG1sL25vcXVvdGVzLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi08SEVBRD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPgotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PXRleHQvaHRtbDsgY2hhcnNldD1VVEYtOD4KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTYiPgotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+Ci08VElUTEU+SUJNIFdlYlNwaGVyZSBTYW1wbGVzIEdhbGxlcnk8L1RJVExFPgotPC9IRUFEPgotPEZSQU1FU0VUIHJvd3M9Ijc1LCoiPgotCTxGUkFNRSBuYW1lPSJ0aXRsZSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9UaXRsZS5odG1sIiBzY3JvbGxpbmc9Ik5PIiBub3Jlc2l6ZT4KLQk8RlJBTUVTRVQgY29scz0iMTYwLCoiPgotCQk8RlJBTUUgbmFtZT0ibWVudSIgbWFyZ2lud2lkdGg9IjAiIG1hcmdpbmhlaWdodD0iMCIgZnJhbWVib3JkZXI9IjAiIHNyYz0iTWVudS9NZW51Lmh0bWwiIHNjcm9sbGluZz0iYXV0byIgbm9yZXNpemU+Ci0JCTxGUkFNRSBuYW1lPSJtYWluIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIiBmcmFtZWJvcmRlcj0iMCIgc3JjPSJNZW51L1NhbXBsZXNJbnRyby5odG1sIiBzY3JvbGxpbmc9ImF1dG8iIG5vcmVzaXplPgotCTwvRlJBTUVTRVQ+Ci0JPE5PRlJBTUVTPgotCTxCT0RZPgotCTxQPlRvIHZpZXcgdGhpcyBwYWdlLCB5b3UgbmVlZCBhIGJyb3dzZXIgdGhhdCBzdXBwb3J0cyBmcmFtZXMuPC9QPgotCTwvQk9EWT4KLQk8L05PRlJBTUVTPgotPC9GUkFNRVNFVD4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9FbXB0eUZpbGUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0VtcHR5RmlsZS5qc3AKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZmQwZTc1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9JbGxmb3JtZWROb3JtYWxOb25EZWZhdWx0LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktOD8+DQotPCVAcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTclPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI2NWViMTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL01hbGZvcm1lZE5vRW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIiPz4NCi08dGFnPg0KLUF1c3RyYWxp6w0KLTwvdGFnPg0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9NYWxmb3JtZWROb0VuY29kaW5nWFNMLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMzMzU5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTWFsZm9ybWVkTm9FbmNvZGluZ1hTTC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IiI/Pg0KLTx4c2w6c3R5bGVzaGVldCB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSINCi0gICAgdmVyc2lvbj0iMS4wIg0KLSAgICB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiPg0KLTx4c2w6dmFyaWFibGUgbmFtZT0iYmFkRW5jb2RpbmciPg0KLUF1c3RyYWxp6w0KLTwveHNsOnZhcmlhYmxlPg0KLTwveHNsOnN0eWxlc2hlZXQ+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vRW5jb2RpbmdpblhNTERlY2wuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNWNlNzZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob0VuY29kaW5naW5YTUxEZWNsLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIj8+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWU4OWU2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249Ijk5IiBlbmNvZGluZz0iSVNPLTg4NTktOCI/Pg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvTm9ybWFsTm9uRGVmYXVsdFdpdGhYTUxEZWNsLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODYyNDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxOb25EZWZhdWx0V2l0aFhNTERlY2wuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS04Ij8+DQotPCVAcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBwYWdldEVuY29kaW5nPSJJU08tODg1OS03IiU+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9Ob3JtYWxQYWdlQ2FzZU5vbkRlZmF1bHQuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMjdiYmEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL05vcm1hbFBhZ2VDYXNlTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQ0KLTwlQHBhZ2UgY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1VVEYtOCIgcGFnZUVuY29kaW5nPSJJU08tODg1OS03IiAlPg0KLTx0ZXN0Pg0KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjgzN2VlNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTIyICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLUkgZm91bmQgdGhpcyBjaGFuZ2UNCi0NCi08JUAgcGFnZQ0KLWltcG9ydD0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iDQotIHBhZ2VFbmNvZGluZz0iU0hJRlRfSklTIg0KLSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUpVTksiDQotJT4NCi08SFRNTD4NCi08SEVBRD4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1NRVRBSlVOSyI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPFRJVExFPlJlc3VsdHMgcGFnZTwvVElUTEU+DQotDQotPCEtLVN0eWxlcy0tPg0KLTxTVFlMRSBUWVBFPSJ0ZXh0L2NzcyI+DQotPCEtLQ0KLUJPRFkgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmICFpbXBvcnRhbnQ7DQotfQ0KLUgxIHsNCi0JY29sb3I6ICMwMDAwZmYgIWltcG9ydGFudDsNCi0JdGV4dC1hbGlnbjogY2VudGVyICFpbXBvcnRhbnQ7DQotfQ0KLVRIIHsNCi0JdGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7DQotCWNvbG9yOiAjMDAwMDAwICFpbXBvcnRhbnQ7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotVEQgew0KLQl0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi1USC5yZXN1bHQgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjOTk5OTk5ICFpbXBvcnRhbnQ7DQotfQ0KLVRELnJlc3VsdCB7DQotCWJhY2tncm91bmQtY29sb3I6ICNjY2NjY2M7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotLS0+DQotPC9TVFlMRT4NCi0NCi0NCi08IS0tU3R5bGUgU2hlZXQtLT4NCi08TElOSyBocmVmPSIvdC90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08L2hlYWQ+DQotPGJvZHk+DQotDQotPGpzcDp1c2VCZWFuIGlkPSJzZWxDb2xCZWFuUm93MTJCZWFuIiBzY29wZT0ic2Vzc2lvbiIgY2xhc3M9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIiB0eXBlPSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiIvPg0KLTwlDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotDQotJT4NCi0NCi08JQ0KLS8vRXhlY3V0ZSBCZWFuIE1ldGhvZHMNCi0NCi0NCi0lPg0KLQ0KLTwhLS1CYW5uZXItLT4NCi08SDE+UmVzdWx0cyBwYWdlPC9IMT4NCi0NCi08QlI+PEJSPg0KLQ0KLTwhLS0gUmVzdWx0IFRhYmxlIC0tPg0KLTxUQUJMRSBib3JkZXI9IjAiPg0KLTxUQk9EWT4NCi0JCQk8VFI+DQotCQkJPFRIPlRFU1QyX4uNi46LjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4uNi46LjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfi42LjouPKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX4+Kj4mPjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4+Kj4mPjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfj4qPiY+PKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX4mNiY6JjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4mNiY6JjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfiY2JjomPKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX41cjVqNXzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX41cjVqNXygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjVyNWo1fKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotCQk8VFI+DQotCQkJPFRIPlRFU1QyX46Njo6OjzwvVEg+DQotCQkJPFREPg0KLQ0KLQk8JT1zZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX46Njo6OjygpPT0gbnVsbCA/ICJOVUxMIiA6IHNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjo2Ojo6PKCkudG9TdHJpbmcoKSU+DQotCQkJPC9URD4NCi0JCTwvVFI+DQotDQotPC9UQk9EWT4NCi08L1RBQkxFID4NCi08L2JvZHk+DQotPC9odG1sPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9VVEY4V2l0aDNCeXRlQk9NLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzlhMzljZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvVVRGOFdpdGgzQnl0ZUJPTS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+DQotPHRlc3Q+DQotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvV2VsbEZvcm1lZE5vcm1hbE5vbkRlZmF1bHQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjI5NjUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9XZWxsRm9ybWVkTm9ybWFsTm9uRGVmYXVsdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IklTTy04ODU5LTgiPz4NCi08JUAgcGFnZSBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBwYWdlRW5jb2Rpbmc9IklTTy04ODU5LTciJT4NCi08dGVzdD4NCi08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkMDkyZTMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2luVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9YWJjIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWwiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT5pblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBpblZhbGlkRW5jb2RpbmdWYWx1ZS5qc3AncyBjb250ZW50IGhlcmUuPC9QPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9qYXZhRW5jb2RpbmdWYWx1ZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE5YzZkMTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL2phdmFFbmNvZGluZ1ZhbHVlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE3ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIiAgDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1DcDEyNTIiDQotJT4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCI+DQotPE1FVEEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPExJTksgaHJlZj0iLi4vdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPFRJVExFPmluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIGluVmFsaWRFbmNvZGluZ1ZhbHVlLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9FbmNvZGluZy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0OWQwNGYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vRW5jb2RpbmcuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbCINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+bm9FbmNvZGluZy5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSBub0VuY29kaW5nLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPC9CT0RZPg0KLTwvSFRNTD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjQzMmZmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2UuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08JUAgcGFnZQ0KLXBhZ2VFbmNvZGluZz0gIklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZU5vRW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NjU2OTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VOb0VuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdDaGFyc2V0LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGQ5MDhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC9ub21hbERpcmVjdGl2ZUNhc2VVc2luZ0NoYXJzZXQuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08JUAgcGFnZSANCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiDQotJT4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL25vbWFsRGlyZWN0aXZlQ2FzZVVzaW5nWE1MU3ludGF4LmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg3NGEwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3Avbm9tYWxEaXJlY3RpdmVDYXNlVXNpbmdYTUxTeW50YXguanNwCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08anNwOmRpcmVjdGl2ZS5wYWdlIA0KLXBhZ2VFbmNvZGluZz0iSVNPLTg4NTktMiINCi1sYW5ndWFnZT0iamF2YSINCi1jb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTMiLz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RCcm9rZW5MaW5lLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODI2Nzk4MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEJyb2tlbkxpbmUuanNwCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICANCi0NCi1lbmNvZGluZz0iSVNPLTg4NTktMyIgDQotDQotID8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmcuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMWYyODdmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InRlc3RqdW5rIj8+DQotPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+DQotPEhUTUw+DQotPEhFQUQ+DQotPCVAIHBhZ2UgDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIg0KLSU+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dGVzdGp1bmsiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtU3R5bGUtVHlwZSIgY29udGVudD0idGV4dC9jc3MiPg0KLTxMSU5LIGhyZWY9Ii4uL3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTxUSVRMRT50ZXN0RGVmYXVsdEVuY29kaW5nLmpzcDwvVElUTEU+DQotPC9IRUFEPg0KLTxCT0RZPg0KLTxQPlBsYWNlIHRlc3REZWZhdWx0RW5jb2RpbmcuanNwJ3MgY29udGVudCBoZXJlLjwvUD4NCi08L0JPRFk+DQotPC9IVE1MPg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RGVmYXVsdEVuY29kaW5nV2l0aEp1bmsuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNDg2ODQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3REZWZhdWx0RW5jb2RpbmdXaXRoSnVuay5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ0ZXN0anVuayI/Pg0KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTwlQCBwYWdlIA0KLWxhbmd1YWdlPSJqYXZhIg0KLWNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSINCi0lPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXRlc3RqdW5rIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08TUVUQSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4NCi08TElOSyBocmVmPSIuLi90aGVtZS9NYXN0ZXIuY3NzIiByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIj4NCi08VElUTEU+dGVzdERlZmF1bHRFbmNvZGluZy5qc3A8L1RJVExFPg0KLTwvSEVBRD4NCi08Qk9EWT4NCi08UD5QbGFjZSB0ZXN0RGVmYXVsdEVuY29kaW5nLmpzcCdzIGNvbnRlbnQgaGVyZS48L1A+DQotPCUNCi1TeXN0ZW0ub3V0LnByaW50bG4oInRlc3QiKTsNCi0lPg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYUp1bmsuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTdmOTU4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0RXh0cmFKdW5rLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiAgYWJjZD0iZWZjIg0KLQ0KLWVuY29kaW5nPSJJU08tODg1OS0xIiANCi0NCi0gPz4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdEV4dHJhVmFsaWRTdHVmZi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZDBhM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3RFeHRyYVZhbGlkU3R1ZmYuanNwCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjZiZjkwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAgZW5jb2Rpbmc9VVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdElsbEZvcm1lZDIuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzhlYzJiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0SWxsRm9ybWVkMi5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9VVRGLTggDQotPHRlc3Q+DQotPC90ZXN0Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNkMGMxOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vRW5jb2RpbmdWYWx1ZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICAgID8+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmUuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTAxNzRhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPHRlc3Q+DQotDQotPC90ZXN0Pg0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vUGFnZURpcmVjdGl2ZUF0Rmlyc3QuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWEwYzNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlQXRGaXJzdC5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTx0ZXN0Pg0KLSA8JUAgcGFnZSANCi1wYWdlRW5jb2Rpbmc9IklTTy04ODU5LTIiDQotbGFuZ3VhZ2U9ImphdmEiDQotY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0zIg0KLSU+DQotPC90ZXN0Pg0KLQ0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9QYWdlRGlyZWN0aXZlSW5MYXJnZUZpbGUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczNDYzNmYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3Rlc3ROb1BhZ2VEaXJlY3RpdmVJbkxhcmdlRmlsZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSwzNTYgKzAsMCBAQAotPHRlc3Q+DQotDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLWV4dHJhIGp1bmsgdG8gbWFrZSBhIGxhcmdlIGZpbGUgKG92ZXIgMTAwMCBjaGFycykNCi1leHRyYSBqdW5rIHRvIG1ha2UgYSBsYXJnZSBmaWxlIChvdmVyIDEwMDAgY2hhcnMpDQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQ0KLTwvdGVzdD4NCi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdE5vcm1hbENhc2UuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTJjNDJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0Tm9ybWFsQ2FzZS5qc3AKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pg0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LkZyb21Ob3RlcGFkanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NWI5ODUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuRnJvbU5vdGVwYWRqc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdGVzdFVURjE2LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDllODE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC90ZXN0VVRGMTYuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZTY5MTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXIyLmpzcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL2pzcC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ3ZmZkNmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2VW5pY29kZVN0cmVhbVdpdGhOb0VuY29kaW5nSW5IZWFkZXJCRS5qc3AKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9qc3AvdXRmMTZXaXRoSmFwYW5lc2VDaGFycy5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkYmE5YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvanNwL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMuanNwCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm0uanNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODM3ZWU2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjIzMzY1L1NlbENvbEJlYW5Sb3cxMlJlc3VsdHNGb3JtLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIj4NCi1JIGZvdW5kIHRoaXMgY2hhbmdlDQotDQotPCVAIHBhZ2UNCi1pbXBvcnQ9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIg0KLSBwYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyINCi0gY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1KVU5LIg0KLSU+DQotPEhUTUw+DQotPEhFQUQ+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9TUVUQUpVTksiPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8iPg0KLTxUSVRMRT5SZXN1bHRzIHBhZ2U8L1RJVExFPg0KLQ0KLTwhLS1TdHlsZXMtLT4NCi08U1RZTEUgVFlQRT0idGV4dC9jc3MiPg0KLTwhLS0NCi1CT0RZIHsNCi0JYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZiAhaW1wb3J0YW50Ow0KLX0NCi1IMSB7DQotCWNvbG9yOiAjMDAwMGZmICFpbXBvcnRhbnQ7DQotCXRleHQtYWxpZ246IGNlbnRlciAhaW1wb3J0YW50Ow0KLX0NCi1USCB7DQotCXRleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50Ow0KLQljb2xvcjogIzAwMDAwMCAhaW1wb3J0YW50Ow0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLVREIHsNCi0JdGV4dC1hbGlnbjpsZWZ0ICFpbXBvcnRhbnQ7DQotCXZlcnRpY2FsLWFsaWduOiB0b3AgIWltcG9ydGFudDsNCi19DQotVEgucmVzdWx0IHsNCi0JYmFja2dyb3VuZC1jb2xvcjogIzk5OTk5OSAhaW1wb3J0YW50Ow0KLX0NCi1URC5yZXN1bHQgew0KLQliYWNrZ3JvdW5kLWNvbG9yOiAjY2NjY2NjOw0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLS0tPg0KLTwvU1RZTEU+DQotDQotDQotPCEtLVN0eWxlIFNoZWV0LS0+DQotPExJTksgaHJlZj0iL3QvdGhlbWUvTWFzdGVyLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQotPC9oZWFkPg0KLTxib2R5Pg0KLQ0KLTxqc3A6dXNlQmVhbiBpZD0ic2VsQ29sQmVhblJvdzEyQmVhbiIgc2NvcGU9InNlc3Npb24iIGNsYXNzPSJTZWxDb2xCZWFuUm93MTJWaWV3QmVhbiIgdHlwZT0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iLz4NCi08JQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLQ0KLSU+DQotDQotPCUNCi0vL0V4ZWN1dGUgQmVhbiBNZXRob2RzDQotDQotDQotJT4NCi0NCi08IS0tQmFubmVyLS0+DQotPEgxPlJlc3VsdHMgcGFnZTwvSDE+DQotDQotPEJSPjxCUj4NCi0NCi08IS0tIFJlc3VsdCBUYWJsZSAtLT4NCi08VEFCTEUgYm9yZGVyPSIwIj4NCi08VEJPRFk+DQotCQkJPFRSPg0KLQkJCTxUSD5URVNUMl+LjYuOi488L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+LjYuOi48oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4uNi46LjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+Pio+Jj488L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+Pio+Jj48oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4+Kj4mPjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+JjYmOiY88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+JjYmOiY8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX4mNiY6JjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+NXI1ajV88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+NXI1ajV8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX41cjVqNXygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQkJPFRSPg0KLQkJCTxUSD5URVNUMl+OjY6Ojo88L1RIPg0KLQkJCTxURD4NCi0NCi0JPCU9c2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+OjY6Ojo8oKT09IG51bGwgPyAiTlVMTCIgOiBzZWxDb2xCZWFuUm93MTJCZWFuLmdldFRFU1QyX46Njo6OjygpLnRvU3RyaW5nKCklPg0KLQkJCTwvVEQ+DQotCQk8L1RSPg0KLQ0KLTwvVEJPRFk+DQotPC9UQUJMRSA+DQotPC9ib2R5Pg0KLTwvaHRtbD4NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjMzNjUvU2VsQ29sQmVhblJvdzEyUmVzdWx0c0Zvcm1CLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODNjODcwZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyMzM2NS9TZWxDb2xCZWFuUm93MTJSZXN1bHRzRm9ybUIuanNwCisrKyAvZGV2L251bGwKQEAgLTEsMTIxICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLUkgZm91bmQgdGhpcyBjaGFuZ2UNCi0NCi08JUAgcGFnZQ0KLWltcG9ydD0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iDQotIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U0hJRlRfSklTIiBwYWdlRW5jb2Rpbmc9IlNISUZUX0pJUyINCi0lPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PU1FVEFKVU5LIj4NCi08TUVUQSBuYW1lPSJHRU5FUkFUT1IiIGNvbnRlbnQ9IklCTSBXZWJTcGhlcmUgU3R1ZGlvIj4NCi08VElUTEU+UmVzdWx0cyBwYWdlPC9USVRMRT4NCi0NCi08IS0tU3R5bGVzLS0+DQotPFNUWUxFIFRZUEU9InRleHQvY3NzIj4NCi08IS0tDQotQk9EWSB7DQotCWJhY2tncm91bmQtY29sb3I6ICNmZmZmZmYgIWltcG9ydGFudDsNCi19DQotSDEgew0KLQljb2xvcjogIzAwMDBmZiAhaW1wb3J0YW50Ow0KLQl0ZXh0LWFsaWduOiBjZW50ZXIgIWltcG9ydGFudDsNCi19DQotVEggew0KLQl0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudDsNCi0JY29sb3I6ICMwMDAwMDAgIWltcG9ydGFudDsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi1URCB7DQotCXRleHQtYWxpZ246bGVmdCAhaW1wb3J0YW50Ow0KLQl2ZXJ0aWNhbC1hbGlnbjogdG9wICFpbXBvcnRhbnQ7DQotfQ0KLVRILnJlc3VsdCB7DQotCWJhY2tncm91bmQtY29sb3I6ICM5OTk5OTkgIWltcG9ydGFudDsNCi19DQotVEQucmVzdWx0IHsNCi0JYmFja2dyb3VuZC1jb2xvcjogI2NjY2NjYzsNCi0JdmVydGljYWwtYWxpZ246IHRvcCAhaW1wb3J0YW50Ow0KLX0NCi0tLT4NCi08L1NUWUxFPg0KLQ0KLQ0KLTwhLS1TdHlsZSBTaGVldC0tPg0KLTxMSU5LIGhyZWY9Ii90L3RoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiPg0KLTwvaGVhZD4NCi08Ym9keT4NCi0NCi08anNwOnVzZUJlYW4gaWQ9InNlbENvbEJlYW5Sb3cxMkJlYW4iIHNjb3BlPSJzZXNzaW9uIiBjbGFzcz0iU2VsQ29sQmVhblJvdzEyVmlld0JlYW4iIHR5cGU9IlNlbENvbEJlYW5Sb3cxMlZpZXdCZWFuIi8+DQotPCUNCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0NCi0lPg0KLQ0KLTwlDQotLy9FeGVjdXRlIEJlYW4gTWV0aG9kcw0KLQ0KLQ0KLSU+DQotDQotPCEtLUJhbm5lci0tPg0KLTxIMT5SZXN1bHRzIHBhZ2U8L0gxPg0KLQ0KLTxCUj48QlI+DQotDQotPCEtLSBSZXN1bHQgVGFibGUgLS0+DQotPFRBQkxFIGJvcmRlcj0iMCI+DQotPFRCT0RZPg0KLQkJCTxUUj4NCi0JCQk8VEg+VEVTVDJfi42LjouPPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfi42LjouPKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+LjYuOi48oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfj4qPiY+PPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfj4qPiY+PKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+Pio+Jj48oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfiY2JjomPPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfiY2JjomPKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+JjYmOiY8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfjVyNWo1fPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjVyNWo1fKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+NXI1ajV8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0JCTxUUj4NCi0JCQk8VEg+VEVTVDJfjo2Ojo6PPC9USD4NCi0JCQk8VEQ+DQotDQotCTwlPXNlbENvbEJlYW5Sb3cxMkJlYW4uZ2V0VEVTVDJfjo2Ojo6PKCk9PSBudWxsID8gIk5VTEwiIDogc2VsQ29sQmVhblJvdzEyQmVhbi5nZXRURVNUMl+OjY6Ojo8oKS50b1N0cmluZygpJT4NCi0JCQk8L1REPg0KLQkJPC9UUj4NCi0NCi08L1RCT0RZPg0KLTwvVEFCTEUgPg0KLTwvYm9keT4NCi08L2h0bWw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3JlZ3Jlc3Npb25UZXN0RmlsZXMvZGVmZWN0MjI0MjkzL3Rlc3RzaGlmdGppc1htbFN5bnRheC5qc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyMDUxYjMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjQyOTMvdGVzdHNoaWZ0amlzWG1sU3ludGF4LmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTxqc3A6cm9vdCB4bWxuczpqc3A9Imh0dHA6Ly9qYXZhLnN1bi5jb20vSlNQL1BhZ2UiIHZlcnNpb249IjEuMiI+DQotPGpzcDpkaXJlY3RpdmUucGFnZSBsYW5ndWFnZT0iamF2YSINCi0JY29udGVudFR5cGU9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiIHBhZ2VFbmNvZGluZz0iU0hJRlRfSklTIiAvPg0KLTxqc3A6dGV4dD48IVtDREFUQVsgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iU0hJRlRfSklTIiA/PiBdXT48L2pzcDp0ZXh0Pg0KLTxqc3A6dGV4dD48IVtDREFUQVsgPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxMS9EVEQveGh0bWwxMS5kdGQiPiBdXT48L2pzcDp0ZXh0Pg0KLTxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCi08aGVhZD4NCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1TSElGVF9KSVMiIC8+DQotPG1ldGEgbmFtZT0iR0VORVJBVE9SIiBjb250ZW50PSJJQk0gV2ViU3BoZXJlIFN0dWRpbyIgLz4NCi08bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIiAvPg0KLTxsaW5rIGhyZWY9InRoZW1lL01hc3Rlci5jc3MiIHJlbD0ic3R5bGVzaGVldCINCi0JdHlwZT0idGV4dC9jc3MiIC8+DQotPHRpdGxlPnRlc3RzaGlmdGppcy5qc3A8L3RpdGxlPg0KLTwvaGVhZD4NCi08Ym9keT4NCi08cD5QbGFjZSB0ZXN0c2hpZnRqaXMuanNwJ3MgY29udGVudCBoZXJlLjwvcD4NCi08L2JvZHk+DQotPC9odG1sPg0KLTwvanNwOnJvb3Q+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMvcmVncmVzc2lvblRlc3RGaWxlcy9kZWZlY3QyMjk2NjcvYXVkaS5qc3AgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyOTY2Ny9hdWRpLmpzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFiNDdjMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy9yZWdyZXNzaW9uVGVzdEZpbGVzL2RlZmVjdDIyOTY2Ny9hdWRpLmpzcAorKysgL2Rldi9udWxsCkBAIC0xLDE5NCArMCwwIEBACi08JUAgcGFnZSBsYW5ndWFnZT0iamF2YSIgcGFnZUVuY29kaW5nPSJTaGlmdF9KSVMiIGNvbnRlbnRUeXBlPSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9U2hpZnRfSklTIiU+DQotPCVAdGFnbGliIHVyaT0iL1dFQi1JTkYvd2Vic2l0ZWRlc2lnbmVyLnRsZCIgcHJlZml4PSJzaXRlZWRpdCIlPg0KLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iPg0KLTxIVE1MPg0KLTxIRUFEPg0KLTxNRVRBIG5hbWU9IkdFTkVSQVRPUiINCi0JY29udGVudD0iSUJNIFdlYlNwaGVyZSBTdHVkaW8gSG9tZXBhZ2UgQnVpbGRlciBWZXJzaW9uIDYuNS4wLjAgZm9yIFdpbmRvd3MiPg0KLTxNRVRBIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVNoaWZ0X0pJUyI+DQotPE1FVEEgaHR0cC1lcXVpdj0iQ29udGVudC1TdHlsZS1UeXBlIiBjb250ZW50PSJ0ZXh0L2NzcyI+DQotPFRJVExFPkF1ZGkgQTaNd5P8gtyCxTwvVElUTEU+DQotPExJTksgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzdHlsZS5jc3MiIHR5cGU9InRleHQvY3NzIj4NCi08TElOSyByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBpZD0id2Vic2l0ZV9zdHlsZSINCi0JaHJlZj0iL0F1ZGkvc2l0ZS1jb21wL3N0eWxlL3NpdGUuY3NzIj4NCi08L0hFQUQ+DQotPEJPRFkgdGV4dD0iIzY2NjY5OSIgbGluaz0iIzY2NjZjYyIgdmxpbms9IiM5OTk5OTkiIGFsaW5rPSIjY2M2NmZmIj4NCi08c2l0ZWVkaXQ6bGF5b3V0Pg0KLQk8c2l0ZWVkaXQ6bGF5b3V0YXJlYSBpZD0iYm9keSI+DQotCQk8SDE+QXVkaSBBNo13k/yC3ILFPC9IMT4NCi0NCi0JCTxESVYgYWxpZ249ImxlZnQiPg0KLQkJPFRBQkxFIHdpZHRoPSI2NDAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iMCI+DQotCQkJPFRCT0RZPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyIgaGVpZ2h0PSI1Ij48Rk9OVCBjb2xvcj0iI2ZmZmZmZiI+jXeT/ILcgsWCzIxviNw8L0ZPTlQ+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48Rk9OVCBjb2xvcj0iI2ZmZmZmZiI+MTGMjjwvRk9OVD48L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiIHdpZHRoPSI1Ij48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgd2lkdGg9IjIxNiIgYmdjb2xvcj0iIzAwNjZjYyIgdmFsaWduPSJ0b3AiIHJvd3NwYW49IjMiPjwvVEQ+DQotCQkJCQk8VEQgd2lkdGg9IjQyMCI+DQotCQkJCQk8VUw+DQotCQkJCQkJPExJPjIwMDGUTjExjI6NoIFBjp+K+k15IENhcoLwjJ+TooK1jm6C34LpgUI8L0xJPg0KLQkJCQkJCTxMST6XnZdSgs0uLi4NCi0JCQkJCQk8T0w+DQotCQkJCQkJCTxMST4yMDAylE40jI6CxTWUTpbagvCMfYKmgumRT47UgnWCj4KMgpaCj4LJjdeCqYKijMyP4YKqkYqOn4KigsSCooK9gUI8L0xJPg0KLQkJCQkJCQk8TEk+g0eDk4NXg5OCzJTxl82Cs4LJieSWnYKqgsWCq4LIgq2CyILBgsSCq4K9gUI8L0xJPg0KLQkJCQkJCTwvT0w+DQotCQkJCQkJPC9MST4NCi0JCQkJCQk8TEk+iMiJuoLMjtSO7YKqjPOV4oLGgsiCwYK9gUINCi0JCQkJCQk8T0w+DQotCQkJCQkJCTxMST5WT0xWTyBWNzA8L0xJPg0KLQkJCQkJCQk8TEk+QldNIDMyNWkgdG91cmluZzwvTEk+DQotCQkJCQkJCTxMST5WVyBQYXNzYXJ0IFY2IDQgTW90aW9uPC9MST4NCi0JCQkJCQkJPExJPk1lcmNlZGVzLUJlbnogQyBDbGFzcyBXYWdvbjwvTEk+DQotCQkJCQkJCTxMST5BdWRpIEE0IEF2YW50PC9MST4NCi0JCQkJCQk8L09MPg0KLQkJCQkJCTxCUj4NCi0JCQkJCQmCu4KkgUIggrGCzI6ek1+CxTxCPoJgglWCzYqukVOCyINYg1KBW4N2ik88L0I+gsWCoILBgr2BQjwvTEk+DQotCQkJCQk8L1VMPg0KLQkJCQkJPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyIgd2lkdGg9IjUiIGhlaWdodD0iNSI+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgd2lkdGg9IjQyMCI+grGCsYKpgueBQYjIibqCzJedl1KCqo7lgsWBQYzzleKO1IKqjWmC54Lqgr2BQjxCUj4NCi0JCQkJCYFpgqCCrYLcgsWC4I6EgsaNyILMjMKQbJNJjuWKz4LJguaC6ILcgreBQoFqDQotCQkJCQk8VUw+DQotCQkJCQkJPExJPlZPTFZPIFY3MCAtIINmg1WDQ4OTgqpYgsWDe4NjgUI8L0xJPg0KLQkJCQkJCTxMST5CV00gMzI1aSB0b3VyaW5nIC0gkoaTcpS8kluCyINUg0ODWYFBiliShkJXTYK+gueCr4LFg3uDY4FCPC9MST4NCi0JCQkJCQk8TEk+QyBDbGFzcyAtIIm/immCyYypjYeC7YLIgqKDR4OTg1eDk4FBk+CRlYLFg3uDY4FCPC9MST4NCi0JCQkJCQk8TEk+UGFzc2FydCAtIIm/immCzZajl82TSYK+gqqT4IpPkZWDZoNVg0ODk4LFg3uDY4FCPC9MST4NCi0JCQkJCTwvVUw+DQotCQkJCQmCu4KkgUKCsYKxgsU8Qj6OY4LBgr2CzILNQTQgQXZhbnQ8L0I+gsWCtYK9gUIgPEJSPg0KLQkJCQkJQTQgMy4wIHF1YXR0cm8gc3BvcnRzgsmOjo/mgrWBQYLGgsSC4ItDgsmT/ILBgsSCtYLcgqKC3IK1gr2BQjxCUj4NCi0JCQkJCYK1gqmCtZStlISXXJLogs0yMDAylE4yjI6CxoLMgrGCxoLFgUGCu4KxgtyCxZHSgsaCpILGiOqTeILNjIiC34LcgrWCvYFCPEJSPg0KLQkJCQkJPEJSPg0KLQkJCQkJl0KI6oFBi0OCyYLIgsGCxIKigr2CzILNjrqT4ILMg1SDQ4NZgsaDZ4OJg5ODTpdll8qCqlY3MILJlOSC14KpgsiC6I+sgrOCrYLIgumCxoKigqSTX4LFgrWCvYFCPC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48Rk9OVCBjb2xvcj0iI2ZmZmZmZiI+MTKMjpKGj3s8L0ZPTlQ+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDA2NmNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJCTxURD48QlI+DQotCQkJCQkyjI6C3ILFkdKCxoKkgsaOdoLBgsSCooLpj/OR1ILFgUFBNILMkseJwY/ulfGC8JO+guaCpILGjnaCooNmg0KBW4OJgVuCyZengr+K8YLogsGCvYLGgrGC64FBklOTloLMiWOLxoLMlfuCqpVzjd2CxZNYkreCxphigvCCtYLcgrWCvYFCPEJSPg0KLQkJCQkJPEJSPg0KLQkJCQkJgruCsYLFgUFWT0xWT4KpgueCzI/mguiKt4KmgUGJxpGwjVyQrIFpNJBsgWqC8I1sgqaC6YLGQTaCqoKoiqmC34LGgsyCsYLGgUIgPEI+ib+KaY23guCRlZT1k5mC8I1sgqaC6YLGQTQgQXZhbnQNCi0JCQkJCTMuMCBxdWF0dHJvIHN1cG9ydILGQTYgQXZhbnQgMy4wIHF1YXRycm+CzI23gqqC2YLGgvGCx4LIgqI8L0I+gsaCzIKxgsaBQjxCUj4NCi0JCQkJCTxCUj4NCi0JCQkJCY1YgsmJuo7mguiDTIODg5ODeYFbg5OShoLFgUGRvIpDik+DgYFbg0qBW4KpgueCzI7mkdaCpoLMj+qNh4FBjbiS6Ip6gXs8Qj6CUoJPlpyJfjwvQj6De4Fbg2mDWILGgsiC6IFBgsaCwYLEguCCqJSDgqKTvoq0gqqPb4LcgreBQjxCUj4NCi0JCQkJCTxCUj4NCi0JCQkJCYK7grWCxIFBlE6T4JRbjtSJwpRcgsiK85ZdkEaBaYNWg4uDb4Fbg4yDQ4NOg4GDXoOKg2KDToFqgsyCYIJVgqoxkeSN3YzJgqqCoILpgsaCzIKxgsaBQjxCUj4NCi0JCQkJCTxCUj4NCi0JCQkJCYLFgUGMi4vHgrGCzJhigsmP5oLBgsQoj+aCuYLnguqCxIFIgWqBQTxCPjxGT05UIGNvbG9yPSIjY2MzM2ZmIj5BNiAzLjAgQXZhbnQgcXVhdHRybw0KLQkJCQkJMjAwMiBNb2RlbDwvRk9OVD48L0I+gvCNd5P8jIiS6IK1gtyCtYK9gUI8QlI+DQotCQkJCQk8QlI+DQotCQkJCQk8L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48Rk9OVCBjb2xvcj0iI2ZmZmZmZiI+jXeT/IyIkuiBSYFJPC9GT05UPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PEZPTlQgY29sb3I9IiNmZmZmZmYiPo13k/yMiJLogsyXnZdSgvCC3ILGgt+C6YLGgUE8L0ZPTlQ+gUE8L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCB3aWR0aD0iMjE2IiBiZ2NvbG9yPSIjMDA2NmNjIiB2YWxpZ249InRvcCI+PC9URD4NCi0JCQkJCTxURCB3aWR0aD0iNDIwIj4NCi0JCQkJCTxVTD4NCi0JCQkJCQk8TEk+kbyCzIzzleKO1ILGlOSKcoK1gsSBQYN7g2aDQoKoguaC0Y7Uk+CL84rUgsyDZoNVg0ODk4LwkeWCooLJi0OCyZP8gsGCvYFCPC9MST4NCi0JCQkJCQk8TEk+gmCCU4LFgs2CdYJWgk+CyZTkgteO1JPgg1iDeYFbg1iCqou3gq2CyILBgsSCtYLcgqSBQjwvTEk+DQotCQkJCQkJPExJPoNOg0GDZ4ONgUWDVoNYg2WDgIFpc2tpgqqO75ahgsiCzILFguKCzYLoc25vdyBkcml2ZYLJgs00V0SCqpd+grWCrYLELi4uKTwvTEk+DQotCQkJCQkJPExJPpJsiPiCq4LGk8GVyom6juaC6INMg4ODk4N5gVuDk5KGgr6CwYK9jpaBRoF8gWo8L0xJPg0KLQkJCQkJPC9VTD4NCi0JCQkJCTwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiIHZhbGlnbj0idG9wIiBjb2xzcGFuPSIyIj48Rk9OVA0KLQkJCQkJCWNvbG9yPSIjZmZmZmZmIj6Nd5P8grWCvYOCg2aDiyCCqILmgtEgkseJwYNJg3aDVoOHg5M8L0ZPTlQ+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48L1REPg0KLQkJCQk8L1RSPg0KLQkJCQk8VFI+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwNjZjYyIgdmFsaWduPSJ0b3AiPjwvVEQ+DQotCQkJCQk8VEQ+DQotCQkJCQk8VUw+DQotCQkJCQkJPExJPoOCg2aDiw0KLQkJCQkJCTxVTD4NCi0JCQkJCQkJPExJPjxCPjxGT05UIGNvbG9yPSIjY2MzM2ZmIj5BNiAzLjAgQXZhbnQgcXVhdHRybyAyMDAyIE1vZGVsPC9GT05UPjwvQj4NCi0JCQkJCQkJPC9MST4NCi0JCQkJCQkJPExJPo/agrWCrYLNgmCClYKEgomCzINJg3SDQoNWg4ODi4N5gVuDV4LwgrKXl4Ktgr6Cs4KigUIoIDxBDQotCQkJCQkJCQlocmVmPSJodHRwOi8vd3d3LmF1ZGkuY28uanAvbW9kZWxzL2luZGV4Lmh0bWwiPmh0dHA6Ly93d3cuYXVkaS5jby5qcC9tb2RlbHMvaW5kZXguaHRtbDwvQT4NCi0JCQkJCQkJKTwvTEk+DQotCQkJCQkJPC9VTD4NCi0JCQkJCQk8L0xJPg0KLQkJCQkJCTxMST6De4Nmg0KBRYNKg4mBWw0KLQkJCQkJCTxVTD4NCi0JCQkJCQkJPExJPoNWg4uDb4Fbg4yDQ4NOg4GDXoOKg2KDTjwvTEk+DQotCQkJCQkJPC9VTD4NCi0JCQkJCQk8L0xJPg0KLQkJCQkJCTxMST6Sx4nBg0mDdoNWg4eDkw0KLQkJCQkJCTxVTD4NCi0JCQkJCQkJPExJPoOLgVuDdINBg5ODZYNpl3CDQYOTg0+Di4NYg3mBW4NUgVsggWmLQIpCjq6Sk47Uj+qXmJdwgsyCvYLfgWo8L0xJPg0KLQkJCQkJCQk8TEk+g4mDUYNig1eDZ4OMg0MgKINYg0yBW5TCgUWDdYFbg2OBQY5xi5+CzJbsi4WTuYvvgvCQz4LdjZ6C3oK9gt+CzJNEj5yCr5dwgWo8L0xJPg0KLQkJCQkJCQk8TEk+g2+Dk4NwgVuV24zsl3CDiYNvgVsggWmNyILMl3aWXYLFLi4uLi4pPC9MST4NCi0JCQkJCQkJPExJPoNYg16DYoNog4yDWIFFg16DQ4OEIC0gg3WDioNXg1iDZ4OTIIN1g4qDVYNig048L0xJPg0KLQkJCQkJCTwvVUw+DQotCQkJCQkJPC9MST4NCi0JCQkJCTwvVUw+DQotCQkJCQk8L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48Rk9OVCBjb2xvcj0iI2ZmZmZmZiI+MXN0IINDg5ODdoOMg2KDVoOHg5M8L0ZPTlQ+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDAwY2MiIGhlaWdodD0iNSI+PC9URD4NCi0JCQkJPC9UUj4NCi0JCQkJPFRSPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiIHZhbGlnbj0idG9wIj48SU1HIHNyYz0iaW1hZ2UyMTEuanBnIg0KLQkJCQkJCWJvcmRlcj0iMCIgd2lkdGg9IjE5NSIgaGVpZ2h0PSIxMzAiPjwvVEQ+DQotCQkJCQk8VEQ+jXeT/IyIkuiCqYLngUGUTpaWgsyNUYK9gr6CtYKijp6K+oLFgrWCvYKqMo9UitSCxo+tgrWCxJRbjtSBQjxCUj4NCi0JCQkJCTOT+ozjgsmVY4/qgsmCcoKLgomCyY1zgq2XXJLogsWCtYK9gsyCxYFBg1iDXoNig2iDjINYkZWShYK1gsSC4ILngqKC3IK1gr2BQjxCUj4NCi0JCQkJCTxVTD4NCi0JCQkJCQk8TEk+PEZPTlQgY29sb3I9IiNmZjAwZmYiPjxGT05UIGNvbG9yPSIjZmYwMGZmIj48Qj5Qcm9zLjwvQj48L0ZPTlQ+PC9GT05UPg0KLQkJCQkJCTxVTD4NCi0JCQkJCQkJPExJPoNYg4CBW4NZgsiDR4OTg1eDk4FCPC9MST4NCi0JCQkJCQkJPExJPojAkuiCtYK9kZaC6IFplFuO1IK1gsQzk/qM44LMg1iDbYFbgUWDaIOJg0ODdYLNgsaCxILgifWTS4LFgrWCvYFqgUI8L0xJPg0KLQkJCQkJCQk8TEk+j+OOv4LFjUyCoo66k+CBQjwvTEk+DQotCQkJCQkJCTxMST6OdoLBgr2C5oLoguCIq4KtgsiCopRSlO+BaY2CkayC8Ircgt+BQYy7jd2VvYvPNi41S20vTIFCgWo8L0xJPg0KLQkJCQkJCQk8TEk+iliShoLFgqCC3ILok6+Cto7UgvCMqYKpgq+CyIKigUaBfIFqPC9MST4NCi0JCQkJCQk8L1VMPg0KLQkJCQkJCTwvTEk+DQotCQkJCQkJPExJPjxCPjxGT05UIGNvbG9yPSIjMDAwMDMzIj5Db25zLjwvRk9OVD48L0I+DQotCQkJCQkJPFVMPg0KLQkJCQkJCQk8TEk+lVePgJOLjdqCzIJtgoGCloKJgsmDcoFbg1KDk4KqlXSCooLEgqKCyIKigUI8QlI+DQotCQkJCQkJCYFpj2GR2I/ulfGCqoJ1gmiCYoJygr6Cr4LFgs2Vc49claqBQojIkU+OhJdwgrWCxIKigr2DcINDg0mDaoNBjtAginmDaYNygs2Xx4KpgsGCvYFCgWo8L0xJPg0KLQkJCQkJCQk8TEk+iNmP7YLIgq2C54KikryCro2Vgq2DioNBgqqJmILqgumBQiCDZ4OJg5ODToLwikqCr4LpgsaO6IKqkF6CwY2VgUI8L0xJPg0KLQkJCQkJCQk8TEk+gr+C5YLBgsaC04LtgtOC7YK1gr2Rq4nxguiBQjwvTEk+DQotCQkJCQkJCTxMST6CdYJWgk+CxpTkgteBQYy4gsGCxIK1gtyCwYK9g2eDiYOTg06XZZfKgUI8L0xJPg0KLQkJCQkJCTwvVUw+DQotCQkJCQkJPC9MST4NCi0JCQkJCTwvVUw+DQotCQkJCQk8L1REPg0KLQkJCQkJPFREIGJnY29sb3I9IiMwMDY2Y2MiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJCTxUUj4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIj48Rk9OVCBjb2xvcj0iI2ZmZmZmZiI+glCDloyOg4yDfIFbg2eCyZGxgq0uLi4uLi4uLjwvRk9OVD48QQ0KLQkJCQkJCWhyZWY9ImF1ZGlfMW1vbnRoLmh0bWwiPjxJTUcgc3JjPSJiMDE2bGlzLmdpZiIgd2lkdGg9IjE2Ig0KLQkJCQkJCWhlaWdodD0iMTYiIGJvcmRlcj0iMCI+PC9BPjwvVEQ+DQotCQkJCQk8VEQgYmdjb2xvcj0iIzAwMDBjYyI+PC9URD4NCi0JCQkJCTxURCBiZ2NvbG9yPSIjMDAwMGNjIiBoZWlnaHQ9IjUiPjwvVEQ+DQotCQkJCTwvVFI+DQotCQkJPC9UQk9EWT4NCi0JCTwvVEFCTEU+DQotCQk8L0RJVj4NCi0JPC9zaXRlZWRpdDpsYXlvdXRhcmVhPg0KLTwvc2l0ZWVkaXQ6bGF5b3V0Pg0KLTwvQk9EWT4NCi08L0hUTUw+DQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0VtcHR5RmlsZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvRW1wdHlGaWxlLnhtbAorKysgL2Rldi9udWxsCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvSWxsZm9ybWVkTm9ybWFsTm9uRGVmYXVsdC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MDY5MmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL0lsbGZvcm1lZE5vcm1hbE5vbkRlZmF1bHQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJJU08tODg1OS0xPz4KLTx0ZXN0PgotPC90ZXN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzhhMWJjZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IiI/PgotPHRhZz4KLUF1c3RyYWxp6wotPC90YWc+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9NYWxmb3JtZWROb0VuY29kaW5nLnhzbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmQ2NjQ4Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTWFsZm9ybWVkTm9FbmNvZGluZy54c2wKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IiI/PgotPHhzbDpzdHlsZXNoZWV0IHhtbG5zOnhzbD0iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIgotICAgIHZlcnNpb249IjEuMCIKLSAgICB4bWxuczp4YWxhbj0iaHR0cDovL3htbC5hcGFjaGUub3JnL3hzbHQiPgotPHhzbDp2YXJpYWJsZSBuYW1lPSJiYWRFbmNvZGluZyI+Ci1BdXN0cmFsaesKLTwveHNsOnZhcmlhYmxlPgotPC94c2w6c3R5bGVzaGVldD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9Ob0VuY29kaW5nLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJkOGFmZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvTm9FbmNvZGluZy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHRlc3Q+Ci08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL05vcm1hbE5vbkRlZmF1bHQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL05vcm1hbE5vbkRlZmF1bHQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmVjOThmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9Ob3JtYWxOb25EZWZhdWx0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/PgotPHRlc3Q+Ci08L3Rlc3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL1VURjE2TEVBdFN0YXJ0T2ZMYXJnZUZpbGUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWVjNTM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9VVEYxNkxFQXRTdGFydE9mTGFyZ2VGaWxlLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9VVEY4V2l0aDNCeXRlQk9NLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9VVEY4V2l0aDNCeXRlQk9NLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTk4MTEyYy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvVVRGOFdpdGgzQnl0ZUJPTS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLe+7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dGVzdD4KLTwvdGVzdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvZXVjanAueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL2V1Y2pwLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjM1OWJkNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvZXVjanAueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUpQIj8+Ci08UGVyc29uPgotCTxBZGRyZXNzPgotCQk8Q2l0eT7C58/CPC9DaXR5PgotCQk8U3RhdGU+v8DG4MDuPC9TdGF0ZT4KLQkJPFppcD5NMUMgNUMyPC9aaXA+Ci0JCTxDb3VudHJ5Psb8y9w8L0NvdW50cnk+Ci0JPC9BZGRyZXNzPgotCTxOYW1lPgotCQk8Rmlyc3Q+sOzPujwvRmlyc3Q+Ci0JCTxMYXN0Ps7rzNo8L0xhc3Q+Ci0JPC9OYW1lPgotPC9QZXJzb24+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3NoaWZ0amlzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC9zaGlmdGppcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NGJjZjguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3NoaWZ0amlzLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlNoaWZ0X0pJUyI/PgotPFBlcnNvbj4KLQk8QWRkcmVzcz4KLQkJPENpdHk+keWYYTwvQ2l0eT4KLQkJPFN0YXRlPpBfk96Q7DwvU3RhdGU+Ci0JCTxaaXA+TTFDIDVDMjwvWmlwPgotCQk8Q291bnRyeT6T+pZ7PC9Db3VudHJ5PgotCTwvQWRkcmVzcz4KLQk8TmFtZT4KLQkJPEZpcnN0PojqmFk8L0ZpcnN0PgotCQk8TGFzdD6X6ZbYPC9MYXN0PgotCTwvTmFtZT4KLTwvUGVyc29uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0RXh0cmFKdW5rLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0RXh0cmFKdW5rLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUwOTVlMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhSnVuay54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgIGFiY2Q9ImVmYyIKLQotZW5jb2Rpbmc9IklTTy04ODU5LTEiIAotCi0gPz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0RXh0cmFWYWxpZFN0dWZmLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0RXh0cmFWYWxpZFN0dWZmLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ1YzFmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdEV4dHJhVmFsaWRTdHVmZi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MTFhMzEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RJbGxGb3JtZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIGVuY29kaW5nPVVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjQyMmZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMi54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9VVRGLTggCi08dGVzdD4KLTwvdGVzdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWVhZTAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkMy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCBzdGFuZGFsb25lPSJ5ZXMiPz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkNC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdElsbEZvcm1lZDQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjOTBjNjVkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0SWxsRm9ybWVkNC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOD8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE11bHRpTGluZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyNjNmYzIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RNdWx0aUxpbmUueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICAKLQotZW5jb2Rpbmc9IklTTy04ODU5LTEiIAotCi0gPz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0Tm9FbmNvZGluZ1ZhbHVlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzBiOGU5NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vRW5jb2RpbmdWYWx1ZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiICAgID8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5YWEyN2UuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2wueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08dGVzdD4KLQotPC90ZXN0PgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEF0Rmlyc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xBdEZpcnN0LnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2NTQ5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEF0Rmlyc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08dGVzdD4KLSA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwvdGVzdD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb1hNTERlY2xJbkxhcmdlRmlsZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E1ZmM1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vWE1MRGVjbEluTGFyZ2VGaWxlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi08dGVzdD4KLQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotZXh0cmEganVuayB0byBtYWtlIGEgbGFyZ2UgZmlsZSAob3ZlciAxMDAwIGNoYXJzKQotPC90ZXN0PgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3ROb3JtYWxDYXNlLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTc1ZGJhYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdE5vcm1hbENhc2UueG1sCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFVURjE2LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDllODE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0VVRGMTYueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMzlkNGQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotCi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgPz4KLTwvdGVzdD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wyLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC90ZXN0V1NCZWZvcmVYTUxEZWNsMi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMDViNGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wyLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotICAgICAgICAgIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiA/PgotPC90ZXN0PgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbDMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3Rlc3RXU0JlZm9yZVhNTERlY2wzLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODhiOGQwOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdGVzdFdTQmVmb3JlWE1MRGVjbDMueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0JCi0JICAgICAgCQkgICAgPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiID8+Ci08L3Rlc3Q+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlcjIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2U2OTE2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyMi54bWwKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnRlc3RzLmVuY29kaW5nL3Rlc3RmaWxlcy94bWwvdXRmMTZVbmljb2RlU3RyZWFtV2l0aE5vRW5jb2RpbmdJbkhlYWRlckJFLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkN2ZmZDZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNlVuaWNvZGVTdHJlYW1XaXRoTm9FbmNvZGluZ0luSGVhZGVyQkUueG1sCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC50ZXN0cy5lbmNvZGluZy90ZXN0ZmlsZXMveG1sL3V0ZjE2V2l0aEphcGFuZXNlQ2hhcnMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjZlMzdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudGVzdHMuZW5jb2RpbmcvdGVzdGZpbGVzL3htbC91dGYxNldpdGhKYXBhbmVzZUNoYXJzLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk5NTg0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jbGFzc3BhdGgKKysrIC9kZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGNsYXNzcGF0aD4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0ic3JjIiBwYXRoPSJzcmMiLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmYjBhN2IuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1iaW4KLQotYnVpbGQueG1sCi10ZW1wLmZvbGRlcgoteG1sdWl0ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5wcm9qZWN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjNlNjhmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+PC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3YmFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NDkyZTE0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsgc2luZ2xldG9uOj10cnVlCi1CdW5kbGUtVmVyc2lvbjogMS4wLjAucXVhbGlmaWVyCi1CdW5kbGUtQ2xhc3NQYXRoOiB4bWx1aXRlc3RzLmphcgotQnVuZGxlLUFjdGl2YXRvcjogb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5YTUxVSVRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlcHJvdmlkZXJOYW1lCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLUV4cG9ydC1QYWNrYWdlOiBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLAotIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHMsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy52aWV3ZXIKLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS51aSwKLSBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LAotIG9yZy5lY2xpcHNlLndzdC54bWwudWksCi0gb3JnLmVjbGlwc2Uud3N0LnNzZS51aSwKLSBvcmcuZWNsaXBzZS51aS53b3JrYmVuY2gudGV4dGVkaXRvciwKLSBvcmcuZWNsaXBzZS51aS5pZGUsCi0gb3JnLmp1bml0O2J1bmRsZS12ZXJzaW9uPSJbMy44LjAsNC4wLjApIiwKLSBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUsCi0gb3JnLmVjbGlwc2UudWkudmlld3MsCi0gb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMsCi0gb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBjb20uaWJtLmljdQotRWNsaXBzZS1MYXp5U3RhcnQ6IHRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvYWJvdXQuaHRtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjNTk4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5NYXkgMiwgMjAwNjwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUxYWM5ZjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLWJpbi5pbmNsdWRlcyA9IHBsdWdpbi54bWwsXAotICAgICAgICAgICAgICAgdGVzdC54bWwsXAotICAgICAgICAgICAgICAgeG1sdWl0ZXN0cy5qYXIsXAotICAgICAgICAgICAgICAgTUVUQS1JTkYvLFwKLSAgICAgICAgICAgICAgIHBsdWdpbi5wcm9wZXJ0aWVzLFwKLSAgICAgICAgICAgICAgIGFib3V0Lmh0bWwsXAotICAgICAgICAgICAgICAgdGVzdHJlc291cmNlcy8sXAotICAgICAgICAgICAgICAgaWNvbnMvCi1qYXJzLmNvbXBpbGUub3JkZXIgPSB4bWx1aXRlc3RzLmphcgotc291cmNlLnhtbHVpdGVzdHMuamFyID0gc3JjLwotb3V0cHV0LnhtbHVpdGVzdHMuamFyID0gYmluLwpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9pY29ucy9icmtwX29iai5naWYgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL2Jya3Bfb2JqLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTgzMWZlNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL2Jya3Bfb2JqLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvaWNvbnMvc291cmNlRWRpdG9yLmdpZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzVlYmRiOC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL2ljb25zL3NvdXJjZUVkaXRvci5naWYKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIxZjA4My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3BsdWdpbi5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSMgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0jIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0jIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0jIAotIyBDb250cmlidXRvcnM6Ci0jICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLXByb3ZpZGVyTmFtZT1FY2xpcHNlLm9yZwotCi1CdW5kbGUtTmFtZS4wID0gWE1MIFVJIFRlc3RzCi12aWV3Lm5hbWUuMCA9IEVtYmVkZGVkIFhNTCBTdHJ1Y3R1cmVkIFRleHQgVmlld2VyCi0KLWNvbnRlbnRUeXBlVGVzdFhNTDk5LmN0PVRlc3QgWE1MIHN1Yi1jb250ZW50LXR5cGUKLWNvbnRlbnRUeXBlVGVzdFhNTDk5LmVkaXRvcj1UZXN0IFhNTCBzdWItY29udGVudC10eXBlIGVkaXRvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9wbHVnaW4ueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMGJhNTZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvcGx1Z2luLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08P2VjbGlwc2UgdmVyc2lvbj0iMy4wIj8+Ci08cGx1Z2luPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2UudWkudmlld3MiPgotCi0JCTx2aWV3Ci0JCQluYW1lPSIldmlldy5uYW1lLjAiCi0JCQlpY29uPSIkbmwkL2ljb25zL3NvdXJjZUVkaXRvci5naWYiCi0JCQljYXRlZ29yeT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXN0cyIKLQkJCWNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlci5WaWV3ZXJUZXN0WE1MIgotCQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMudmlld2VyLlZpZXdlclRlc3RYTUwiPgotCQk8L3ZpZXc+Ci0JPC9leHRlbnNpb24+Ci0KLQk8IS0tIHRlc3QgZm9yIGJyZWFrcG9pbnQgZXJyb3IgaGFuZGxpbmcgLS0+Ci0JCTxleHRlbnNpb24KLQkJcG9pbnQ9Im9yZy5lY2xpcHNlLndzdC5zc2UudWkuYnJlYWtwb2ludCI+Ci0JCTxicmVha3BvaW50Q29udHJpYnV0aW9uCi0JCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnByb3ZpZGVycy50ZXN0Ij4KLQkJPHByb3ZpZGVyCi0JCWNvbnRlbnRUeXBlcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLnhtbHNvdXJjZSxvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUueG1sIgotCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5icmVha3BvaW50cy5CcmVha3BvaW50RXJyb3JQcm92aWRlciIKLQkJaWQ9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuYnJlYWtwb2ludHMuQnJlYWtwb2ludEVycm9yUHJvdmlkZXIiPgotCQk8L3Byb3ZpZGVyPgotCQk8L2JyZWFrcG9pbnRDb250cmlidXRpb24+Ci0JCTwvZXh0ZW5zaW9uPgotCi0JPGV4dGVuc2lvbiBwb2ludD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbmRlZEVkaXRvckFjdGlvbnMiPgotCQk8ZWRpdG9yQ29udHJpYnV0aW9uCi0JCQl0YXJnZXRJRD0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS5TdHJ1Y3R1cmVkVGV4dEVkaXRvciIKLQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmFjdGlvbnMiPgotCQkJPGFjdGlvbgotCQkJCXBvcHVwbWVudVBhdGg9Imdyb3VwLmVkaXRvciIKLQkJCQljbGFzcz0ib3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5icmVha3BvaW50cy5FbmFibGVXYXJuaW5nQWN0aW9uIgotCQkJCW1lbnViYXJQYXRoPSJlZGl0L01lbnVBZGRpdGlvbnMiCi0JCQkJaWNvbj0iaWNvbnMvYnJrcF9vYmouZ2lmIgotCQkJCWlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmJyZWFrcG9pbnRzLkVuYWJsZVdhcm5pbmdBY3Rpb24iPgotCQkJPC9hY3Rpb24+Ci0JCTwvZWRpdG9yQ29udHJpYnV0aW9uPgotCTwvZXh0ZW5zaW9uPgotCTxleHRlbnNpb24KLSAgICAgICBpZD0ieG1sLnVpLnRlc3RzMSIKLSAgICAgICBuYW1lPSIlQnVuZGxlLU5hbWUuMCIKLSAgICAgICBwb2ludD0ib3JnLmVjbGlwc2UudWkuZWRpdG9ycyI+Ci0JCTxlZGl0b3IKLSAgICAgICAgY2xhc3M9Im9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmskVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yIgotICAgICAgICBjb250cmlidXRvckNsYXNzPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLmFjdGlvbnMuQWN0aW9uQ29udHJpYnV0b3JYTUwiCi0gICAgICAgIGRlZmF1bHQ9ImZhbHNlIgotICAgICAgICBmaWxlbmFtZXM9IioueG1sOTkiCi0gICAgICAgIGljb249Imljb25zL3NvdXJjZUVkaXRvci5naWYiCi0gICAgICAgIGlkPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlRlc3RTb3VyY2VWYWxpZGF0aW9uRnJhbWV3b3JrJFRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvciIKLSAgICAgICAgbmFtZT0iJWNvbnRlbnRUeXBlVGVzdFhNTDk5LmVkaXRvciIKLSAgICAgICAgc3ltYm9saWNGb250TmFtZT0ib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXh0Zm9udCI+Ci0JCTwvZWRpdG9yPgotCTwvZXh0ZW5zaW9uPgotICAgIDxleHRlbnNpb24KLSAgICAgICAgIHBvaW50PSJvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuY29udGVudFR5cGVzIj4KLSAgICAgICAgPGNvbnRlbnQtdHlwZQotCQkJZmlsZS1leHRlbnNpb25zPSJ4bWw5OSIKLQkJCXByaW9yaXR5PSJsb3ciCi0JCQluYW1lPSIlY29udGVudFR5cGVUZXN0WE1MOTkuY3QiCi0JCQlpZD0ieG1sOTlzb3VyY2UiCi0JCQliYXNlLXR5cGU9Im9yZy5lY2xpcHNlLmNvcmUucnVudGltZS54bWwiPgotCQk8L2NvbnRlbnQtdHlwZT4KLQk8L2V4dGVuc2lvbj4KLTwvcGx1Z2luPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9iYXNpY1hIVE1MLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvYmFzaWNYSFRNTC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyY2JlZTUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9iYXNpY1hIVE1MLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvY29udjJYSFRNTC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2NvbnYyWEhUTUwuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjVjNmIxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvY29udjJYSFRNTC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL2lkZW50aWZ5RFRELmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaWRlbnRpZnlEVEQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2M4NjRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaWRlbnRpZnlEVEQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9pbXBvcnREVEQuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9pbXBvcnREVEQuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjODE1ZDZiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvaW1wb3J0RFRELmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTEuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9vdXRsaW5lMS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZDIxYjUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9vdXRsaW5lMS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL291dGxpbmUyLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTIuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjQ1M2Y3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvb3V0bGluZTIuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zZXR1cEZpbGVzL1dpcmVsZXNzLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc2V0dXBGaWxlcy9XaXJlbGVzcy54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg2ZTZhM2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zZXR1cEZpbGVzL1dpcmVsZXNzLnhtbAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvc3RyaWN0WEhUTUwuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zdHJpY3RYSFRNTC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0Y2QwZWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS9zdHJpY3RYSFRNTC5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfZmlsZXMvSm9iRGVzY0VSUk9SLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9maWxlcy9Kb2JEZXNjRVJST1IueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9maWxlcy9Kb2JEZXNjRVJST1IueG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvRUpCVGFza3NfYWZ0ZXJfcGFzdGUuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19hZnRlcl9wYXN0ZS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0YmY1NDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19hZnRlcl9wYXN0ZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL0VKQlRhc2tzX2JlZm9yZV9wYXN0ZS5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL0VKQlRhc2tzX2JlZm9yZV9wYXN0ZS5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1ZjFlYjIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9FSkJUYXNrc19iZWZvcmVfcGFzdGUuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9pbnZhbGlkX2R0ZC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL2ludmFsaWRfZHRkLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDAwYmIwMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL2ludmFsaWRfZHRkLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvc2NoZW1hX211bHRpX2Vycm9yLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvc2NoZW1hX211bHRpX2Vycm9yLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2VhMDM2Zi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV9tdWx0aV9lcnJvci5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV91bmtub3duX2VsZW1lbnQuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy9zY2hlbWFfdW5rbm93bl9lbGVtZW50LmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzQzYWNjOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3NjaGVtYV91bmtub3duX2VsZW1lbnQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93X2RvY3R5cGUuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93X2RvY3R5cGUuanBnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYTI4ODY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd19kb2N0eXBlLmpwZworKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd291dF9kb2N0eXBlLmpwZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdGVtcGVycm9yX3Ntb2tldGVzdF9pbWFnZXMvd291dF9kb2N0eXBlLmpwZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDYzNzIyMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dvdXRfZG9jdHlwZS5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dyb25nX2R0ZC5qcGcgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Ntb2tlL3RlbXBlcnJvcl9zbW9rZXRlc3RfaW1hZ2VzL3dyb25nX2R0ZC5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzZDI0MWIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS90ZW1wZXJyb3Jfc21va2V0ZXN0X2ltYWdlcy93cm9uZ19kdGQuanBnCisrKyAvZGV2L251bGwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS91MDExYW5pLmdpZiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2UvdTAxMWFuaS5naWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNjNhZmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS91MDExYW5pLmdpZgorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc21va2Uvd2lyZWxlc3MuanBnIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS93aXJlbGVzcy5qcGcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwZmNjYWQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zbW9rZS93aXJlbGVzcy5qcGcKKysrIC9kZXYvbnVsbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvaW50ZXJuYWwvdmFsaWRhdGlvbi9UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDIxNWFiLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvaW50ZXJuYWwvdmFsaWRhdGlvbi9UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5GaWxlTG9jYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5jb3JlLlZhbGlkYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwub3BlcmF0aW9ucy5Xb3JrYmVuY2hDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLmludGVybmFsLnByb3Zpc2lvbmFsLmNvcmUuSU1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JUmVwb3J0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnZhbGlkYXRpb24uaW50ZXJuYWwucHJvdmlzaW9uYWwuY29yZS5JVmFsaWRhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MVUlUZXN0c1BsdWdpbjsKLQotLyoqCi0gKiBUZXN0IHRoZSBYTUwgZGVsZWdhdGluZyBzb3VyY2UgdmFsaWRhdG9yLgotICoKLSAqLwotcHVibGljIGNsYXNzIFRlc3REZWxlZ2F0aW5nU291cmNlVmFsaWRhdG9yRm9yWE1MIGV4dGVuZHMgVGVzdENhc2UgCi17Ci0JRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTCBzb3VyY2VWYWxpZGF0b3IgPSBuZXcgRGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTCgpOwotCQotCS8qKgotCSAqIFRlc3QgdGhhdCBmaWxlcyB0aGF0IGNvbnRhaW4gbm9uLThiaXQgY2hhcnMgYXJlIHZhbGlkYXRlZAotCSAqIGNvcnJlY3RseS4gaS5lLiBEbyBub3QgcHJvZHVjZSBpbmNvcnJlY3QgdmFsaWRhdGlvbiBtZXNzYWdlcy4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0Tm9uOEJpdENoYXJzKCkKLQl7Ci0JCVN0cmluZyBwcm9qTmFtZSA9ICJQcm9qZWN0IjsKLQkJU3RyaW5nIGZpbGVOYW1lMSA9ICJpbnRlcm5hdGlvbmFsLWluc3RhbmNlLnhtbCI7Ci0JCVN0cmluZyBmaWxlTmFtZTIgPSAiaW50ZXJuYXRpb25hbC54c2QiOwotCQkKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvak5hbWUpOwotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQkJCi0JCUlGaWxlIGZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgocHJvak5hbWUgKyAiLyIgKyBmaWxlTmFtZTEpKTsKLQkJaWYgKGZpbGUgIT0gbnVsbCAmJiAhZmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlmaWxlLmNyZWF0ZShGaWxlTG9jYXRvci5vcGVuU3RyZWFtKFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLCBuZXcgUGF0aCgiL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwtaW5zdGFuY2UueG1sIiksIGZhbHNlKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCWZpbGUgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldEZpbGUobmV3IFBhdGgocHJvak5hbWUgKyAiLyIgKyBmaWxlTmFtZTIpKTsKLQkJaWYgKGZpbGUgIT0gbnVsbCAmJiAhZmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlmaWxlLmNyZWF0ZShGaWxlTG9jYXRvci5vcGVuU3RyZWFtKFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldEJ1bmRsZSgpLCBuZXcgUGF0aCgiL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwueHNkIiksIGZhbHNlKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoRXhjZXB0aW9uIGUpIHsKLQkJCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQkJfQotCQl9Ci0JCVdvcmtiZW5jaENvbnRleHQgY29udGV4dCA9IG5ldyBXb3JrYmVuY2hDb250ZXh0KCk7Ci0JCUxpc3QgZmlsZUxpc3QgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZpbGVMaXN0LmFkZCgiLyIgKyBwcm9qTmFtZSArICIvIiArIGZpbGVOYW1lMSk7Ci0JCWNvbnRleHQuc2V0VmFsaWRhdGlvbkZpbGVVUklzKGZpbGVMaXN0KTsKLQkJVGVzdFJlcG9ydGVyIHJlcG9ydGVyID0gbmV3IFRlc3RSZXBvcnRlcigpOwotCQl0cnl7Ci0JCQlzb3VyY2VWYWxpZGF0b3IudmFsaWRhdGUoY29udGV4dCwgcmVwb3J0ZXIpOwotCQl9Ci0JCWNhdGNoKFZhbGlkYXRpb25FeGNlcHRpb24gZSl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCQotCQlhc3NlcnRGYWxzZSgiTWVzc2FnZXMgd2VyZSByZXBvcnRlZCBvbiB2YWxpZCBmaWxlIDEuIiwgcmVwb3J0ZXIuaXNNZXNzYWdlUmVwb3J0ZWQoKSk7Ci0JCQotCQlXb3JrYmVuY2hDb250ZXh0IGNvbnRleHQyID0gbmV3IFdvcmtiZW5jaENvbnRleHQoKTsKLQkJTGlzdCBmaWxlTGlzdDIgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JCWZpbGVMaXN0Mi5hZGQoIi8iICsgcHJvak5hbWUgKyAiLyIgKyBmaWxlTmFtZTIpOwotCQljb250ZXh0Mi5zZXRWYWxpZGF0aW9uRmlsZVVSSXMoZmlsZUxpc3QyKTsKLQkJVGVzdFJlcG9ydGVyIHJlcG9ydGVyMiA9IG5ldyBUZXN0UmVwb3J0ZXIoKTsKLQkJdHJ5ewotCQkJc291cmNlVmFsaWRhdG9yLnZhbGlkYXRlKGNvbnRleHQyLCByZXBvcnRlcjIpOwotCQl9Ci0JCWNhdGNoKFZhbGlkYXRpb25FeGNlcHRpb24gZSl7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCQotCQlhc3NlcnRGYWxzZSgiTWVzc2FnZXMgd2VyZSByZXBvcnRlZCBvbiB2YWxpZCBmaWxlIDIuIiwgcmVwb3J0ZXIyLmlzTWVzc2FnZVJlcG9ydGVkKCkpOwotCX0KLQkKLQlwcml2YXRlIGNsYXNzIFRlc3RSZXBvcnRlciBpbXBsZW1lbnRzIElSZXBvcnRlcgotCXsKLQkJcHJvdGVjdGVkIGJvb2xlYW4gbWVzc2FnZVJlcG9ydGVkID0gZmFsc2U7Ci0JCQotCQlwdWJsaWMgVGVzdFJlcG9ydGVyKCl7Ci0JCQkKLQkJfQotCQkKLQkJcHVibGljIHZvaWQgYWRkTWVzc2FnZShJVmFsaWRhdG9yIG9yaWdpbiwgSU1lc3NhZ2UgbWVzc2FnZSkgewotCQkJbWVzc2FnZVJlcG9ydGVkID0gdHJ1ZTsKLQkJCQotCQl9Ci0JCQotCQlwdWJsaWMgYm9vbGVhbiBpc01lc3NhZ2VSZXBvcnRlZCgpCi0JCXsKLQkJCXJldHVybiBtZXNzYWdlUmVwb3J0ZWQ7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCBkaXNwbGF5U3VidGFzayhJVmFsaWRhdG9yIHZhbGlkYXRvciwgSU1lc3NhZ2UgbWVzc2FnZSkgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkJCi0JCX0KLQotCQlwdWJsaWMgTGlzdCBnZXRNZXNzYWdlcygpIHsKLQkJCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJCXJldHVybiBudWxsOwotCQl9Ci0KLQkJcHVibGljIGJvb2xlYW4gaXNDYW5jZWxsZWQoKSB7Ci0JCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVBbGxNZXNzYWdlcyhJVmFsaWRhdG9yIG9yaWdpbiwgT2JqZWN0IG9iamVjdCkgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkJCi0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVBbGxNZXNzYWdlcyhJVmFsaWRhdG9yIG9yaWdpbikgewotCQkJLy8gVE9ETyBBdXRvLWdlbmVyYXRlZCBtZXRob2Qgc3R1YgotCQkJCi0JCX0KLQotCQlwdWJsaWMgdm9pZCByZW1vdmVNZXNzYWdlU3Vic2V0KElWYWxpZGF0b3IgdmFsaWRhdG9yLCBPYmplY3Qgb2JqLCBTdHJpbmcgZ3JvdXBOYW1lKSB7Ci0JCQkvLyBUT0RPIEF1dG8tZ2VuZXJhdGVkIG1ldGhvZCBzdHViCi0JCQkKLQkJfQotCQkKLQl9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdE1hcmt1cFZhbGlkYXRvci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS9pbnRlcm5hbC92YWxpZGF0aW9uL1Rlc3RNYXJrdXBWYWxpZGF0b3IuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGNlNjA5ZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL2ludGVybmFsL3ZhbGlkYXRpb24vVGVzdE1hcmt1cFZhbGlkYXRvci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5SZWdpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLlN0cnVjdHVyZWRNb2RlbE1hbmFnZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLnRleHQuSVN0cnVjdHVyZWREb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnJlY29uY2lsZS52YWxpZGF0b3IuSW5jcmVtZW50YWxSZXBvcnRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklSZXBvcnRlcjsKLQotLyoqCi0gKiBUZXN0cyBNYXJrdXBWYWxpZGF0b3IKLSAqLwotcHVibGljIGNsYXNzIFRlc3RNYXJrdXBWYWxpZGF0b3IgZXh0ZW5kcyBUZXN0Q2FzZSB7Ci0JcHJpdmF0ZSBNYXJrdXBWYWxpZGF0b3IgZlZhbGlkYXRvcjsKLQlwcml2YXRlIElSZXBvcnRlciBmUmVwb3J0ZXI7Ci0JcHJpdmF0ZSBJU3RydWN0dXJlZERvY3VtZW50IGZEb2N1bWVudDsKLQotCS8qKgotCSAqIFZhbGlkYXRlcyBkb2N1bWVudAotCSAqIAotCSAqIEBwYXJhbSBjb250ZW50cwotCSAqICAgICAgICAgICAgY29udGVudHMgdG8gc2V0IGluIGRvY3VtZW50Ci0JICogQHJldHVybiB0cnVlIGlmIHRoZXJlIHdhcyBhIHZhbGlkYXRpb24gZXJyb3IgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHJpdmF0ZSBib29sZWFuIHZhbGlkYXRlRXJyb3IoU3RyaW5nIGNvbnRlbnRzKSB7Ci0JCWZEb2N1bWVudC5zZXQoY29udGVudHMpOwotCQlmVmFsaWRhdG9yLnZhbGlkYXRlKG5ldyBSZWdpb24oMCwgZkRvY3VtZW50LmdldExlbmd0aCgpKSwgbnVsbCwgZlJlcG9ydGVyKTsKLQkJcmV0dXJuIGZSZXBvcnRlci5nZXRNZXNzYWdlcygpLmlzRW1wdHkoKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBqdXN0IGNyZWF0ZSBvbmNlCi0JCWlmIChmVmFsaWRhdG9yID09IG51bGwpCi0JCQlmVmFsaWRhdG9yID0gbmV3IE1hcmt1cFZhbGlkYXRvcigpOwotCQlpZiAoZlJlcG9ydGVyID09IG51bGwpCi0JCQlmUmVwb3J0ZXIgPSBuZXcgSW5jcmVtZW50YWxSZXBvcnRlcihudWxsKTsKLQkJaWYgKGZEb2N1bWVudCA9PSBudWxsKQotCQkJZkRvY3VtZW50ID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKS5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoIm9uZmlyZS54bWwiLCAiIiwgbnVsbCk7Ci0KLQkJZlZhbGlkYXRvci5jb25uZWN0KGZEb2N1bWVudCk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZlZhbGlkYXRvci5kaXNjb25uZWN0KGZEb2N1bWVudCk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEF0dHJpYnV0ZXNJbkVuZFRhZygpIHsKLQkJLy8gdGVzdCBmb3IgZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBhdHRyaWJ1dGVzIGluIGVuZCB0YWcgZXJyb3IiLCAhdmFsaWRhdGVFcnJvcigiPHN0b3A+PC9zdG9wIGRyb3A9XCJyb2xsXCI+IikpOwotCi0JCS8vIHRlc3QgZm9yIG5vIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IGF0dHJpYnV0ZXMgaW4gZW5kIHRhZyBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wPjwvc3RvcD4iKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdENsb3NpbmdCcmFja2V0KCkgewotCQkvLyB0ZXN0IGZvciBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IGNsb3NpbmcgYnJhY2tldCBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCA8L3N0b3A+IikpOwotCi0JCS8vIHRlc3QgZm9yIG5vIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IGNsb3NpbmcgYnJhY2tldCBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wPjwvc3RvcD4iKSk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEVtcHR5VGFnKCkgewotCQkvLyB0ZXN0IGZvciBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IGVtcHR5IHRhZyBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8PiIpKTsKLQotCQkvLyB0ZXN0IGZvciBubyBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBlbXB0eSB0YWcgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcD48L3N0b3A+IikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RBdHRyaWJ1dGVWYWx1ZSgpIHsKLQkJLy8gdGVzdCBmb3IgZXJyb3IKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBhdHRyaWJ1dGUgaGFzIG5vIHZhbHVlIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBhdHRyaWJ1dGUgbWlzc2luZyB2YWx1ZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPT48L3N0b3A+IikpOwotCi0JCS8vIHRlc3QgZm9yIG5vIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBub3QgZ2V0IGF0dHJpYnV0ZSBtaXNzaW5nIHZhbHVlIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3AgZHJvcD1cInJvbGxcIj48L3N0b3A+IikpOwotCX0KLQotCXB1YmxpYyB2b2lkIHRlc3RTcGFjZUJlZm9yZU5hbWUoKSB7Ci0JCS8vIHRlc3QgZm9yIGVycm9yCi0JCWFzc2VydFRydWUoIlNob3VsZCBnZXQgdGFnIGhhcyBzcGFjZSBiZWZvcmUgbmFtZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8ICAgIHN0b3A+PC9zdG9wPiIpKTsKLQotCQkvLyB0ZXN0IGZvciBubyBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCB0YWcgaGFzIHNwYWNlIGJlZm9yZSBuYW1lIGVycm9yIiwgdmFsaWRhdGVFcnJvcigiPHN0b3A+PC9zdG9wPiIpKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UXVvdGVzRm9yQXR0cmlidXRlVmFsdWVzKCkgewotCQkvLyB0ZXN0IGZvciBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IG1pc3NpbmcgZW5kIHF1b3RlIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCI+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwicm9sbD48L3N0b3A+IikpOwotCQlhc3NlcnRUcnVlKCJTaG91bGQgZ2V0IG1pc3NpbmcgZW5kIHF1b3RlIGVycm9yIiwgIXZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCc+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIGdldCBtaXNzaW5nIHF1b3RlcyBlcnJvciIsICF2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPXJvbGw+PC9zdG9wPiIpKTsKLQotCQkvLyB0ZXN0IGZvciBubyBlcnJvcgotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCJcIj48L3N0b3A+IikpOwotCQlhc3NlcnRUcnVlKCJTaG91bGQgbm90IGdldCBtaXNzaW5nIGVuZCBxdW90ZSBlcnJvciIsIHZhbGlkYXRlRXJyb3IoIjxzdG9wIGRyb3A9XCJyb2xsXCI+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgbWlzc2luZyBlbmQgcXVvdGUgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwnXCc+PC9zdG9wPiIpKTsKLQkJYXNzZXJ0VHJ1ZSgiU2hvdWxkIG5vdCBnZXQgbWlzc2luZyBxdW90ZXMgZXJyb3IiLCB2YWxpZGF0ZUVycm9yKCI8c3RvcCBkcm9wPVwncm9sbFwnPjwvc3RvcD4iKSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Mb2dnZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvTG9nZ2VyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI5NDI1MjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9Mb2dnZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBjb20uaWJtLmljdS51dGlsLlN0cmluZ1Rva2VuaXplcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbGF0Zm9ybTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuU3RhdHVzOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogU21hbGwgY29udmVuaWVuY2UgY2xhc3MgdG8gbG9nIG1lc3NhZ2VzIHRvIHBsdWdpbidzIGxvZyBmaWxlIGFuZCBhbHNvLCBpZiBkZXNpcmVkLAotICogdGhlIGNvbnNvbGUuIFRoaXMgY2xhc3Mgc2hvdWxkIG9ubHkgYmUgdXNlZCBieSBjbGFzc2VzIGluIHRoaXMgcGx1Z2luLiBPdGhlcgotICogcGx1Z2lucyBzaG91bGQgbWFrZSB0aGVpciBvd24gY29weSwgd2l0aCBhcHByb3ByaWF0ZSBJRC4KLSAqLwotcHVibGljIGNsYXNzIExvZ2dlciB7Ci0JcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBMVUdJTl9JRCA9ICJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzIjsgLy8kTk9OLU5MUy0xJAotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUUkFDRUZJTFRFUl9MT0NBVElPTiA9ICIvZGVidWcvdHJhY2VmaWx0ZXIiOyAvLyROT04tTkxTLTEkCi0KLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBPSyA9IElTdGF0dXMuT0s7IC8vIDAKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPID0gSVN0YXR1cy5JTkZPOyAvLyAxCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgV0FSTklORyA9IElTdGF0dXMuV0FSTklORzsgLy8gMgotCXB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SID0gSVN0YXR1cy5FUlJPUjsgLy8gNAotCi0JcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgT0tfREVCVUcgPSAyMDAgKyBPSzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBJTkZPX0RFQlVHID0gMjAwICsgSU5GTzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBXQVJOSU5HX0RFQlVHID0gMjAwICsgV0FSTklORzsKLQlwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9ERUJVRyA9IDIwMCArIEVSUk9SOwotCi0JLyoqCi0JICogQWRkcyBtZXNzYWdlIHRvIGxvZy4KLQkgKiBAcGFyYW0gbGV2ZWwgc2V2ZXJpdHkgbGV2ZWwgb2YgdGhlIG1lc3NhZ2UgKE9LLCBJTkZPLCBXQVJOSU5HLCBFUlJPUiwgT0tfREVCVUcsIElORk9fREVCVUcsIFdBUk5JTkdfREVCVUcsIEVSUk9SX0RFQlVHKQotCSAqIEBwYXJhbSBtZXNzYWdlIHRleHQgdG8gYWRkIHRvIHRoZSBsb2cKLQkgKiBAcGFyYW0gZXhjZXB0aW9uIGV4Y2VwdGlvbiB0aHJvd24KLQkgKi8KLQlwcm90ZWN0ZWQgc3RhdGljIHZvaWQgX2xvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlLCBUaHJvd2FibGUgZXhjZXB0aW9uKSB7Ci0JCWlmIChsZXZlbCA9PSBPS19ERUJVRyB8fCBsZXZlbCA9PSBJTkZPX0RFQlVHIHx8IGxldmVsID09IFdBUk5JTkdfREVCVUcgfHwgbGV2ZWwgPT0gRVJST1JfREVCVUcpIHsKLQkJCWlmICghaXNEZWJ1Z2dpbmcoKSkKLQkJCQlyZXR1cm47Ci0JCX0KLQotCQlpbnQgc2V2ZXJpdHkgPSBJU3RhdHVzLk9LOwotCQlzd2l0Y2ggKGxldmVsKSB7Ci0JCQljYXNlIElORk9fREVCVUcgOgotCQkJY2FzZSBJTkZPIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuSU5GTzsKLQkJCQlicmVhazsKLQkJCWNhc2UgV0FSTklOR19ERUJVRyA6Ci0JCQljYXNlIFdBUk5JTkcgOgotCQkJCXNldmVyaXR5ID0gSVN0YXR1cy5XQVJOSU5HOwotCQkJCWJyZWFrOwotCQkJY2FzZSBFUlJPUl9ERUJVRyA6Ci0JCQljYXNlIEVSUk9SIDoKLQkJCQlzZXZlcml0eSA9IElTdGF0dXMuRVJST1I7Ci0JCX0KLQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQlTdGF0dXMgc3RhdHVzT2JqID0gbmV3IFN0YXR1cyhzZXZlcml0eSwgUExVR0lOX0lELCBzZXZlcml0eSwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQlpZiAoYnVuZGxlICE9IG51bGwpIAotCQkJUGxhdGZvcm0uZ2V0TG9nKGJ1bmRsZSkubG9nKHN0YXR1c09iaik7Ci0JfQotCi0JLyoqCi0JICogUHJpbnRzIG1lc3NhZ2UgdG8gbG9nIGlmIGNhdGVnb3J5IG1hdGNoZXMgL2RlYnVnL3RyYWNlZmlsdGVyIG9wdGlvbi4KLQkgKiBAcGFyYW0gbWVzc2FnZSB0ZXh0IHRvIHByaW50Ci0JICogQHBhcmFtIGNhdGVnb3J5IGNhdGVnb3J5IG9mIHRoZSBtZXNzYWdlLCB0byBiZSBjb21wYXJlZCB3aXRoIC9kZWJ1Zy90cmFjZWZpbHRlcgotCSAqLwotCXByb3RlY3RlZCBzdGF0aWMgdm9pZCBfdHJhY2UoU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlpZiAoaXNUcmFjaW5nKGNhdGVnb3J5KSkgewotCQkJbWVzc2FnZSA9IChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJudWxsIjsgLy8kTk9OLU5MUy0xJAotCQkJU3RhdHVzIHN0YXR1c09iaiA9IG5ldyBTdGF0dXMoSVN0YXR1cy5PSywgUExVR0lOX0lELCBJU3RhdHVzLk9LLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCQkJQnVuZGxlIGJ1bmRsZSA9IFBsYXRmb3JtLmdldEJ1bmRsZShQTFVHSU5fSUQpOwotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKSAKLQkJCQlQbGF0Zm9ybS5nZXRMb2coYnVuZGxlKS5sb2coc3RhdHVzT2JqKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gaXMgZGVidWdnaW5nCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzRGVidWdnaW5nKCkgewotCQlyZXR1cm4gUGxhdGZvcm0uaW5EZWJ1Z01vZGUoKTsKLQl9Ci0KLQkvKioKLQkgKiBEZXRlcm1pbmVzIGlmIGN1cnJlbnRseSB0cmFjaW5nIGEgY2F0ZWdvcnkKLQkgKiBAcGFyYW0gY2F0ZWdvcnkKLQkgKiBAcmV0dXJuIHRydWUgaWYgdHJhY2luZyBjYXRlZ29yeSwgZmFsc2Ugb3RoZXJ3aXNlCi0JICovCi0JcHVibGljIHN0YXRpYyBib29sZWFuIGlzVHJhY2luZyhTdHJpbmcgY2F0ZWdvcnkpIHsKLQkJaWYgKCFpc0RlYnVnZ2luZygpKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCVN0cmluZyB0cmFjZUZpbHRlciA9IFBsYXRmb3JtLmdldERlYnVnT3B0aW9uKFBMVUdJTl9JRAotCQkJCSsgVFJBQ0VGSUxURVJfTE9DQVRJT04pOwotCQlpZiAodHJhY2VGaWx0ZXIgIT0gbnVsbCkgewotCQkJU3RyaW5nVG9rZW5pemVyIHRva2VuaXplciA9IG5ldyBTdHJpbmdUb2tlbml6ZXIodHJhY2VGaWx0ZXIsICIsIik7IC8vJE5PTi1OTFMtMSQKLQkJCXdoaWxlICh0b2tlbml6ZXIuaGFzTW9yZVRva2VucygpKSB7Ci0JCQkJU3RyaW5nIGNhdCA9IHRva2VuaXplci5uZXh0VG9rZW4oKS50cmltKCk7Ci0JCQkJaWYgKGNhdGVnb3J5LmVxdWFscyhjYXQpKSB7Ci0JCQkJCXJldHVybiB0cnVlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIGxvZyhpbnQgbGV2ZWwsIFN0cmluZyBtZXNzYWdlKSB7Ci0JCV9sb2cobGV2ZWwsIG1lc3NhZ2UsIG51bGwpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2coaW50IGxldmVsLCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfbG9nKGxldmVsLCBtZXNzYWdlLCBleGNlcHRpb24pOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgdm9pZCBsb2dFeGNlcHRpb24oU3RyaW5nIG1lc3NhZ2UsIFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgbWVzc2FnZSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgbG9nRXhjZXB0aW9uKFRocm93YWJsZSBleGNlcHRpb24pIHsKLQkJX2xvZyhFUlJPUiwgZXhjZXB0aW9uLmdldE1lc3NhZ2UoKSwgZXhjZXB0aW9uKTsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIHZvaWQgdHJhY2VFeGNlcHRpb24oU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbWVzc2FnZSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIG1lc3NhZ2UsIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlRXhjZXB0aW9uKFN0cmluZyBjYXRlZ29yeSwgVGhyb3dhYmxlIGV4Y2VwdGlvbikgewotCQlfdHJhY2UoY2F0ZWdvcnksIGV4Y2VwdGlvbi5nZXRNZXNzYWdlKCksIGV4Y2VwdGlvbik7Ci0JfQotCi0JcHVibGljIHN0YXRpYyB2b2lkIHRyYWNlKFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG1lc3NhZ2UpIHsKLQkJX3RyYWNlKGNhdGVnb3J5LCBtZXNzYWdlLCBudWxsKTsKLQl9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0RWRpdG9yQ29uZmlndXJhdGlvblhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Y2M5MDM0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25YTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIENvbW1vbiBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9jcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICBJQk0gLSBJbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgSmVucyBMdWtvd3NraS9Jbm5vb3ByYWN0IC0gaW5pdGlhbCByZW5hbWluZy9yZXN0cnVjdHVyaW5nCi0gKiAKLSAqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5FeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5jb250ZW50dHlwZS5Db250ZW50VHlwZUlkRm9yWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudmlld3MuY29udGVudG91dGxpbmUuWE1MQ29udGVudE91dGxpbmVDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudmlld3MucHJvcGVydGllcy5YTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbjsKLQotLyoqCi0gKiBUZXN0cyByZXRyaWV2aW5nIGVkaXRvciBjb250cmlidXRpb25zIGZvciB4bWwgY29udGVudCB0eXBlCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0RWRpdG9yQ29uZmlndXJhdGlvblhNTCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJT2JqZWN0IG8gPSBFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLmdldEluc3RhbmNlKCkuZ2V0Q29uZmlndXJhdGlvbihFeHRlbmRlZENvbmZpZ3VyYXRpb25CdWlsZGVyLlNPVVJDRVZJRVdFUkNPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlhc3NlcnROb3ROdWxsKCJubyBzb3VyY2Ugdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBvKTsKLQkJLy8gY2hlY2sgZm9yIG92ZXItcXVhbGlmaWVkIHN1YmNsYXNzZXMKLQkJYXNzZXJ0RXF1YWxzKCJ1bmV4cGVjdGVkIHNvdXJjZSB2aWV3ZXIgY29uZmlndXJhdGlvbiBmb3IgIiArIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwsIG8uZ2V0Q2xhc3MoKSwgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MLmNsYXNzKTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0R2V0Q29udGVudE91dGxpbmVWaWV3ZXJDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuQ09OVEVOVE9VVExJTkVDT05GSUdVUkFUSU9OLCBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MKTsKLQkJYXNzZXJ0Tm90TnVsbCgibm8gY29udGVudCBvdXRsaW5lIHZpZXdlciBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBjb250ZW50IG91dGxpbmUgdmlld2VyIGNvbmZpZ3VyYXRpb24gZm9yICIgKyBDb250ZW50VHlwZUlkRm9yWE1MLkNvbnRlbnRUeXBlSURfWE1MLCBvLmdldENsYXNzKCksIFhNTENvbnRlbnRPdXRsaW5lQ29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdEdldFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uKCkgewotCQlPYmplY3QgbyA9IEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuZ2V0SW5zdGFuY2UoKS5nZXRDb25maWd1cmF0aW9uKEV4dGVuZGVkQ29uZmlndXJhdGlvbkJ1aWxkZXIuUFJPUEVSVFlTSEVFVENPTkZJR1VSQVRJT04sIENvbnRlbnRUeXBlSWRGb3JYTUwuQ29udGVudFR5cGVJRF9YTUwpOwotCQlhc3NlcnROb3ROdWxsKCJubyBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgbyk7Ci0JCS8vIGNoZWNrIGZvciBvdmVyLXF1YWxpZmllZCBzdWJjbGFzc2VzCi0JCWFzc2VydEVxdWFscygidW5leHBlY3RlZCBwcm9wZXJ0eSBzaGVldCBjb25maWd1cmF0aW9uIGZvciAiICsgQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCwgby5nZXRDbGFzcygpLCBYTUxQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5jbGFzcyk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0T3BlbkVkaXRvclhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0T3BlbkVkaXRvclhNTC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODhkMzA4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdE9wZW5FZGl0b3JYTUwuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogICAgIAotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVByb2plY3REZXNjcmlwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5SZXNvdXJjZXNQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkNvcmVFeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnRFeHRlbnNpb240OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5TdHJ1Y3R1cmVkTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5JTW9kZWxNYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmRvY3VtZW50LklET01FbGVtZW50OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC5wcm92aXNpb25hbC5kb2N1bWVudC5JRE9NTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC50YWJsZXRyZWUuWE1MTXVsdGlQYWdlRWRpdG9yUGFydDsKLWltcG9ydCBvcmcudzNjLmRvbS5Ob2RlTGlzdDsKLQotLyoqCi0gKiBUZXN0IG1pc2MgZWRpdG9yIGZ1bmN0aW9ucyB3aXRoIGFuIG9wZW4geG1sIGVkaXRvci4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RPcGVuRWRpdG9yWE1MIGV4dGVuZHMgVGVzdENhc2UgewotCXByaXZhdGUgZmluYWwgU3RyaW5nIFBST0pFQ1RfTkFNRSA9ICJUZXN0T3BlbkVkaXRvclhNTCI7Ci0JcHJpdmF0ZSBmaW5hbCBTdHJpbmcgRklMRV9OQU1FID0gInRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvclhNTC54bWwiOwotCi0JcHJpdmF0ZSBzdGF0aWMgSUVkaXRvclBhcnQgZkVkaXRvcjsKLQlwcml2YXRlIHN0YXRpYyBJRmlsZSBmRmlsZTsKLQlwcml2YXRlIHN0YXRpYyBib29sZWFuIGZJc1NldHVwID0gZmFsc2U7Ci0KLQlwdWJsaWMgVGVzdE9wZW5FZGl0b3JYTUwoKSB7Ci0JCXN1cGVyKCJUZXN0U3RydWN0cmVkVGV4dEVkaXRvclhNTCIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIG9ubHkgY3JlYXRlIHByb2plY3QgYW5kIGZpbGUgb25jZQotCQlpZiAoIWZJc1NldHVwKSB7Ci0JCQkvLyBjcmVhdGUgcHJvamVjdAotCQkJY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkJZkZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgRklMRV9OQU1FKTsKLQkJCWZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCi0JCS8vIGVkaXRvciBpcyBvcGVuZWQgZWFjaCB0aW1lCi0JCWlmIChmSXNTZXR1cCAmJiBmRWRpdG9yID09IG51bGwpIHsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJZkVkaXRvciA9IElERS5vcGVuRWRpdG9yKHBhZ2UsIGZGaWxlLCB0cnVlLCB0cnVlKTsKLQkJCWlmICghKChmRWRpdG9yIGluc3RhbmNlb2YgWE1MTXVsdGlQYWdlRWRpdG9yUGFydCkgfHwgKGZFZGl0b3IgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikpKQotCQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IiLCBmYWxzZSk7Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCB0ZWFyRG93bigpIHRocm93cyBFeGNlcHRpb24gewotCQkvLyBlZGl0b3IgaXMgY2xvc2VkIGVhY2ggdGltZQotCQlpZiAoZkVkaXRvciAhPSBudWxsKSB7Ci0JCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCXBhZ2UuY2xvc2VFZGl0b3IoZkVkaXRvciwgZmFsc2UpOwotCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIGNsb3NlIGVkaXRvciIsIHRydWUpOwotCQkJZkVkaXRvciA9IG51bGw7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHZvaWQgY3JlYXRlUHJvamVjdChTdHJpbmcgcHJvak5hbWUpIHsKLQkJSVByb2plY3REZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5uZXdQcm9qZWN0RGVzY3JpcHRpb24ocHJvak5hbWUpOwotCi0JCUlQcm9qZWN0IHByb2plY3QgPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvak5hbWUpOwotCQl0cnkgewotCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJcHJvamVjdC5vcGVuKG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQl9Ci0JCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIElGaWxlIGdldE9yQ3JlYXRlRmlsZShTdHJpbmcgZmlsZVBhdGgpIHsKLQkJSUZpbGUgYmxhbmtGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWlmIChibGFua0ZpbGUgIT0gbnVsbCAmJiAhYmxhbmtGaWxlLmV4aXN0cygpKSB7Ci0JCQl0cnkgewotCQkJCWJsYW5rRmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKG5ldyBieXRlWzBdKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmxhbmtGaWxlOwotCX0KLQotCS8qKgotCSAqIFRlc3Qgc2V0dGluZyB0ZXh0IGluIGRvY3VtZW50IG9mIG9wZW4gZWRpdG9yLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RTZXREb2N1bWVudCgpIHsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gKElEb2N1bWVudCkgZkVkaXRvci5nZXRBZGFwdGVyKElEb2N1bWVudC5jbGFzcyk7Ci0JCXRyeSB7Ci0JCQlkb2N1bWVudC5zZXQoIjxoZWxsbz48L2hlbGxvPiIpOwotCQl9Ci0JCWNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIHNldCB0ZXh0IGluIGVkaXRvcjogIiArIGUsIGZhbHNlKTsKLQkJfQotCX0KLQotCS8qKgotCSAqIFRlc3Qgc3RydWN0dXJlZCBkb2N1bWVudCBpcyByZWxvYWRlZCBvbiByZXNvdXJjZSBjaGFuZ2UKLQkgKiAKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0QnVnMTUxMDY5KCkgewotCQlJRG9jdW1lbnQgZG9jID0gKElEb2N1bWVudCkgZkVkaXRvci5nZXRBZGFwdGVyKElEb2N1bWVudC5jbGFzcyk7Ci0JCWRvYy5zZXQoIjxodG1sPjxib2R5PjxoMT5UaXRsZTwvaDE+PC9ib2R5PjwvaHRtbD4iKTsKLQkJLy8gc2V0IGgxIHRvIHJlYWRvbmx5Ci0JCUlNb2RlbE1hbmFnZXIgbW9kZWxNYW5hZ2VyID0gU3RydWN0dXJlZE1vZGVsTWFuYWdlci5nZXRNb2RlbE1hbmFnZXIoKTsKLQkJSURPTU1vZGVsIG1vZGVsID0gbnVsbDsKLQkJdHJ5IHsKLQkJCW1vZGVsID0gKElET01Nb2RlbCkgbW9kZWxNYW5hZ2VyLmdldEV4aXN0aW5nTW9kZWxGb3JFZGl0KGRvYyk7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkgewotCQkJCU5vZGVMaXN0IG5sID0gbW9kZWwuZ2V0RG9jdW1lbnQoKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaDEiKTsKLQkJCQlJRE9NRWxlbWVudCBoMSA9IChJRE9NRWxlbWVudCkgbmwuaXRlbSgwKTsKLQkJCQloMS5zZXRFZGl0YWJsZShmYWxzZSwgdHJ1ZSk7Ci0JCQl9Ci0JCX0KLQkJZmluYWxseSB7Ci0JCQlpZiAobW9kZWwgIT0gbnVsbCkKLQkJCQltb2RlbC5yZWxlYXNlRnJvbUVkaXQoKTsKLQkJfQotCi0JCVN0cmluZyBuZXdDb250ZW50ID0gIm5ldyBjb250ZW50IjsKLQkJKChJRG9jdW1lbnRFeHRlbnNpb240KSBkb2MpLnNldChuZXdDb250ZW50LCBmRmlsZS5nZXRNb2RpZmljYXRpb25TdGFtcCgpKTsKLQkJYXNzZXJ0RXF1YWxzKCJTZXQgY29udGVudHMgaW4gZG9jdW1lbnQgd2l0aCByZWFkIG9ubHkgcmVnaW9ucyBmYWlsZWQiLCBuZXdDb250ZW50LCBkb2MuZ2V0KCkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMzAwY2MwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxNjEgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklGaWxlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklQcm9qZWN0RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5OdWxsUHJvZ3Jlc3NNb25pdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuQmFkTG9jYXRpb25FeGNlcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5UZXh0U2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVNlbGVjdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS52aWV3ZXJzLklTdHJ1Y3R1cmVkU2VsZWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hQYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklXb3JrYmVuY2hXaW5kb3c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5pZGUuSURFOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTaGVldFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTb3VyY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MucHJvcGVydGllcy5JUHJvcGVydHlTb3VyY2VQcm92aWRlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvcGVydGllcy5Db25maWd1cmFibGVQcm9wZXJ0eVNoZWV0UGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLnZpZXdzLnByb3BlcnRpZXMuSVByb3BlcnR5U291cmNlRXh0ZW5zaW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkudmlld3MucHJvcGVydGllcy5Qcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbjsKLQotcHVibGljIGNsYXNzIFRlc3RQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbiBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uIjsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBGSUxFX05BTUUgPSAidGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLnhtbCI7Ci0KLQlwcml2YXRlIHN0YXRpYyBTdHJ1Y3R1cmVkVGV4dEVkaXRvciBmRWRpdG9yOwotCXByaXZhdGUgc3RhdGljIElFZGl0b3JQYXJ0IGZNYWluRWRpdG9yOwotCXByaXZhdGUgc3RhdGljIElGaWxlIGZGaWxlOwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZklzU2V0dXAgPSBmYWxzZTsKLQotCXB1YmxpYyBUZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24oKSB7Ci0JCXN1cGVyKCJUZXN0UHJvcGVydHlTaGVldENvbmZpZ3VyYXRpb24iKTsKLQl9Ci0KLQlwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQlpZiAoIWZJc1NldHVwKSB7Ci0JCQkvLyBjcmVhdGUgcHJvamVjdAotCQkJY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkJZkZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgRklMRV9OQU1FKTsKLQkJCWZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCQkvLyBlZGl0b3IgaXMgb3BlbmVkIGVhY2ggdGltZQotCQlpZiAoZklzU2V0dXAgJiYgZk1haW5FZGl0b3IgPT0gbnVsbCkgewotCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQlmTWFpbkVkaXRvciA9IElERS5vcGVuRWRpdG9yKHBhZ2UsIGZGaWxlLCB0cnVlLCB0cnVlKTsKLQkJCWlmIChmTWFpbkVkaXRvciBpbnN0YW5jZW9mIFN0cnVjdHVyZWRUZXh0RWRpdG9yKQotCQkJCWZFZGl0b3IgPSAoU3RydWN0dXJlZFRleHRFZGl0b3IpIGZNYWluRWRpdG9yOwotCQkJZWxzZSBpZiAoZk1haW5FZGl0b3IgIT0gbnVsbCkgewotCQkJCU9iamVjdCBhZGFwdGVyID0gZk1haW5FZGl0b3IuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCQkJaWYgKGFkYXB0ZXIgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikKLQkJCQkJZkVkaXRvciA9IChTdHJ1Y3R1cmVkVGV4dEVkaXRvcikgYWRhcHRlcjsKLQkJCX0KLQkJCWlmIChmRWRpdG9yID09IG51bGwpCi0JCQkJYXNzZXJ0VHJ1ZSgiVW5hYmxlIHRvIG9wZW4gc3RydWN0dXJlZCB0ZXh0IGVkaXRvciIsIGZhbHNlKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIGVkaXRvciBpcyBjbG9zZWQgZWFjaCB0aW1lCi0JCWlmIChmTWFpbkVkaXRvciAhPSBudWxsKSB7Ci0JCQlJV29ya2JlbmNoV2luZG93IHdvcmtiZW5jaFdpbmRvdyA9IFBsYXRmb3JtVUkuZ2V0V29ya2JlbmNoKCkuZ2V0QWN0aXZlV29ya2JlbmNoV2luZG93KCk7Ci0JCQlJV29ya2JlbmNoUGFnZSBwYWdlID0gd29ya2JlbmNoV2luZG93LmdldEFjdGl2ZVBhZ2UoKTsKLQkJCXBhZ2UuY2xvc2VFZGl0b3IoZk1haW5FZGl0b3IsIGZhbHNlKTsKLQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBjbG9zZSBlZGl0b3IiLCB0cnVlKTsKLQkJCWZNYWluRWRpdG9yID0gbnVsbDsKLQkJCWZFZGl0b3IgPSBudWxsOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2pOYW1lKTsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJRmlsZSBnZXRPckNyZWF0ZUZpbGUoU3RyaW5nIGZpbGVQYXRoKSB7Ci0JCUlGaWxlIGJsYW5rRmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlpZiAoYmxhbmtGaWxlICE9IG51bGwgJiYgIWJsYW5rRmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlibGFua0ZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGJsYW5rRmlsZTsKLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0UHJvcGVydHlTb3VyY2VSZW1vdmFsKCkgdGhyb3dzIEJhZExvY2F0aW9uRXhjZXB0aW9uIHsKLQkJSURvY3VtZW50IGRvY3VtZW50ID0gKElEb2N1bWVudCkgZkVkaXRvci5nZXRBZGFwdGVyKElEb2N1bWVudC5jbGFzcyk7Ci0JCS8vIHNldCB1cCB0aGUgZWRpdG9yIGRvY3VtZW50Ci0JCWRvY3VtZW50LnJlcGxhY2UoMCwgMCwgIjx0ZXN0PjxteXByb3BlcnR5IHByb3BzPVwieWVzXCIgLz48L3Rlc3Q+Iik7Ci0KLQkJLy8gc2V0IGN1cnJlbnQgc2VsZWN0aW9uIGluIGVkaXRvcgotCQlJU2VsZWN0aW9uIHNldFNlbGVjdGlvbiA9IG5ldyBUZXh0U2VsZWN0aW9uKDksIDApOwotCQlmRWRpdG9yLmdldFNlbGVjdGlvblByb3ZpZGVyKCkuc2V0U2VsZWN0aW9uKHNldFNlbGVjdGlvbik7Ci0KLQkJLy8gZ2V0IGN1cnJlbnQgc2VsZWN0aW9uIGluIGVkaXRvcgotCQlPYmplY3QgaXRlbSA9IG51bGw7Ci0JCUlTZWxlY3Rpb24gc2VsZWN0aW9uID0gZkVkaXRvci5nZXRTZWxlY3Rpb25Qcm92aWRlcigpLmdldFNlbGVjdGlvbigpOwotCQlpZiAoc2VsZWN0aW9uIGluc3RhbmNlb2YgSVN0cnVjdHVyZWRTZWxlY3Rpb24pIHsKLQkJCWl0ZW0gPSAoKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBzZWxlY3Rpb24pLmdldEZpcnN0RWxlbWVudCgpOwotCi0JCQlJUHJvcGVydHlTaGVldFBhZ2UgcHJvcGVydHlTaGVldCA9IChJUHJvcGVydHlTaGVldFBhZ2UpIGZFZGl0b3IuZ2V0QWRhcHRlcihJUHJvcGVydHlTaGVldFBhZ2UuY2xhc3MpOwotCQkJYXNzZXJ0VHJ1ZSgiTm8gQ29uZmlndXJhYmxlUHJvcGVydHlTaGVldFBhZ2UgZm91bmQiLCBwcm9wZXJ0eVNoZWV0IGluc3RhbmNlb2YgQ29uZmlndXJhYmxlUHJvcGVydHlTaGVldFBhZ2UpOwotCQkJaWYgKHByb3BlcnR5U2hlZXQgaW5zdGFuY2VvZiBDb25maWd1cmFibGVQcm9wZXJ0eVNoZWV0UGFnZSkgewotCQkJCUNvbmZpZ3VyYWJsZVByb3BlcnR5U2hlZXRQYWdlIGNwcyA9IChDb25maWd1cmFibGVQcm9wZXJ0eVNoZWV0UGFnZSkgcHJvcGVydHlTaGVldDsKLQkJCQlQcm9wZXJ0eVNoZWV0Q29uZmlndXJhdGlvbiBjb25maWcgPSBjcHMuZ2V0Q29uZmlndXJhdGlvbigpOwotCQkJCWFzc2VydE5vdE51bGwoIk5vIHByb3BlcnR5IHNoZWV0IGNvbmZpZ3VyYXRpb24gZm91bmQiLCBjb25maWcpOwotCi0JCQkJSVByb3BlcnR5U291cmNlUHJvdmlkZXIgcHJvdmlkZXIgPSBjb25maWcuZ2V0UHJvcGVydHlTb3VyY2VQcm92aWRlcihjcHMpOwotCQkJCWFzc2VydE5vdE51bGwoIk5vIHByb3BlcnR5IHNoZWV0IHByb3ZpZGVyIGZvdW5kIiwgcHJvdmlkZXIpOwotCi0JCQkJSVByb3BlcnR5U291cmNlIHNvdXJjZSA9IHByb3ZpZGVyLmdldFByb3BlcnR5U291cmNlKGl0ZW0pOwotCQkJCWlmIChzb3VyY2UgaW5zdGFuY2VvZiBJUHJvcGVydHlTb3VyY2VFeHRlbnNpb24pIHsKLQkJCQkJYm9vbGVhbiBjYW5SZW1vdmUgPSAoKElQcm9wZXJ0eVNvdXJjZUV4dGVuc2lvbikgc291cmNlKS5pc1Byb3BlcnR5UmVtb3ZhYmxlKCJwcm9wcyIpOwotCQkJCQlhc3NlcnRUcnVlKCJDdXJyZW50IHByb3BlcnR5IGNhbm5vdCBiZSByZW1vdmVkIiwgY2FuUmVtb3ZlKTsKLQkJCQkJaWYgKGNhblJlbW92ZSkgewotCQkJCQkJKChJUHJvcGVydHlTb3VyY2VFeHRlbnNpb24pIHNvdXJjZSkucmVtb3ZlUHJvcGVydHkoInByb3BzIik7Ci0JCQkJCQlhc3NlcnRUcnVlKCJDdXJyZW50IHByb3BlcnR5IGNhbm5vdCBiZSByZW1vdmVkIiwgdHJ1ZSk7Ci0JCQkJCQkvLyBmb3JjZSByZXR1cm4gaGVyZSwgdG8gYXZvaWQgbGFzdCBmYWxsIHRocm91Z2gKLQkJCQkJCS8vIGZhaWxpbmcgYXNzZXJ0Ci0JCQkJCQlyZXR1cm47Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJLy8gaWYgd2UgZ2V0IHRvIGhlcmUsIGFsd2F5cyBmYWlsLCBzaW5jZSBzb21ldGhpbmcgd2VudCB3cm9uZy4KLQkJYXNzZXJ0VHJ1ZSgidGVzdFByb3BlcnR5U291cmNlUmVtb3ZhbCB0ZXN0IGRpZCBub3QgdGFrZSBleHBlY3RlZCBwYXRoIiwgZmFsc2UpOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFJlY29uY2lsZXJYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFJlY29uY2lsZXJYTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3OTdmYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1Rlc3RSZWNvbmNpbGVyWE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMjIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQgamF2YS5pby5CeXRlQXJyYXlJbnB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuTnVsbFByb2dyZXNzTW9uaXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuUGF0aDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS5wcmVmZXJlbmNlLklQcmVmZXJlbmNlU3RvcmU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5CYWRMb2NhdGlvbkV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudDsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5Bbm5vdGF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuc291cmNlLklBbm5vdGF0aW9uTW9kZWw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvclBhcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFdpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QbGF0Zm9ybVVJOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLmlkZS5JREU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudGV4dGVkaXRvci5EZWZhdWx0TWFya2VyQW5ub3RhdGlvbkFjY2VzczsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TU0VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnByZWZlcmVuY2VzLkNvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnRhYmxldHJlZS5YTUxNdWx0aVBhZ2VFZGl0b3JQYXJ0OwotCi0vKioKLSAqIFRlc3RzIHJlY29uY2lsZXIgaW4gYW4gb3BlbiBlZGl0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0UmVjb25jaWxlclhNTCBleHRlbmRzIFRlc3RDYXNlIHsKLQlwcml2YXRlIGZpbmFsIFN0cmluZyBQUk9KRUNUX05BTUUgPSAiVGVzdFJlY29uY2lsZXJYTUwiOwotCXByaXZhdGUgZmluYWwgU3RyaW5nIEZJTEVfTkFNRSA9ICJUZXN0UmVjb25jaWxlclhNTGZpbGUueG1sIjsKLQlmaW5hbCBwcml2YXRlIFN0cmluZyBBTk5PVEFUSU9OX0VSUk9SID0gIm9yZy5lY2xpcHNlLndzdC5zc2UudWkudGVtcC5lcnJvciI7IC8vJE5PTi1OTFMtMSQKLQlmaW5hbCBwcml2YXRlIFN0cmluZyBBTk5PVEFUSU9OX1dBUk5JTkcgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZW1wLndhcm5pbmciOyAvLyROT04tTkxTLTEkCi0KLQlwcml2YXRlIHN0YXRpYyBJRWRpdG9yUGFydCBmRWRpdG9yOwotCXByaXZhdGUgc3RhdGljIElGaWxlIGZGaWxlOwotCXByaXZhdGUgc3RhdGljIGJvb2xlYW4gZklzU2V0dXAgPSBmYWxzZTsKLQotCXByaXZhdGUgYm9vbGVhbiBmUmVjb25jaWxlclByZWY7Ci0KLQlwdWJsaWMgVGVzdFJlY29uY2lsZXJYTUwoKSB7Ci0JCXN1cGVyKCJUZXN0UmVjb25jaWxlclhNTCIpOwotCX0KLQotCXByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIG9ubHkgY3JlYXRlIHByb2plY3QgYW5kIGZpbGUgb25jZQotCQlpZiAoIWZJc1NldHVwKSB7Ci0JCQkvLyBjcmVhdGUgcHJvamVjdAotCQkJY3JlYXRlUHJvamVjdChQUk9KRUNUX05BTUUpOwotCQkJZkZpbGUgPSBnZXRPckNyZWF0ZUZpbGUoUFJPSkVDVF9OQU1FICsgIi8iICsgRklMRV9OQU1FKTsKLQkJCWZJc1NldHVwID0gdHJ1ZTsKLQkJfQotCi0JCS8vIGVkaXRvciBpcyBvcGVuZWQgZWFjaCB0aW1lCi0JCWlmIChmSXNTZXR1cCAmJiBmRWRpdG9yID09IG51bGwpIHsKLQkJCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJCUlXb3JrYmVuY2hQYWdlIHBhZ2UgPSB3b3JrYmVuY2hXaW5kb3cuZ2V0QWN0aXZlUGFnZSgpOwotCQkJZkVkaXRvciA9IElERS5vcGVuRWRpdG9yKHBhZ2UsIGZGaWxlLCB0cnVlLCB0cnVlKTsKLQkJCWlmICghKChmRWRpdG9yIGluc3RhbmNlb2YgWE1MTXVsdGlQYWdlRWRpdG9yUGFydCkgfHwgKGZFZGl0b3IgaW5zdGFuY2VvZiBTdHJ1Y3R1cmVkVGV4dEVkaXRvcikpKQotCQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBvcGVuIHN0cnVjdHVyZWQgdGV4dCBlZGl0b3IiLCBmYWxzZSk7Ci0JCX0KLQotCQkvLyB0dXJuIG9uIHJlY29uY2lsaW5nCi0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCWZSZWNvbmNpbGVyUHJlZiA9IHN0b3JlLmdldEJvb2xlYW4oQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUyk7Ci0JCWlmICghZlJlY29uY2lsZXJQcmVmKQotCQkJc3RvcmUuc2V0VmFsdWUoQ29tbW9uRWRpdG9yUHJlZmVyZW5jZU5hbWVzLkVWQUxVQVRFX1RFTVBPUkFSWV9QUk9CTEVNUywgdHJ1ZSk7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgdGVhckRvd24oKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJLy8gcmVzdG9yZSByZWNvbmNpbGluZyBwcmVmZXJlbmNlCi0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBTU0VVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCXN0b3JlLnNldFZhbHVlKENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMsIGZSZWNvbmNpbGVyUHJlZik7Ci0KLQkJLy8gZWRpdG9yIGlzIGNsb3NlZCBlYWNoIHRpbWUKLQkJaWYgKGZFZGl0b3IgIT0gbnVsbCkgewotCQkJSVdvcmtiZW5jaFdpbmRvdyB3b3JrYmVuY2hXaW5kb3cgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpOwotCQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0JCQlwYWdlLmNsb3NlRWRpdG9yKGZFZGl0b3IsIGZhbHNlKTsKLQkJCWFzc2VydFRydWUoIlVuYWJsZSB0byBjbG9zZSBlZGl0b3IiLCB0cnVlKTsKLQkJCWZFZGl0b3IgPSBudWxsOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSB2b2lkIGNyZWF0ZVByb2plY3QoU3RyaW5nIHByb2pOYW1lKSB7Ci0JCUlQcm9qZWN0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBSZXNvdXJjZXNQbHVnaW4uZ2V0V29ya3NwYWNlKCkubmV3UHJvamVjdERlc2NyaXB0aW9uKHByb2pOYW1lKTsKLQotCQlJUHJvamVjdCBwcm9qZWN0ID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRQcm9qZWN0KHByb2pOYW1lKTsKLQkJdHJ5IHsKLQkJCXByb2plY3QuY3JlYXRlKGRlc2NyaXB0aW9uLCBuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBJRmlsZSBnZXRPckNyZWF0ZUZpbGUoU3RyaW5nIGZpbGVQYXRoKSB7Ci0JCUlGaWxlIGJsYW5rRmlsZSA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0RmlsZShuZXcgUGF0aChmaWxlUGF0aCkpOwotCQlpZiAoYmxhbmtGaWxlICE9IG51bGwgJiYgIWJsYW5rRmlsZS5leGlzdHMoKSkgewotCQkJdHJ5IHsKLQkJCQlibGFua0ZpbGUuY3JlYXRlKG5ldyBCeXRlQXJyYXlJbnB1dFN0cmVhbShuZXcgYnl0ZVswXSksIHRydWUsIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJfQotCQkJY2F0Y2ggKENvcmVFeGNlcHRpb24gZSkgewotCQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIGJsYW5rRmlsZTsKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyByZWNvbmNpbGVyIGJ5IHZlcmlmeWluZyBubyBlcnJvcnMvd2FybmluZ3MgZm91bmQgd2l0aCB3ZWxsLWZvcm1lZAotCSAqIHhtbC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0V2VsbEZvcm1lZCgpIHsKLQkJSURvY3VtZW50IGRvYyA9IChJRG9jdW1lbnQpIGZFZGl0b3IuZ2V0QWRhcHRlcihJRG9jdW1lbnQuY2xhc3MpOwotCQlkb2Muc2V0KCI8aHRtbD48Ym9keT48aDE+VGl0bGU8L2gxPjwvYm9keT48L2h0bWw+Iik7Ci0JCUlUZXh0RWRpdG9yIHRleHRFZGl0b3IgPSAoSVRleHRFZGl0b3IpIGZFZGl0b3IuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCUlBbm5vdGF0aW9uTW9kZWwgYW5ub01vZGVsID0gdGV4dEVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0QW5ub3RhdGlvbk1vZGVsKGZFZGl0b3IuZ2V0RWRpdG9ySW5wdXQoKSk7Ci0JCURlZmF1bHRNYXJrZXJBbm5vdGF0aW9uQWNjZXNzIGFubm90YXRpb25BY2Nlc3MgPSBuZXcgRGVmYXVsdE1hcmtlckFubm90YXRpb25BY2Nlc3MoKTsKLQotCQkvLyB2ZXJpZnkgd2VsbC1mb3JtZWQgeG1sCi0JCXRyeSB7Ci0JCQlUaHJlYWQuc2xlZXAoNTAwMCk7Ci0JCQlJdGVyYXRvciBpdGVyID0gYW5ub01vZGVsLmdldEFubm90YXRpb25JdGVyYXRvcigpOwotCQkJd2hpbGUgKGl0ZXIuaGFzTmV4dCgpKSB7Ci0JCQkJQW5ub3RhdGlvbiBhbm5vID0gKEFubm90YXRpb24pIGl0ZXIubmV4dCgpOwotCQkJCVN0cmluZyBhbm5vVHlwZSA9IGFubm8uZ2V0VHlwZSgpOwotCQkJCWlmICgoYW5ub3RhdGlvbkFjY2Vzcy5pc1N1YnR5cGUoYW5ub1R5cGUsIEFOTk9UQVRJT05fRVJST1IpKSB8fCAoYW5ub3RhdGlvbkFjY2Vzcy5pc1N1YnR5cGUoYW5ub1R5cGUsIEFOTk9UQVRJT05fV0FSTklORykpKSB7Ci0JCQkJCWFzc2VydFRydWUoInRlc3RSZWNvbmNpbGVyOiBVbmV4cGVjdGVkIGluaXRpYWwgYW5ub3RhdGlvbnMiICsgYW5uby5nZXRUZXh0KCksIGZhbHNlKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY2F0Y2ggKEludGVycnVwdGVkRXhjZXB0aW9uIGUpIHsKLQkJCWUucHJpbnRTdGFja1RyYWNlKCk7Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyByZWNvbmNpbGVyIGJ5IHZlcmlmeWluZyBlcnJvci93YXJuaW5nIGZvdW5kIHdpdGggaWxsLWZvcm1lZCB4bWwuCi0JICogKG1pc3NpbmcgY2xvc2UgYnJhY2tldCkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkTm9DbG9zZUJyYWNrZXQoKSB7Ci0JCUlEb2N1bWVudCBkb2MgPSAoSURvY3VtZW50KSBmRWRpdG9yLmdldEFkYXB0ZXIoSURvY3VtZW50LmNsYXNzKTsKLQkJZG9jLnNldCgiPGh0bWw+PGJvZHk+PGgxPlRpdGxlPC9oMT48L2JvZHk+PC9odG1sPiIpOwotCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gKElUZXh0RWRpdG9yKSBmRWRpdG9yLmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlJQW5ub3RhdGlvbk1vZGVsIGFubm9Nb2RlbCA9IHRleHRFZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldEFubm90YXRpb25Nb2RlbChmRWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlEZWZhdWx0TWFya2VyQW5ub3RhdGlvbkFjY2VzcyBhbm5vdGF0aW9uQWNjZXNzID0gbmV3IERlZmF1bHRNYXJrZXJBbm5vdGF0aW9uQWNjZXNzKCk7Ci0KLQkJLy8gdmVyaWZ5IGlsbC1mb3JtZWQgeG1sCi0JCXRyeSB7Ci0JCQlkb2MucmVwbGFjZSg2LCA2LCAiPGJvZHkgIik7Ci0JCQlUaHJlYWQuc2xlZXAoNTAwMCk7Ci0JCQlib29sZWFuIGVycm9yRm91bmQgPSBmYWxzZTsKLQkJCUl0ZXJhdG9yIGl0ZXIgPSBhbm5vTW9kZWwuZ2V0QW5ub3RhdGlvbkl0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQlBbm5vdGF0aW9uIGFubm8gPSAoQW5ub3RhdGlvbikgaXRlci5uZXh0KCk7Ci0JCQkJU3RyaW5nIGFubm9UeXBlID0gYW5uby5nZXRUeXBlKCk7Ci0JCQkJaWYgKChhbm5vdGF0aW9uQWNjZXNzLmlzU3VidHlwZShhbm5vVHlwZSwgQU5OT1RBVElPTl9FUlJPUikpIHx8IChhbm5vdGF0aW9uQWNjZXNzLmlzU3VidHlwZShhbm5vVHlwZSwgQU5OT1RBVElPTl9XQVJOSU5HKSkpIHsKLQkJCQkJZXJyb3JGb3VuZCA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgidGVzdFJlY29uY2lsZXI6IERpZCBub3QgZmluZCBleHBlY3RlZCBlcnJvcnMgaW46ICIgKyBkb2MuZ2V0KCksIGVycm9yRm91bmQpOwotCQl9Ci0JCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgcmVjb25jaWxlciBieSB2ZXJpZnlpbmcgZXJyb3Ivd2FybmluZyBmb3VuZCB3aXRoIGlsbC1mb3JtZWQgeG1sLgotCSAqIChtaXNzaW5nIGF0dHJpYnV0ZSB2YWx1ZSkKLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0SWxsRm9ybWVkTm9BdHRyVmFsdWUoKSB7Ci0JCUlEb2N1bWVudCBkb2MgPSAoSURvY3VtZW50KSBmRWRpdG9yLmdldEFkYXB0ZXIoSURvY3VtZW50LmNsYXNzKTsKLQkJZG9jLnNldCgiPGh0bWw+PGJvZHk+PGgxPlRpdGxlPC9oMT48L2JvZHk+PC9odG1sPiIpOwotCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gKElUZXh0RWRpdG9yKSBmRWRpdG9yLmdldEFkYXB0ZXIoSVRleHRFZGl0b3IuY2xhc3MpOwotCQlJQW5ub3RhdGlvbk1vZGVsIGFubm9Nb2RlbCA9IHRleHRFZGl0b3IuZ2V0RG9jdW1lbnRQcm92aWRlcigpLmdldEFubm90YXRpb25Nb2RlbChmRWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlEZWZhdWx0TWFya2VyQW5ub3RhdGlvbkFjY2VzcyBhbm5vdGF0aW9uQWNjZXNzID0gbmV3IERlZmF1bHRNYXJrZXJBbm5vdGF0aW9uQWNjZXNzKCk7Ci0KLQkJLy8gdmVyaWZ5IGlsbC1mb3JtZWQgeG1sCi0JCXRyeSB7Ci0JCQlkb2MucmVwbGFjZSg2LCA2LCAiPGJvZHkgaGVsbG8+Iik7Ci0JCQlUaHJlYWQuc2xlZXAoNTAwMCk7Ci0JCQlib29sZWFuIGVycm9yRm91bmQgPSBmYWxzZTsKLQkJCUl0ZXJhdG9yIGl0ZXIgPSBhbm5vTW9kZWwuZ2V0QW5ub3RhdGlvbkl0ZXJhdG9yKCk7Ci0JCQl3aGlsZSAoaXRlci5oYXNOZXh0KCkpIHsKLQkJCQlBbm5vdGF0aW9uIGFubm8gPSAoQW5ub3RhdGlvbikgaXRlci5uZXh0KCk7Ci0JCQkJU3RyaW5nIGFubm9UeXBlID0gYW5uby5nZXRUeXBlKCk7Ci0JCQkJaWYgKChhbm5vdGF0aW9uQWNjZXNzLmlzU3VidHlwZShhbm5vVHlwZSwgQU5OT1RBVElPTl9FUlJPUikpIHx8IChhbm5vdGF0aW9uQWNjZXNzLmlzU3VidHlwZShhbm5vVHlwZSwgQU5OT1RBVElPTl9XQVJOSU5HKSkpIHsKLQkJCQkJZXJyb3JGb3VuZCA9IHRydWU7Ci0JCQkJfQotCQkJfQotCQkJYXNzZXJ0VHJ1ZSgidGVzdFJlY29uY2lsZXI6IERpZCBub3QgZmluZCBleHBlY3RlZCBlcnJvcnMgaW46ICIgKyBkb2MuZ2V0KCksIGVycm9yRm91bmQpOwotCQl9Ci0JCWNhdGNoIChCYWRMb2NhdGlvbkV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JCWNhdGNoIChJbnRlcnJ1cHRlZEV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yay5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9UZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yay5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZTc4ZTYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmsuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLmlvLkJ5dGVBcnJheUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0LkZpZWxkOwotaW1wb3J0IGphdmEubGFuZy5yZWZsZWN0Lk1ldGhvZDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5BcnJheXM7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLlJlc291cmNlc1BsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuQ29yZUV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuSVBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLk51bGxQcm9ncmVzc01vbml0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBhdGg7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5jb250ZW50LklDb250ZW50RGVzY3JpcHRpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLmNvbnRlbnQuSUNvbnRlbnRUeXBlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnJlY29uY2lsZXIuSVJlY29uY2lsZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5zb3VyY2UuU291cmNlVmlld2VyQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JRWRpdG9yUGFydDsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoV2luZG93OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLlBsYXRmb3JtVUk7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuaWRlLklERTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS50ZXh0ZWRpdG9yLklUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TU0VVSVBsdWdpbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnByZWZlcmVuY2VzLkNvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnJlY29uY2lsZS5Eb2N1bWVudFJlZ2lvblByb2Nlc3NvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnJlY29uY2lsZS52YWxpZGF0b3IuVmFsaWRhdG9yTWV0YURhdGE7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5yZWNvbmNpbGUudmFsaWRhdG9yLlZhbGlkYXRvclN0cmF0ZWd5OwotCi0vKioKLSAqIFRlc3RzIHJlY29uY2lsZXIgaW4gYW4gb3BlbiBlZGl0b3IuIFRoZSBsb2NhdGlvbiBvZiB0aGlzIGNsYXNzIGlzIGF3a3dhcmQKLSAqIGluIHRoYXQgaXQgcmVmZXJzIHRvIGNvbnRlbnQgdHlwZXMgZGVjbGFyZWQgaW4gcGx1Z2lucyB0aGF0IGFyZW4ndCByZXF1aXJlZAotICogdG8gYmUgcHJlc2VudC4KLSAqLwotcHVibGljIGNsYXNzIFRlc3RTb3VyY2VWYWxpZGF0aW9uRnJhbWV3b3JrIGV4dGVuZHMgVGVzdENhc2UgewotCS8qKgotCSAqIFRISVMgU1VCQ0xBU1MgSVMgRk9SIFRFU1RJTkcgT05MWQotCSAqLwotCXB1YmxpYyBzdGF0aWMgY2xhc3MgVGVzdFN0cnVjdHVyZWRUZXh0RWRpdG9yIGV4dGVuZHMgU3RydWN0dXJlZFRleHRFZGl0b3IgewotCQlwdWJsaWMgU291cmNlVmlld2VyQ29uZmlndXJhdGlvbiB0ZXh0Vmlld2VyQ29uZmlndXJhdGlvbiA9IG51bGw7Ci0KLQkJcHJvdGVjdGVkIHZvaWQgc2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbihTb3VyY2VWaWV3ZXJDb25maWd1cmF0aW9uIGNvbmZpZykgewotCQkJc3VwZXIuc2V0U291cmNlVmlld2VyQ29uZmlndXJhdGlvbihjb25maWcpOwotCQkJdGV4dFZpZXdlckNvbmZpZ3VyYXRpb24gPSBjb25maWc7Ci0JCX0KLQl9Ci0KLQlwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPSkVDVF9OQU1FID0gIlRlc3RTb3VyY2VWYWxpZGF0aW9uRnJhbWV3b3JrIjsKLQotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTRVBBUkFUT1IgPSBTdHJpbmcudmFsdWVPZihJUGF0aC5TRVBBUkFUT1IpOwotCi0JcHJpdmF0ZSBib29sZWFuIGZQcmV2aW91c1JlY29uY2lsZXJQcmVmOwotCi0JcHVibGljIFRlc3RTb3VyY2VWYWxpZGF0aW9uRnJhbWV3b3JrKCkgewotCQlzdXBlcigiVGVzdFNvdXJjZVZhbGlkYXRpb25GcmFtZXdvcmsiKTsKLQl9Ci0KLQlwcml2YXRlIElGaWxlIGVuc3VyZUZpbGVJc0FjY2Vzc2libGUoU3RyaW5nIGZpbGVQYXRoLCBieXRlW10gY29udGVudHMpIHsKLQkJSUZpbGUgYmxhbmtGaWxlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLmdldFJvb3QoKS5nZXRGaWxlKG5ldyBQYXRoKGZpbGVQYXRoKSk7Ci0JCWlmIChibGFua0ZpbGUgIT0gbnVsbCAmJiAhYmxhbmtGaWxlLmlzQWNjZXNzaWJsZSgpKSB7Ci0JCQl0cnkgewotCQkJCWJ5dGVbXSBieXRlcyA9IGNvbnRlbnRzOwotCQkJCWlmIChieXRlcyA9PSBudWxsKSB7Ci0JCQkJCWJ5dGVzID0gbmV3IGJ5dGVbMF07Ci0JCQkJfQotCQkJCWJsYW5rRmlsZS5jcmVhdGUobmV3IEJ5dGVBcnJheUlucHV0U3RyZWFtKGJ5dGVzKSwgdHJ1ZSwgbmV3IE51bGxQcm9ncmVzc01vbml0b3IoKSk7Ci0JCQl9Ci0JCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQkJZS5wcmludFN0YWNrVHJhY2UoKTsKLQkJCX0KLQkJfQotCQlyZXR1cm4gYmxhbmtGaWxlOwotCX0KLQotCXByaXZhdGUgSUNvbnRlbnRUeXBlW10gZGV0ZWN0Q29udGVudFR5cGVzKFN0cmluZyBmaWxlTmFtZSkgewotCQlJQ29udGVudFR5cGVbXSB0eXBlcyA9IG51bGw7Ci0JCUlGaWxlIGZpbGUgPSBlbnN1cmVGaWxlSXNBY2Nlc3NpYmxlKFBST0pFQ1RfTkFNRSArIFNFUEFSQVRPUiArIGZpbGVOYW1lLCBudWxsKTsKLQotCQl0eXBlcyA9IFBsYXRmb3JtLmdldENvbnRlbnRUeXBlTWFuYWdlcigpLmZpbmRDb250ZW50VHlwZXNGb3IoZmlsZS5nZXROYW1lKCkpOwotCQlpZiAodHlwZXMubGVuZ3RoID09IDApIHsKLQkJCUlDb250ZW50RGVzY3JpcHRpb24gZCA9IG51bGw7Ci0JCQl0cnkgewotCQkJCS8vIG9wdGltaXplZCBkZXNjcmlwdGlvbiBsb29rdXAsIG1pZ2h0IG5vdCBzdWNjZWVkCi0JCQkJZCA9IGZpbGUuZ2V0Q29udGVudERlc2NyaXB0aW9uKCk7Ci0JCQkJaWYgKGQgIT0gbnVsbCkgewotCQkJCQl0eXBlcyA9IG5ldyBJQ29udGVudFR5cGVbXXtkLmdldENvbnRlbnRUeXBlKCl9OwotCQkJCX0KLQkJCX0KLQkJCWNhdGNoIChDb3JlRXhjZXB0aW9uIGUpIHsKLQkJCQkvKgotCQkJCSAqIHNob3VsZCBub3QgYmUgcG9zc2libGUgZ2l2ZW4gdGhlIGFjY2Vzc2libGUgYW5kIGZpbGUgdHlwZQotCQkJCSAqIGNoZWNrIGFib3ZlCi0JCQkJICovCi0JCQl9Ci0JCX0KLQkJaWYgKHR5cGVzID09IG51bGwpIHsKLQkJCXR5cGVzID0gUGxhdGZvcm0uZ2V0Q29udGVudFR5cGVNYW5hZ2VyKCkuZmluZENvbnRlbnRUeXBlc0ZvcihmaWxlLmdldE5hbWUoKSk7Ci0JCX0KLQkJcmV0dXJuIHR5cGVzOwotCX0KLQotCXByaXZhdGUgU3RyaW5nW10gZGV0ZWN0Q29udGVudFR5cGVJRHMoU3RyaW5nIGZpbGVOYW1lKSB7Ci0JCUlDb250ZW50VHlwZVtdIHR5cGVzID0gZGV0ZWN0Q29udGVudFR5cGVzKGZpbGVOYW1lKTsKLQkJU3RyaW5nW10gaWRzID0gbmV3IFN0cmluZ1t0eXBlcy5sZW5ndGhdOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlpZHNbaV0gPSB0eXBlc1tpXS5nZXRJZCgpOwotCQl9Ci0JCXJldHVybiBpZHM7Ci0JfQotCi0JcHJpdmF0ZSBib29sZWFuIGlkZW50aWNhbENvbnRlbnRzKE9iamVjdCBvMVtdLCBPYmplY3QgbzJbXSkgewotCQlpZiAobzEubGVuZ3RoID09IDAgJiYgbzIubGVuZ3RoID09IDApCi0JCQlyZXR1cm4gdHJ1ZTsKLQotCQlPYmplY3RbXSBhcnJheTEgPSBuZXcgT2JqZWN0W28xLmxlbmd0aF07Ci0JCU9iamVjdFtdIGFycmF5MiA9IG5ldyBPYmplY3RbbzIubGVuZ3RoXTsKLQkJU3lzdGVtLmFycmF5Y29weShvMSwgMCwgYXJyYXkxLCAwLCBvMS5sZW5ndGgpOwotCQlTeXN0ZW0uYXJyYXljb3B5KG8yLCAwLCBhcnJheTIsIDAsIG8yLmxlbmd0aCk7Ci0JCUFycmF5cy5zb3J0KGFycmF5MSk7Ci0JCUFycmF5cy5zb3J0KGFycmF5Mik7Ci0JCXJldHVybiBBcnJheXMuZXF1YWxzKGFycmF5MSwgYXJyYXkyKTsKLQl9Ci0KLQotCXByaXZhdGUgdm9pZCBlbnN1cmVQcm9qZWN0SXNBY2Nlc3NpYmxlKFN0cmluZyBwcm9qTmFtZSkgewotCQlJUHJvamVjdERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpLm5ld1Byb2plY3REZXNjcmlwdGlvbihwcm9qTmFtZSk7Ci0KLQkJSVByb2plY3QgcHJvamVjdCA9IFJlc291cmNlc1BsdWdpbi5nZXRXb3Jrc3BhY2UoKS5nZXRSb290KCkuZ2V0UHJvamVjdChwcm9qTmFtZSk7Ci0JCXRyeSB7Ci0JCQlpZiAoIXByb2plY3QuZXhpc3RzKCkpCi0JCQkJcHJvamVjdC5jcmVhdGUoZGVzY3JpcHRpb24sIG5ldyBOdWxsUHJvZ3Jlc3NNb25pdG9yKCkpOwotCQkJaWYgKCFwcm9qZWN0LmlzQWNjZXNzaWJsZSgpKQotCQkJCXByb2plY3Qub3BlbihuZXcgTnVsbFByb2dyZXNzTW9uaXRvcigpKTsKLQkJfQotCQljYXRjaCAoQ29yZUV4Y2VwdGlvbiBlKSB7Ci0JCQllLnByaW50U3RhY2tUcmFjZSgpOwotCQl9Ci0JfQotCi0JcHJpdmF0ZSBMaXN0IGdldFNvdXJjZVZhbGlkYXRvcklEcyhTdHJpbmcgZmlsZU5hbWUpIHRocm93cyBFeGNlcHRpb24gewotCQlMaXN0IHZhbGlkYXRvcklkcyA9IG5ldyBBcnJheUxpc3QoMSk7Ci0JCUlXb3JrYmVuY2hXaW5kb3cgd29ya2JlbmNoV2luZG93ID0gUGxhdGZvcm1VSS5nZXRXb3JrYmVuY2goKS5nZXRBY3RpdmVXb3JrYmVuY2hXaW5kb3coKTsKLQkJSVdvcmtiZW5jaFBhZ2UgcGFnZSA9IHdvcmtiZW5jaFdpbmRvdy5nZXRBY3RpdmVQYWdlKCk7Ci0KLQkJSUZpbGUgZmlsZSA9IGVuc3VyZUZpbGVJc0FjY2Vzc2libGUoUFJPSkVDVF9OQU1FICsgU0VQQVJBVE9SICsgZmlsZU5hbWUsIG51bGwpOwotCQlJRWRpdG9yUGFydCBlZGl0b3IgPSBJREUub3BlbkVkaXRvcihwYWdlLCBmaWxlLCBUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IuY2xhc3MuZ2V0TmFtZSgpLCB0cnVlKTsKLQotCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gKElUZXh0RWRpdG9yKSBlZGl0b3IuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCVRlc3RTdHJ1Y3R1cmVkVGV4dEVkaXRvciB0ZXN0VGV4dEVkaXRvciA9IChUZXN0U3RydWN0dXJlZFRleHRFZGl0b3IpIHRleHRFZGl0b3I7Ci0JCUlSZWNvbmNpbGVyIHJlY29uY2lsZXIgPSB0ZXN0VGV4dEVkaXRvci50ZXh0Vmlld2VyQ29uZmlndXJhdGlvbi5nZXRSZWNvbmNpbGVyKHRlc3RUZXh0RWRpdG9yLmdldFRleHRWaWV3ZXIoKSk7Ci0KLQkJYXNzZXJ0Tm90TnVsbChyZWNvbmNpbGVyKTsKLQkJYXNzZXJ0VHJ1ZSgidW5leHBlY3RlZCBJUmVjb25jaWxlciBpbXBsZW1lbnRhdGlvbjogIiArIHJlY29uY2lsZXIuZ2V0Q2xhc3MoKSwgcmVjb25jaWxlciBpbnN0YW5jZW9mIERvY3VtZW50UmVnaW9uUHJvY2Vzc29yKTsKLQotCQlDbGFzcyByZWNvbmNpbGVyQ2xhc3MgPSByZWNvbmNpbGVyLmdldENsYXNzKCk7Ci0JCU1ldGhvZCBtZXRob2QgPSBudWxsOwotCQl3aGlsZSAocmVjb25jaWxlckNsYXNzICE9IE9iamVjdC5jbGFzcyAmJiBtZXRob2QgPT0gbnVsbCkgewotCQkJTWV0aG9kW10gbWV0aG9kcyA9IHJlY29uY2lsZXJDbGFzcy5nZXREZWNsYXJlZE1ldGhvZHMoKTsKLQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbWV0aG9kcy5sZW5ndGg7IGkrKykgewotCQkJCWlmIChtZXRob2RzW2ldLmdldE5hbWUoKS5lcXVhbHMoImdldFZhbGlkYXRvclN0cmF0ZWd5IikpIHsKLQkJCQkJbWV0aG9kID0gbWV0aG9kc1tpXTsKLQkJCQl9Ci0JCQl9Ci0JCQlyZWNvbmNpbGVyQ2xhc3MgPSByZWNvbmNpbGVyQ2xhc3MuZ2V0U3VwZXJjbGFzcygpOwotCQl9Ci0KLQkJYXNzZXJ0Tm90TnVsbCgibm8gZ2V0VmFsaWRhdG9yU3RyYXRlZ3kgbWV0aG9kIGZvdW5kIG9uICIgKyByZWNvbmNpbGVyLmdldENsYXNzKCksIG1ldGhvZCk7Ci0JCW1ldGhvZC5zZXRBY2Nlc3NpYmxlKHRydWUpOwotCQlWYWxpZGF0b3JTdHJhdGVneSBzdHJhdGVneSA9IChWYWxpZGF0b3JTdHJhdGVneSkgbWV0aG9kLmludm9rZShyZWNvbmNpbGVyLCBuZXcgT2JqZWN0WzBdKTsKLQkJYXNzZXJ0Tm90TnVsbChzdHJhdGVneSk7Ci0JCUZpZWxkIGZNZXRhRGF0YSA9IHN0cmF0ZWd5LmdldENsYXNzKCkuZ2V0RGVjbGFyZWRGaWVsZCgiZk1ldGFEYXRhIik7Ci0JCWFzc2VydE5vdE51bGwoInZhbGlkYXRvciBtZXRhZGF0YSBmaWVsZCBcImZNZXRhRGF0YVwiIG5vdCBmb3VuZCBvbiBzdHJhdGVneSAiICsgc3RyYXRlZ3kuZ2V0Q2xhc3MoKSwgZk1ldGFEYXRhKTsKLQkJZk1ldGFEYXRhLnNldEFjY2Vzc2libGUodHJ1ZSk7Ci0JCUxpc3QgbWV0YWRhdGEgPSAoTGlzdCkgZk1ldGFEYXRhLmdldChzdHJhdGVneSk7Ci0JCWFzc2VydE5vdE51bGwobWV0YWRhdGEpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IG1ldGFkYXRhLnNpemUoKTsgaSsrKSB7Ci0JCQl2YWxpZGF0b3JJZHMuYWRkKCgoVmFsaWRhdG9yTWV0YURhdGEpIG1ldGFkYXRhLmdldChpKSkuZ2V0VmFsaWRhdG9ySWQoKSk7Ci0JCX0KLQotCQlwYWdlLmNsb3NlRWRpdG9yKGVkaXRvciwgZmFsc2UpOwotCi0JCXJldHVybiB2YWxpZGF0b3JJZHM7Ci0JfQotCi0JcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJZW5zdXJlUHJvamVjdElzQWNjZXNzaWJsZShQUk9KRUNUX05BTUUpOwotCi0JCS8vIHR1cm4gb24gcmVjb25jaWxpbmcKLQkJSVByZWZlcmVuY2VTdG9yZSBzdG9yZSA9IFNTRVVJUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKTsKLQkJZlByZXZpb3VzUmVjb25jaWxlclByZWYgPSBzdG9yZS5nZXRCb29sZWFuKENvbW1vbkVkaXRvclByZWZlcmVuY2VOYW1lcy5FVkFMVUFURV9URU1QT1JBUllfUFJPQkxFTVMpOwotCQlpZiAoIWZQcmV2aW91c1JlY29uY2lsZXJQcmVmKSB7Ci0JCQlzdG9yZS5zZXRWYWx1ZShDb21tb25FZGl0b3JQcmVmZXJlbmNlTmFtZXMuRVZBTFVBVEVfVEVNUE9SQVJZX1BST0JMRU1TLCB0cnVlKTsKLQkJfQotCX0KLQotCXByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCS8vIHJlc3RvcmUgcmVjb25jaWxpbmcgcHJlZmVyZW5jZQotCQlJUHJlZmVyZW5jZVN0b3JlIHN0b3JlID0gU1NFVUlQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpOwotCQlzdG9yZS5zZXRWYWx1ZShDb21tb25FZGl0b3JQcmVmZXJlbmNlTmFtZXMuRVZBTFVBVEVfVEVNUE9SQVJZX1BST0JMRU1TLCBmUHJldmlvdXNSZWNvbmNpbGVyUHJlZik7Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZVZhbGlkYXRpb25FbmFibGVtZW50V2l0aEluaGVyaXRlZFZhbGlkYXRvcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJT2JqZWN0W10geG1sVmFsaWRhdG9ySURzID0gZ2V0U291cmNlVmFsaWRhdG9ySURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMueG1sIikudG9BcnJheSgpOwotCQlhc3NlcnRUcnVlKCJObyBYTUwgc291cmNlIHZhbGlkYXRvcnMgZm91bmQiLCB4bWxWYWxpZGF0b3JJRHMubGVuZ3RoID4gMCk7Ci0JCU9iamVjdFtdIHhtbDk5VmFsaWRhdG9ySURzID0gZ2V0U291cmNlVmFsaWRhdG9ySURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMueG1sOTkiKS50b0FycmF5KCk7Ci0JCWFzc2VydFRydWUoIk5vIFhNTDk5IHNvdXJjZSB2YWxpZGF0b3JzIGZvdW5kIiwgeG1sOTlWYWxpZGF0b3JJRHMubGVuZ3RoID4gMCk7Ci0KLQkJQXJyYXlzLnNvcnQoeG1sVmFsaWRhdG9ySURzKTsKLQkJQXJyYXlzLnNvcnQoeG1sOTlWYWxpZGF0b3JJRHMpOwotCi0JCWFzc2VydEVxdWFscygidmFsaWRhdG9yIGxpc3RzIHNob3VsZCBiZSB0aGUgc2FtZSBsZW5ndGgiLCB4bWxWYWxpZGF0b3JJRHMubGVuZ3RoLCB4bWw5OVZhbGlkYXRvcklEcy5sZW5ndGgpOwotCQlmb3IgKGludCBpID0gMDsgaSA8IHhtbFZhbGlkYXRvcklEcy5sZW5ndGg7IGkrKykgewotCQkJYXNzZXJ0RXF1YWxzKCJ2YWxpZGF0b3IgSURzIHNob3VsZCBiZSB0aGUgc2FtZSBbIiArIGkgKyAiXSIsIHhtbFZhbGlkYXRvcklEc1tpXSwgeG1sOTlWYWxpZGF0b3JJRHNbaV0pOwotCQl9Ci0JfQotCi0JcHVibGljIHZvaWQgdGVzdFNvdXJjZVZhbGlkYXRpb25FbmFibGVtZW50V2l0aFVuaXF1ZVZhbGlkYXRvcnMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJU3RyaW5nW10geG1sQ29udGVudFR5cGVzID0gZGV0ZWN0Q29udGVudFR5cGVJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy54bWwiKTsKLQkJU3RyaW5nW10geHNkQ29udGVudFR5cGVzID0gZGV0ZWN0Q29udGVudFR5cGVJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy54c2QiKTsKLQotCQkvKgotCQkgKiBJZiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYSBkaXN0aW5jdCBYU0QKLQkJICogY29udGVudCB0eXBlLCBza2lwIHRoZSByZXN0Ci0JCSAqLwotCQlpZiAoIWlkZW50aWNhbENvbnRlbnRzKHhtbENvbnRlbnRUeXBlcywgeHNkQ29udGVudFR5cGVzKSkgewotCQkJTGlzdCB4bWxWYWxpZGF0b3JJRHMgPSBnZXRTb3VyY2VWYWxpZGF0b3JJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy54bWwiKTsKLQkJCWFzc2VydFRydWUoIk5vIFhNTCBzb3VyY2UgdmFsaWRhdG9ycyBmb3VuZCIsICF4bWxWYWxpZGF0b3JJRHMuaXNFbXB0eSgpKTsKLQkJCUxpc3QgeHNkVmFsaWRhdG9ySURzID0gZ2V0U291cmNlVmFsaWRhdG9ySURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMueHNkIik7Ci0JCQlhc3NlcnRUcnVlKCJObyBYU0Qgc291cmNlIHZhbGlkYXRvcnMgZm91bmQiLCAheHNkVmFsaWRhdG9ySURzLmlzRW1wdHkoKSk7Ci0JCQlmb3IgKGludCBpID0gMDsgaSA8IHhtbFZhbGlkYXRvcklEcy5zaXplKCk7IGkrKykgewotCQkJCWFzc2VydFRydWUoIlhNTCBWYWxpZGF0b3IgZm91bmQgb24gWFNEIGlucHV0IiwgIXhzZFZhbGlkYXRvcklEcy5jb250YWlucyh4bWxWYWxpZGF0b3JJRHMuZ2V0KGkpKSk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlTdHJpbmcgbWVzc2FnZSA9ICJObyBkaXN0aW5jdCBYU0QgY29udGVudCB0eXBlIGZvdW5kIHdoaWxlIHJ1bm5pbmcgIiArIGdldENsYXNzKCkuZ2V0TmFtZSgpOwotCQkJU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuV0FSTklORywgbWVzc2FnZSk7Ci0JCX0KLQl9Ci0KLQlwdWJsaWMgdm9pZCB0ZXN0U291cmNlVmFsaWRhdGlvbkVuYWJsZW1lbnRXaXRoVW5yZWxhdGVkQ29udGVudFR5cGVzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0JCVN0cmluZ1tdIGR0ZENvbnRlbnRUeXBlcyA9IGRldGVjdENvbnRlbnRUeXBlSURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMuZHRkIik7Ci0JCVN0cmluZ1tdIGpzcENvbnRlbnRUeXBlcyA9IGRldGVjdENvbnRlbnRUeXBlSURzKCJ0ZXN0VmFsaWRhdG9yQ29uZmlndXJhdGlvbnMuanNwIik7Ci0JCWlmIChkdGRDb250ZW50VHlwZXMubGVuZ3RoID09IDApIHsKLQkJCVN0cmluZyBtZXNzYWdlID0gIk5vIERURCBjb250ZW50IHR5cGUgZm91bmQgd2hpbGUgcnVubmluZyAiICsgZ2V0Q2xhc3MoKS5nZXROYW1lKCk7Ci0JCQlTeXN0ZW0uZXJyLnByaW50bG4obWVzc2FnZSk7Ci0JCQlMb2dnZXIubG9nKExvZ2dlci5XQVJOSU5HLCBtZXNzYWdlKTsKLQkJfQotCQlpZiAoanNwQ29udGVudFR5cGVzLmxlbmd0aCA9PSAwKSB7Ci0JCQlTdHJpbmcgbWVzc2FnZSA9ICJObyBKU1AgY29udGVudCB0eXBlIGZvdW5kIHdoaWxlIHJ1bm5pbmcgIiArIGdldENsYXNzKCkuZ2V0TmFtZSgpOwotCQkJU3lzdGVtLmVyci5wcmludGxuKG1lc3NhZ2UpOwotCQkJTG9nZ2VyLmxvZyhMb2dnZXIuV0FSTklORywgbWVzc2FnZSk7Ci0JCX0KLQotCi0JCWlmIChkdGRDb250ZW50VHlwZXMubGVuZ3RoID4gMCAmJiBqc3BDb250ZW50VHlwZXMubGVuZ3RoID4gMCAmJiAhaWRlbnRpY2FsQ29udGVudHMoZHRkQ29udGVudFR5cGVzLCBqc3BDb250ZW50VHlwZXMpKSB7Ci0JCQlMaXN0IGR0ZFZhbGlkYXRvcklEcyA9IGdldFNvdXJjZVZhbGlkYXRvcklEcygidGVzdFZhbGlkYXRvckNvbmZpZ3VyYXRpb25zLmR0ZCIpOwotCQkJYXNzZXJ0VHJ1ZSgiTm8gRFREIHNvdXJjZSB2YWxpZGF0b3JzIGZvdW5kIiwgIWR0ZFZhbGlkYXRvcklEcy5pc0VtcHR5KCkpOwotCQkJTGlzdCBqc3BWYWxpZGF0b3JJRHMgPSBnZXRTb3VyY2VWYWxpZGF0b3JJRHMoInRlc3RWYWxpZGF0b3JDb25maWd1cmF0aW9ucy5qc3AiKTsKLQkJCWFzc2VydFRydWUoIk5vIEpTUCBzb3VyY2UgdmFsaWRhdG9ycyBmb3VuZCIsICFqc3BWYWxpZGF0b3JJRHMuaXNFbXB0eSgpKTsKLQkJCWludCBkdGRWYWxpZGF0b3JDb3VudCA9IGR0ZFZhbGlkYXRvcklEcy5zaXplKCk7Ci0JCQlkdGRWYWxpZGF0b3JJRHMucmVtb3ZlQWxsKGpzcFZhbGlkYXRvcklEcyk7Ci0JCQlhc3NlcnRFcXVhbHMoInZhbGlkYXRvcnMgZm91bmQgcnVubmluZyBvbiBib3RoIENTUyBhbmQgRFREIiwgZHRkVmFsaWRhdG9yQ291bnQsIGR0ZFZhbGlkYXRvcklEcy5zaXplKCkpOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9WZXJpZnlFZGl0b3JQbHVnaW4uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvVmVyaWZ5RWRpdG9yUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2OTdmYmUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9WZXJpZnlFZGl0b3JQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzCi0gKiBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zCi0gKiBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQKLSAqIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6IElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICogCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5pbnRlcm5hbC5YTUxVSVBsdWdpbjsKLQotcHVibGljIGNsYXNzIFZlcmlmeUVkaXRvclBsdWdpbiBleHRlbmRzIFRlc3RDYXNlIHsKLQotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5FeGlzdHMoKSB7Ci0JCS8vIFRPRE86IHNlZSBodHRwczovL2J1Z3MuZWNsaXBzZS5vcmcvYnVncy9zaG93X2J1Zy5jZ2k/aWQ9ODE1MjcKLQkJYXNzZXJ0VHJ1ZSh0cnVlKTsKLQkJUGx1Z2luIHBsdWdpbiA9IG51bGw7Ci0JCXRyeSB7Ci0JCQlwbHVnaW4gPSBYTUxVSVBsdWdpbi5nZXRJbnN0YW5jZSgpOwotCQl9IGNhdGNoIChFeGNlcHRpb24gZSkgewotCQkJcGx1Z2luID0gbnVsbDsKLQkJfQotCQlhc3NlcnROb3ROdWxsKCJ4bWwgZWRpdG9yIHBsdWdpbiBjb3VsZCBub3QgYmUgaW5zdGFudGlhdGVkIiwgcGx1Z2luKTsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlQcmVmZXJlbmNlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlQcmVmZXJlbmNlc1Rlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDY4NTI2YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL1hNTFVJUHJlZmVyZW5jZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMTUgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqICAgICAKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsYXRmb3JtOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnByZWZlcmVuY2UuSVByZWZlcmVuY2VTdG9yZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLlhNTFVJUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwucHJlZmVyZW5jZXMuWE1MVUlQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZTsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlRXhjZXB0aW9uOwotCi0vKioKLSAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGVzdCBpcyB0byB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIHRoZSBYTUwgU291cmNlIGVkaXRvcgotICogcHJlZmVyZW5jZXMuIFRlc3RzIGluY2x1ZGUgc2V0dGluZy9nZXR0aW5nIHByZWZlcmVuY2VzLgotICogCi0gKiBOT1RFOiBUaGlzIHRlc3Qgc2hvdWxkIGJlIHByZWZvcm1lZCBvbiBhIGNsZWFuIHdvcmtzcGFjZS4gSWYgcGVyZm9ybWVkIG9uCi0gKiBhbiBleGlzdGluZyB3b3Jrc3BhY2UsIHRoaXMgdGVzdCB3aWxsIG1hbmlwdWxhdGUgcHJlZmVyZW5jZXMgaW4gdGhlCi0gKiB3b3Jrc3BhY2UsIHRob3VnaCBhdHRlbXB0cyB3aWxsIGJlIG1hZGUgdG8gcmVzdG9yZSBvcmlnaW5hbCB2YWx1ZXMgYWZ0ZXIKLSAqIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxVSVByZWZlcmVuY2VzVGVzdCBleHRlbmRzIFRlc3RDYXNlIHsKLQkvKioKLQkgKiBUZXN0cyBleGlzdGFuY2Ugb2YgcHJlZmVyZW5jZSB2YWx1ZXMgd2hlbiBnZXR0aW5nIHByZWZlcmVuY2UgdmFsdWVzCi0JICogdGhyb3VnaCBQbGF0Zm9ybS5nZXRQcmVmZXJlbmNlc1NlcnZpY2UoKQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RCdW5kbGVHZXRQcmVmZXJlbmNlcygpIHsKLQkJZmluYWwgU3RyaW5nIGJ1bmRsZU5hbWUgPSAib3JnLmVjbGlwc2Uud3N0LnhtbC51aSI7Ci0KLQkJLy8gbmVlZCB0byBzdGFydCB1cCBidW5kbGUgZm9yIGRlZmF1bHQgdmFsdWVzIHRvIGJlIGxvYWRlZAotCQlCdW5kbGUgYnVuZGxlID0gUGxhdGZvcm0uZ2V0QnVuZGxlKGJ1bmRsZU5hbWUpOwotCQl0cnkgewotCQkJaWYgKGJ1bmRsZSAhPSBudWxsKQotCQkJCWJ1bmRsZS5zdGFydCgpOwotCQkJZWxzZQotCQkJCWZhaWwoIkdldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCBiZWNhdXNlIGNvdWxkIG5vdCBmaW5kIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUpOwotCQl9IGNhdGNoIChCdW5kbGVFeGNlcHRpb24gZSkgewotCQkJZmFpbCgiR2V0IHByZWZlcmVuY2UgdmFsdWUgZmFpbGVkIGJlY2F1c2Ugb2YgZXhjZXB0aW9uIHN0YXJ0aW5nIGJ1bmRsZTogIiArIGJ1bmRsZU5hbWUgKyAiIGV4Y2VwdGlvbjogIiArIGUpOwotCQl9Ci0KLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5BVVRPX1BST1BPU0UpOwotCQlidW5kbGVHZXRQcmVmZXJlbmNlKGJ1bmRsZU5hbWUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFKTsKLQkJYnVuZGxlR2V0UHJlZmVyZW5jZShidW5kbGVOYW1lLCBYTUxVSVByZWZlcmVuY2VOYW1lcy5VU0VfSU5GRVJSRURfR1JBTU1BUik7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBidW5kbGVHZXRQcmVmZXJlbmNlKFN0cmluZyBidW5kbGVOYW1lLCBTdHJpbmcgcHJlZktleSkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CS8vIHJhbmRvbSBzdHJpbmcKLQkJCi0JCVN0cmluZyB2YWx1ZSA9IFBsYXRmb3JtLmdldFByZWZlcmVuY2VzU2VydmljZSgpLmdldFN0cmluZyhidW5kbGVOYW1lLCBwcmVmS2V5LCBkZWZhdWx0VmFsdWUsIG51bGwpOwotCQlhc3NlcnROb3RTYW1lKCJHZXQgcHJlZmVyZW5jZSB2YWx1ZSBmYWlsZWQgdXNpbmcgUGxhdGZvcm0uZ2V0UHJlZmVyZW5jZXNTZXJ2aWNlLiBLZXk6ICIrcHJlZktleSwgZGVmYXVsdFZhbHVlLCB2YWx1ZSk7CQkKLQl9Ci0KLQkvKioKLQkgKiBUZXN0cyBkZWZhdWx0IHZhbHVlcyBvZiBwcmVmZXJlbmNlcy4KLQkgKiAKLQkgKiBOT1RFOiBFeHBlY3RlZCBkZWZhdWx0IHZhbHVlcyBhcmUgaGFyZC1jb2RlZCwgc28gaWYgZGVmYXVsdCB2YWx1ZXMgZG8KLQkgKiBnZXQgY2hhbmdlZCwgYXNzZXJ0aW9ucyBuZWVkIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbAotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RQbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBYTUxVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCQotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFLCBCb29sZWFuLnRvU3RyaW5nKHRydWUpKTsKLQkJcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2Uoc3RvcmUsIFhNTFVJUHJlZmVyZW5jZU5hbWVzLkFVVE9fUFJPUE9TRV9DT0RFLCAiPCIpOwotCQlwbHVnaW5HZXREZWZhdWx0UHJlZmVyZW5jZShzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuVVNFX0lORkVSUkVEX0dSQU1NQVIsIEJvb2xlYW4udG9TdHJpbmcodHJ1ZSkpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgcGx1Z2luR2V0RGVmYXVsdFByZWZlcmVuY2UoSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXksIFN0cmluZyBleHBlY3RlZCkgewotCQlTdHJpbmcgZGVmYXVsdFZhbHVlID0gc3RvcmUuZ2V0RGVmYXVsdFN0cmluZyhwcmVmS2V5KTsKLQkJYXNzZXJ0RXF1YWxzKCJHZXQgZGVmYXVsdCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIrcHJlZktleSwgZXhwZWN0ZWQsIGRlZmF1bHRWYWx1ZSk7Ci0JfQotCi0JLyoqCi0JICogVGVzdHMgc2V0dGluZyBwcmVmZXJlbmNlIHZhbHVlcyBieSBzZXR0aW5nIHByZWZlcmVuY2UgdmFsdWUgdG8gYmUgYQotCSAqIGNlcnRhaW4gdmFsdWUsIHRoZW4gZ2V0dGluZyB0aGUgcHJlZmVyZW5jZSB2YWx1ZSB0byB2ZXJpZnkgaXQgd2FzIHNldC4KLQkgKi8KLQlwdWJsaWMgdm9pZCB0ZXN0UGx1Z2luU2V0UHJlZmVyZW5jZXMoKSB7Ci0JCUlQcmVmZXJlbmNlU3RvcmUgc3RvcmUgPSBYTUxVSVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCk7Ci0JCQotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFKTsKLQkJcGx1Z2luU2V0UHJlZmVyZW5jZVN0cmluZyhzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuQVVUT19QUk9QT1NFX0NPREUpOwotCQlwbHVnaW5TZXRQcmVmZXJlbmNlQm9vbGVhbihzdG9yZSwgWE1MVUlQcmVmZXJlbmNlTmFtZXMuVVNFX0lORkVSUkVEX0dSQU1NQVIpOwotCX0KLQkKLQlwcml2YXRlIHZvaWQgcGx1Z2luU2V0UHJlZmVyZW5jZUJvb2xlYW4oSVByZWZlcmVuY2VTdG9yZSBzdG9yZSwgU3RyaW5nIHByZWZLZXkpIHsKLQkJYm9vbGVhbiBvcmlnaW5hbFZhbHVlID0gc3RvcmUuZ2V0Qm9vbGVhbihwcmVmS2V5KTsKLQkJYm9vbGVhbiBleHBlY3RlZFZhbHVlID0gIW9yaWdpbmFsVmFsdWU7Ci0JCXN0b3JlLnNldFZhbHVlKHByZWZLZXksIGV4cGVjdGVkVmFsdWUpOwotCQlib29sZWFuIGZvdW5kVmFsdWUgPSBzdG9yZS5nZXRCb29sZWFuKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIrcHJlZktleSsiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotCQotCXByaXZhdGUgdm9pZCBwbHVnaW5TZXRQcmVmZXJlbmNlU3RyaW5nKElQcmVmZXJlbmNlU3RvcmUgc3RvcmUsIFN0cmluZyBwcmVmS2V5KSB7CQkKLQkJU3RyaW5nIG9yaWdpbmFsVmFsdWUgPSBzdG9yZS5nZXRTdHJpbmcocHJlZktleSk7Ci0JCVN0cmluZyBleHBlY3RlZFZhbHVlID0gTG9uZy50b1N0cmluZyhTeXN0ZW0uY3VycmVudFRpbWVNaWxsaXMoKSk7CS8vIHJhbmRvbSBzdHJpbmcKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgZXhwZWN0ZWRWYWx1ZSk7Ci0JCVN0cmluZyBmb3VuZFZhbHVlID0gc3RvcmUuZ2V0U3RyaW5nKHByZWZLZXkpOwotCQlhc3NlcnRFcXVhbHMoIlNldCBwcmVmZXJlbmNlIHZhbHVlIGZhaWxlZCB1c2luZyBwbHVnaW4uZ2V0UHJlZmVyZW5jZVN0b3JlLiBLZXk6ICIrcHJlZktleSsiICBleHBlY3RlZDogIiArIGV4cGVjdGVkVmFsdWUgKyAiIGZvdW5kOiAiICsgZm91bmRWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSwgZm91bmRWYWx1ZSk7Ci0KLQkJLy8gYXR0ZW1wdCB0byByZXN0b3JlIG9yaWdpbmFsIHByZWZlcmVuY2UgdmFsdWUKLQkJc3RvcmUuc2V0VmFsdWUocHJlZktleSwgb3JpZ2luYWxWYWx1ZSk7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RTdWl0ZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RTdWl0ZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTYyNmRmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlUZXN0U3VpdGUuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0czsKLQotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuaW50ZXJuYWwudmFsaWRhdGlvbi5UZXN0RGVsZWdhdGluZ1NvdXJjZVZhbGlkYXRvckZvclhNTDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLmludGVybmFsLnZhbGlkYXRpb24uVGVzdE1hcmt1cFZhbGlkYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlci5UZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTDsKLQotCi1wdWJsaWMgY2xhc3MgWE1MVUlUZXN0U3VpdGUgZXh0ZW5kcyBUZXN0U3VpdGUgewotCXB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpIHsKLQkJcmV0dXJuIG5ldyBYTUxVSVRlc3RTdWl0ZSgpOwotCX0KLQotCXB1YmxpYyBYTUxVSVRlc3RTdWl0ZSgpIHsKLQkJc3VwZXIoIlhNTCBVSSBUZXN0IFN1aXRlIik7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShWZXJpZnlFZGl0b3JQbHVnaW4uY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFhNTFVJUHJlZmVyZW5jZXNUZXN0LmNsYXNzKSk7Ci0JCWFkZFRlc3QobmV3IFRlc3RTdWl0ZShUZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTC5jbGFzcykpOwotCQlhZGRUZXN0KG5ldyBUZXN0U3VpdGUoVGVzdEVkaXRvckNvbmZpZ3VyYXRpb25YTUwuY2xhc3MpKTsKLQkJYWRkVGVzdChuZXcgVGVzdFN1aXRlKFRlc3RPcGVuRWRpdG9yWE1MLmNsYXNzKSk7Ci0JCWFkZFRlc3QoKG5ldyBUZXN0U3VpdGUoVGVzdFByb3BlcnR5U2hlZXRDb25maWd1cmF0aW9uLmNsYXNzKSkpOwotCQlhZGRUZXN0U3VpdGUoVGVzdERlbGVnYXRpbmdTb3VyY2VWYWxpZGF0b3JGb3JYTUwuY2xhc3MpOwotCQlhZGRUZXN0U3VpdGUoVGVzdE1hcmt1cFZhbGlkYXRvci5jbGFzcyk7Ci0JCWFkZFRlc3RTdWl0ZShUZXN0UmVjb25jaWxlclhNTC5jbGFzcyk7Ci0JCWFkZFRlc3RTdWl0ZShUZXN0U291cmNlVmFsaWRhdGlvbkZyYW1ld29yay5jbGFzcyk7Ci0JfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvWE1MVUlUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RzUGx1Z2luLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkNDAwYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9YTUxVSVRlc3RzUGx1Z2luLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHM7Ci0KLWltcG9ydCBqYXZhLnV0aWwuUmVzb3VyY2VCdW5kbGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wbHVnaW4uQWJzdHJhY3RVSVBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsKLQotLyoqCi0gKiBUaGUgbWFpbiBwbHVnaW4gY2xhc3MgdG8gYmUgdXNlZCBpbiB0aGUgZGVza3RvcC4KLSAqLwotcHVibGljIGNsYXNzIFhNTFVJVGVzdHNQbHVnaW4gZXh0ZW5kcyBBYnN0cmFjdFVJUGx1Z2luIHsKLQkvL1RoZSBzaGFyZWQgaW5zdGFuY2UuCi0JcHJpdmF0ZSBzdGF0aWMgWE1MVUlUZXN0c1BsdWdpbiBwbHVnaW47Ci0KLQkvKioKLQkgKiBUaGUgY29uc3RydWN0b3IuCi0JICovCi0JcHVibGljIFhNTFVJVGVzdHNQbHVnaW4oKSB7Ci0JCXN1cGVyKCk7Ci0JCXBsdWdpbiA9IHRoaXM7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gcGx1Zy1pbiBhY3RpdmF0aW9uCi0JICovCi0JcHVibGljIHZvaWQgc3RhcnQoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RhcnQoY29udGV4dCk7Ci0JfQotCi0JLyoqCi0JICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gdGhlIHBsdWctaW4gaXMgc3RvcHBlZAotCSAqLwotCXB1YmxpYyB2b2lkIHN0b3AoQnVuZGxlQ29udGV4dCBjb250ZXh0KSB0aHJvd3MgRXhjZXB0aW9uIHsKLQkJc3VwZXIuc3RvcChjb250ZXh0KTsKLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBzaGFyZWQgaW5zdGFuY2UuCi0JICovCi0JcHVibGljIHN0YXRpYyBYTUxVSVRlc3RzUGx1Z2luIGdldERlZmF1bHQoKSB7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotCi0JLyoqCi0JICogUmV0dXJucyB0aGUgc3RyaW5nIGZyb20gdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKiBvciAna2V5JyBpZiBub3QgZm91bmQuCi0JICovCi0JcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0UmVzb3VyY2VTdHJpbmcoU3RyaW5nIGtleSkgewotCQlyZXR1cm4ga2V5OwotCX0KLQotCS8qKgotCSAqIFJldHVybnMgdGhlIHBsdWdpbidzIHJlc291cmNlIGJ1bmRsZSwKLQkgKi8KLQlwdWJsaWMgUmVzb3VyY2VCdW5kbGUgZ2V0UmVzb3VyY2VCdW5kbGUoKSB7Ci0JCXJldHVybiBudWxsOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2JyZWFrcG9pbnRzL0JyZWFrcG9pbnRFcnJvclByb3ZpZGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2JyZWFrcG9pbnRzL0JyZWFrcG9pbnRFcnJvclByb3ZpZGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiZmMyZDQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy9icmVha3BvaW50cy9CcmVha3BvaW50RXJyb3JQcm92aWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNjQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLmJyZWFrcG9pbnRzOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSUZpbGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuSVJlc291cmNlOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5JU3RhdHVzOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5TdGF0dXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwucHJvdmlzaW9uYWwuZXh0ZW5zaW9ucy5JU291cmNlRWRpdGluZ1RleHRUb29sczsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MVUlUZXN0c1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgQnJlYWtwb2ludEVycm9yUHJvdmlkZXIgaW1wbGVtZW50cyBJQnJlYWtwb2ludFByb3ZpZGVyIHsKLQotCUlTb3VyY2VFZGl0aW5nVGV4dFRvb2xzIGZUb29sOwotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyI2FkZEJyZWFrcG9pbnQob3JnLnczYy5kb20uRG9jdW1lbnQsCi0JICogICAgICBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklEb2N1bWVudCwgb3JnLmVjbGlwc2UudWkuSUVkaXRvcklucHV0LAotCSAqICAgICAgb3JnLnczYy5kb20uTm9kZSwgaW50LCBpbnQpCi0JICovCi0JcHVibGljIElTdGF0dXMgYWRkQnJlYWtwb2ludChJRG9jdW1lbnQgaWRvYywgSUVkaXRvcklucHV0IGlucHV0LCBpbnQgbGluZU51bWJlciwgaW50IG9mZnNldCkgdGhyb3dzIENvcmVFeGNlcHRpb24gewotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGUgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZiAoZW5hYmxlKQotCQkJcmV0dXJuIG5ldyBTdGF0dXMoSVN0YXR1cy5FUlJPUiwgWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0QnVuZGxlKCkuZ2V0U3ltYm9saWNOYW1lKCksIElTdGF0dXMuRVJST1IsICJUZXN0IEVycm9yISIsIG51bGwpOwotCQlyZXR1cm4gbmV3IFN0YXR1cyhJU3RhdHVzLk9LLCBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRCdW5kbGUoKS5nZXRTeW1ib2xpY05hbWUoKSwgSVN0YXR1cy5PSywgIiIsIG51bGwpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb25zLmJyZWFrcG9pbnQuSUJyZWFrcG9pbnRQcm92aWRlciNnZXRSZXNvdXJjZShvcmcuZWNsaXBzZS51aS5JRWRpdG9ySW5wdXQpCi0JICovCi0JcHVibGljIElSZXNvdXJjZSBnZXRSZXNvdXJjZShJRWRpdG9ySW5wdXQgaW5wdXQpIHsKLQkJSVJlc291cmNlIHJlcyA9IChJUmVzb3VyY2UpIGlucHV0LmdldEFkYXB0ZXIoSUZpbGUuY2xhc3MpOwotCQlpZiAocmVzID09IG51bGwpCi0JCQlyZXMgPSAoSVJlc291cmNlKSBpbnB1dC5nZXRBZGFwdGVyKElSZXNvdXJjZS5jbGFzcyk7Ci0JCXJldHVybiByZXM7Ci0JfQotCi0JLyoKLQkgKiAobm9uLUphdmFkb2MpCi0JICogCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmV4dGVuc2lvbnMuYnJlYWtwb2ludC5JQnJlYWtwb2ludFByb3ZpZGVyI3NldFNvdXJjZUVkaXRpbmdUZXh0VG9vbHMob3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb25zLmJyZWFrcG9pbnQuU291cmNlRWRpdGluZ1RleHRUb29scykKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRTb3VyY2VFZGl0aW5nVGV4dFRvb2xzKElTb3VyY2VFZGl0aW5nVGV4dFRvb2xzIHRvb2wpIHsKLQkJZlRvb2wgPSB0b29sOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL2JyZWFrcG9pbnRzL0VuYWJsZVdhcm5pbmdBY3Rpb24uamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvYnJlYWtwb2ludHMvRW5hYmxlV2FybmluZ0FjdGlvbi5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MDYyY2NlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvYnJlYWtwb2ludHMvRW5hYmxlV2FybmluZ0FjdGlvbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTE0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy5icmVha3BvaW50czsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSW1hZ2VEZXNjcmlwdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuSUV4dGVuZGVkRWRpdG9yQWN0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuSUV4dGVuZGVkU2ltcGxlRWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuWE1MVUlUZXN0c1BsdWdpbjsKLQotCi1wdWJsaWMgY2xhc3MgRW5hYmxlV2FybmluZ0FjdGlvbiBleHRlbmRzIEFjdGlvbiBpbXBsZW1lbnRzIElFeHRlbmRlZEVkaXRvckFjdGlvbiB7Ci0JSUV4dGVuZGVkU2ltcGxlRWRpdG9yIGFjdGl2ZUVkaXRvcjsKLQotCXB1YmxpYyBFbmFibGVXYXJuaW5nQWN0aW9uKCkgewotCQlzdXBlcigpOwotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGVkID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbigiYnJlYWstZXJyb3IiKTsKLQkJaWYoZW5hYmxlZCkKLQkJCXNldFRleHQoIkRpc2FibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQkJZWxzZQotCQkJc2V0VGV4dCgiRW5hYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRleHQKLQkgKi8KLQlwdWJsaWMgRW5hYmxlV2FybmluZ0FjdGlvbihTdHJpbmcgdGV4dCkgewotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXREZWZhdWx0KCJicmVhay1lcnJvciIsIGZhbHNlKTsKLQkJYm9vbGVhbiBlbmFibGVkID0gWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuZ2V0Qm9vbGVhbigiYnJlYWstZXJyb3IiKTsKLQkJaWYoZW5hYmxlZCkKLQkJCXNldFRleHQoIkRpc2FibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQkJZWxzZQotCQkJc2V0VGV4dCgiRW5hYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JfQotCi0JLyoqCi0JICogQHBhcmFtIHRleHQKLQkgKiBAcGFyYW0gaW1hZ2UKLQkgKi8KLQlwdWJsaWMgRW5hYmxlV2FybmluZ0FjdGlvbihTdHJpbmcgdGV4dCwgSW1hZ2VEZXNjcmlwdG9yIGltYWdlKSB7Ci0JCVhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLnNldERlZmF1bHQoImJyZWFrLWVycm9yIiwgZmFsc2UpOwotCQlib29sZWFuIGVuYWJsZWQgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlpZihlbmFibGVkKQotCQkJc2V0VGV4dCgiRGlzYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCQllbHNlCi0JCQlzZXRUZXh0KCJFbmFibGUgQnJlYWtwb2ludCBFcnJvcnMiKTsKLQl9Ci0KLQkvKioKLQkgKiBAcGFyYW0gdGV4dAotCSAqIEBwYXJhbSBzdHlsZQotCSAqLwotCXB1YmxpYyBFbmFibGVXYXJuaW5nQWN0aW9uKFN0cmluZyB0ZXh0LCBpbnQgc3R5bGUpIHsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gZW5hYmxlZCA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldEJvb2xlYW4oImJyZWFrLWVycm9yIik7Ci0JCWlmKGVuYWJsZWQpCi0JCQlzZXRUZXh0KCJEaXNhYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JCWVsc2UKLQkJCXNldFRleHQoIkVuYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb24uSUV4dGVuZGVkRWRpdG9yQWN0aW9uI2lzVmlzaWJsZSgpCi0JICovCi0JcHVibGljIGJvb2xlYW4gaXNWaXNpYmxlKCkgewotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5JQWN0aW9uI3J1bigpCi0JICovCi0JcHVibGljIHZvaWQgcnVuKCkgewotCQlzdXBlci5ydW4oKTsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gdmFsdWUgPSBYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5nZXRCb29sZWFuKCJicmVhay1lcnJvciIpOwotCQlYTUxVSVRlc3RzUGx1Z2luLmdldERlZmF1bHQoKS5nZXRQcmVmZXJlbmNlU3RvcmUoKS5zZXRWYWx1ZSgiYnJlYWstZXJyb3IiLCAhdmFsdWUpOwotCX0KLQotCS8qCi0JICogKG5vbi1KYXZhZG9jKQotCSAqIAotCSAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5leHRlbnNpb24uSUV4dGVuZGVkRWRpdG9yQWN0aW9uI3NldEFjdGl2ZUV4dGVuZGVkRWRpdG9yKG9yZy5lY2xpcHNlLndzdC5zc2UudWkuZXh0ZW5zaW9uLklFeHRlbmRlZFNpbXBsZUVkaXRvcikKLQkgKi8KLQlwdWJsaWMgdm9pZCBzZXRBY3RpdmVFeHRlbmRlZEVkaXRvcihJRXh0ZW5kZWRTaW1wbGVFZGl0b3IgdGFyZ2V0RWRpdG9yKSB7Ci0JCWFjdGl2ZUVkaXRvciA9IHRhcmdldEVkaXRvcjsKLQl9Ci0KLQkvKgotCSAqIChub24tSmF2YWRvYykKLQkgKiAKLQkgKiBAc2VlIG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVVwZGF0ZSN1cGRhdGUoKQotCSAqLwotCXB1YmxpYyB2b2lkIHVwZGF0ZSgpIHsKLQkJWE1MVUlUZXN0c1BsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UHJlZmVyZW5jZVN0b3JlKCkuc2V0RGVmYXVsdCgiYnJlYWstZXJyb3IiLCBmYWxzZSk7Ci0JCWJvb2xlYW4gZW5hYmxlZCA9IFhNTFVJVGVzdHNQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFByZWZlcmVuY2VTdG9yZSgpLmdldEJvb2xlYW4oImJyZWFrLWVycm9yIik7Ci0JCWlmKGVuYWJsZWQpCi0JCQlzZXRUZXh0KCJEaXNhYmxlIEJyZWFrcG9pbnQgRXJyb3JzIik7Ci0JCWVsc2UKLQkJCXNldFRleHQoIkVuYWJsZSBCcmVha3BvaW50IEVycm9ycyIpOwotCX0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC91aS90ZXN0cy92aWV3ZXIvVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25YTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIzMjIzYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL3ZpZXdlci9UZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLQlwYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMudmlld2VyOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JQXV0b0VkaXRTdHJhdGVneTsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LklJbmZvcm1hdGlvbkNvbnRyb2xDcmVhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHREb3VibGVDbGlja1N0cmF0ZWd5OwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuSVRleHRIb3ZlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LmNvbnRlbnRhc3Npc3QuSUNvbnRlbnRBc3Npc3RhbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5mb3JtYXR0ZXIuSUNvbnRlbnRGb3JtYXR0ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5oeXBlcmxpbmsuSUh5cGVybGlua0RldGVjdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQuaW5mb3JtYXRpb24uSUluZm9ybWF0aW9uUHJlc2VudGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnRleHQucmVjb25jaWxlci5JUmVjb25jaWxlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5qZmFjZS50ZXh0LnNvdXJjZS5JQW5ub3RhdGlvbkhvdmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5TV1Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29tcG9zaXRlOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC53aWRnZXRzLkRpc3BsYXk7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuU2hlbGw7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkuUGxhdGZvcm1VSTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUudGV4dC5JU3RydWN0dXJlZFBhcnRpdGlvbnM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnNzZS51aS5pbnRlcm5hbC5TdHJ1Y3R1cmVkVGV4dFZpZXdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLmludGVybmFsLnByb3Zpc2lvbmFsLnN0eWxlLkxpbmVTdHlsZVByb3ZpZGVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS50ZXh0LklYTUxQYXJ0aXRpb25zOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMuTG9nZ2VyOwotCi0vKioKLSAqIEBhdXRob3IgcGF2ZXJ5Ci0gKi8KLXB1YmxpYyBjbGFzcyBUZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTCBleHRlbmRzIFRlc3RDYXNlIHsKLSAgICAKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvblhNTCBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIGJvb2xlYW4gZkRpc3BsYXlFeGlzdHMgPSB0cnVlOwotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlZpZXdlciA9IG51bGw7Ci0JcHJpdmF0ZSBib29sZWFuIGlzU2V0dXAgPSBmYWxzZTsKLQkKLSAgICBwdWJsaWMgVGVzdFZpZXdlckNvbmZpZ3VyYXRpb25YTUwoKSB7Ci0gICAgICAgIHN1cGVyKCJUZXN0Vmlld2VyQ29uZmlndXJhdGlvblhNTCIpOwotICAgIH0KLSAgICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpIHRocm93cyBFeGNlcHRpb24gewotCQkKLSAgICAJc3VwZXIuc2V0VXAoKTsKLQkJaWYoIXRoaXMuaXNTZXR1cCl7Ci0JCQlzZXRVcFZpZXdlckNvbmZpZ3VyYXRpb24oKTsKLQkJCXRoaXMuaXNTZXR1cCA9IHRydWU7Ci0JCX0KLSAgICB9Ci0JCi0JcHJpdmF0ZSB2b2lkIHNldFVwVmlld2VyQ29uZmlndXJhdGlvbigpIHsKLQkJCi0JCS8vIHNvbWUgdGVzdCBlbnZpcm9ubWVudHMgbWlnaHQgbm90IGhhdmUgYSAicmVhbCIgZGlzcGxheQotCQlpZihEaXNwbGF5LmdldEN1cnJlbnQoKSAhPSBudWxsKSB7Ci0JCQkKLQkJCVNoZWxsIHNoZWxsID0gbnVsbDsKLQkJCUNvbXBvc2l0ZSBwYXJlbnQgPSBudWxsOwotCQkJCi0JCQlpZihQbGF0Zm9ybVVJLmlzV29ya2JlbmNoUnVubmluZygpKSB7Ci0JCQkJc2hlbGwgPSBQbGF0Zm9ybVVJLmdldFdvcmtiZW5jaCgpLmdldEFjdGl2ZVdvcmtiZW5jaFdpbmRvdygpLmdldFNoZWxsKCk7Ci0JCQl9Ci0JCQllbHNlIHsJCi0JCQkJc2hlbGwgPSBuZXcgU2hlbGwoRGlzcGxheS5nZXRDdXJyZW50KCkpOwotCQkJfQotCQkJcGFyZW50ID0gbmV3IENvbXBvc2l0ZShzaGVsbCwgU1dULk5PTkUpOwotCQkJCi0JCQkvLyBkdW1teSB2aWV3ZXIKLQkJCWZWaWV3ZXIgPSBuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXIocGFyZW50LCBudWxsLCBudWxsLCBmYWxzZSwgU1dULk5PTkUpOwotCQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUwoKTsKLQkJfQotCQllbHNlIHsKLQkJCWZEaXNwbGF5RXhpc3RzID0gZmFsc2U7Ci0JCQlMb2dnZXIubG9nKExvZ2dlci5JTkZPLCAiUmVtZW1iZXIsIHZpZXdlciBjb25maWd1cmF0aW9uIHRlc3RzIGFyZSBub3QgcnVuIGJlY2F1c2Ugd29ya2JlbmNoIGlzIG5vdCBvcGVuIChub3JtYWwgb24gYnVpbGQgbWFjaGluZSkiKTsKLQkJfQotCX0KLSAgICAKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldEFubm90YXRpb25Ib3ZlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUFubm90YXRpb25Ib3ZlciBob3ZlciA9IGZDb25maWcuZ2V0QW5ub3RhdGlvbkhvdmVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJBbm5vdGF0aW9uSG92ZXIgaXMgbnVsbCIsIGhvdmVyKTsKLSAgICB9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEF1dG9FZGl0U3RyYXRlZ2llcygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJCi0JCUlBdXRvRWRpdFN0cmF0ZWd5W10gc3RyYXRlZ2llcyA9IGZDb25maWcuZ2V0QXV0b0VkaXRTdHJhdGVnaWVzKGZWaWV3ZXIsIElYTUxQYXJ0aXRpb25zLlhNTF9ERUZBVUxUKTsKLQkJYXNzZXJ0Tm90TnVsbChzdHJhdGVnaWVzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGF1dG8gZWRpdCBzdHJhdGVnaWVzIiwgc3RyYXRlZ2llcy5sZW5ndGggPiAwKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbmZpZ3VyZWRDb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoY29uZmlndXJlZENvbnRlbnRUeXBlcyk7Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGNvbnRlbnQgdHlwZXMiLCBjb25maWd1cmVkQ29udGVudFR5cGVzLmxlbmd0aCA+IDApOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRBc3Npc3RhbnQoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50QXNzaXN0YW50IGNhID0gZkNvbmZpZy5nZXRDb250ZW50QXNzaXN0YW50KGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGFzc2lzdGFudCIsIGNhKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldENvbnRlbnRGb3JtYXR0ZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlDb250ZW50Rm9ybWF0dGVyIGNmID0gZkNvbmZpZy5nZXRDb250ZW50Rm9ybWF0dGVyKGZWaWV3ZXIpOwotCQlhc3NlcnROb3ROdWxsKCJ0aGVyZSBpcyBubyBjb250ZW50IGZvcm1hdHRlciIsIGNmKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldERvdWJsZUNsaWNrU3RyYXRlZ3koKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0RG91YmxlQ2xpY2tTdHJhdGVneSBzdHJhdGVneSA9IGZDb25maWcuZ2V0RG91YmxlQ2xpY2tTdHJhdGVneShmVmlld2VyLCBjb250ZW50VHlwZXNbaV0pOwotCQkJaWYoc3RyYXRlZ3kgIT0gbnVsbCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCQlhc3NlcnRUcnVlKCJ0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBkb3VibGUgY2xpY2sgc3RyYXRlZ2llcyIsIGZhbHNlKTsKLQl9Ci0JCi0JcHVibGljIHZvaWQgdGVzdEdldEh5cGVybGlua0RldGVjdG9ycygpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUh5cGVybGlua0RldGVjdG9yW10gZGV0ZWN0b3JzID0gZkNvbmZpZy5nZXRIeXBlcmxpbmtEZXRlY3RvcnMoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoInRoZXJlIGFyZSBubyBoeXBlcmxpbmsgZGV0ZWN0b3JzIiwgZGV0ZWN0b3JzKTsKLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGh5cGVybGluayBkZXRlY3RvcnMiLCBkZXRlY3RvcnMubGVuZ3RoID4gMCk7Ci0JfQotCQotICAgIHB1YmxpYyB2b2lkIHRlc3RHZXRJbmRlbnRQcmVmaXhlcygpIHsKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0JCQotCQlTdHJpbmdbXSBjb250ZW50VHlwZXMgPSBmQ29uZmlnLmdldENvbmZpZ3VyZWRDb250ZW50VHlwZXMoZlZpZXdlcik7Ci0JCWZvciAoaW50IGkgPSAwOyBpIDwgY29udGVudFR5cGVzLmxlbmd0aDsgaSsrKSB7Ci0JCQlTdHJpbmcgcHJlZml4ZXNbXSA9IGZDb25maWcuZ2V0SW5kZW50UHJlZml4ZXMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByZWZpeGVzICE9IG51bGwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJYXNzZXJ0VHJ1ZSgidGhlcmUgYXJlIG5vIGNvbmZpZ3VyZWQgaW5kZW50IHByZWZpeGVzIiwgZmFsc2UpOwotCX0KLSAgICAKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0gICAgcHVibGljIHZvaWQgdGVzdEdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoKSB7Ci0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaW5mb0NyZWF0b3IgPSBmQ29uZmlnLmdldEluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uQ29udHJvbENyZWF0b3IgaXMgbnVsbCIsIGluZm9DcmVhdG9yKTsKLSAgICB9Ci0JCi0JLyoqCi0JICogTm90IG5lY2Vzc2FyeQotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RHZXRJbmZvcm1hdGlvblByZXNlbnRlcigpIHsKLQkJCi0JCS8vIHByb2JhYmx5IG5vIGRpc3BsYXkKLQkJaWYoIWZEaXNwbGF5RXhpc3RzKQotCQkJcmV0dXJuOwotCQkKLQkJSUluZm9ybWF0aW9uUHJlc2VudGVyIHByZXNlbnRlciA9IGZDb25maWcuZ2V0SW5mb3JtYXRpb25QcmVzZW50ZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIkluZm9ybWF0aW9uUHJlc2VudGVyIGlzIG51bGwiLCBwcmVzZW50ZXIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0TGluZVN0eWxlUHJvdmlkZXJzKCkgewotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCVN0cmluZ1tdIGNvbnRlbnRUeXBlcyA9IGZDb25maWcuZ2V0Q29uZmlndXJlZENvbnRlbnRUeXBlcyhmVmlld2VyKTsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZW50VHlwZXMubGVuZ3RoOyBpKyspIHsKLQkJCUxpbmVTdHlsZVByb3ZpZGVyIHByb3ZpZGVyc1tdID0gZkNvbmZpZy5nZXRMaW5lU3R5bGVQcm92aWRlcnMoZlZpZXdlciwgY29udGVudFR5cGVzW2ldKTsKLQkJCWlmKHByb3ZpZGVycyAhPSBudWxsKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCWFzc2VydFRydWUoInRoZXJlIGFyZSBubyBjb25maWd1cmVkIGxpbmUgc3R5bGUgcHJvdmlkZXJzIiwgZmFsc2UpOwotCX0KLQkKLQkvKioKLQkgKiBOb3QgbmVjZXNzYXJ5Ci0JICovCi0JcHVibGljIHZvaWQgdGVzdEdldFJlY29uY2lsZXIoKSB7Ci0JCQotCQkvLyBwcm9iYWJseSBubyBkaXNwbGF5Ci0JCWlmKCFmRGlzcGxheUV4aXN0cykKLQkJCXJldHVybjsKLQkJCi0JCUlSZWNvbmNpbGVyIHIgPSBmQ29uZmlnLmdldFJlY29uY2lsZXIoZlZpZXdlcik7Ci0JCWFzc2VydE5vdE51bGwoIlJlY29uY2lsZXIgaXMgbnVsbCIsIHIpOwotCX0KLQkKLQlwdWJsaWMgdm9pZCB0ZXN0R2V0VGV4dEhvdmVyKCkgewotCQkKLQkJLy8gcHJvYmFibHkgbm8gZGlzcGxheQotCQlpZighZkRpc3BsYXlFeGlzdHMpCi0JCQlyZXR1cm47Ci0KLQkJU3RyaW5nW10gaG92ZXJQYXJ0aXRpb25zID0gbmV3IFN0cmluZ1tde0lTdHJ1Y3R1cmVkUGFydGl0aW9ucy5ERUZBVUxUX1BBUlRJVElPTiwgSVhNTFBhcnRpdGlvbnMuWE1MX0RFRkFVTFR9OwotCQkKLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBob3ZlclBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHsKLQkJCUlUZXh0SG92ZXIgaG92ZXIgPSBmQ29uZmlnLmdldFRleHRIb3ZlcihmVmlld2VyLCBob3ZlclBhcnRpdGlvbnNbaV0sIFNXVC5OT05FKTsKLQkJCWFzc2VydE5vdE51bGwoImhvdmVyIHdhcyBudWxsIGZvciBwYXJ0aXRpb246ICIgKyBob3ZlclBhcnRpdGlvbnNbaV0sIGhvdmVyKTsKLQkJfQotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RYTUwuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdWkvdGVzdHMvdmlld2VyL1ZpZXdlclRlc3RYTUwuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmNkNzQzMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3VpL3Rlc3RzL3ZpZXdlci9WaWV3ZXJUZXN0WE1MLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MDAgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLnZpZXdlcjsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5BY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuYWN0aW9uLklDb250cmlidXRpb25NYW5hZ2VyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLmFjdGlvbi5TZXBhcmF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UuZGlhbG9ncy5EaWFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UucmVzb3VyY2UuSkZhY2VSZXNvdXJjZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2UudGV4dC5JRG9jdW1lbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5JU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyOwotaW1wb3J0IG9yZy5lY2xpcHNlLmpmYWNlLnZpZXdlcnMuSVN0cnVjdHVyZWRTZWxlY3Rpb247Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uudmlld2Vycy5TZWxlY3Rpb25DaGFuZ2VkRXZlbnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuamZhY2Uud2luZG93LldpbmRvdzsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QuU1dUOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5jdXN0b20uQnVzeUluZGljYXRvcjsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3QubGF5b3V0LkdyaWREYXRhOwotaW1wb3J0IG9yZy5lY2xpcHNlLnN3dC5sYXlvdXQuR3JpZExheW91dDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5Db21wb3NpdGU7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uuc3d0LndpZGdldHMuQ29udHJvbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5MYWJlbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5TaGVsbDsKLWltcG9ydCBvcmcuZWNsaXBzZS5zd3Qud2lkZ2V0cy5UZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklFZGl0b3JQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklNZW1lbnRvOwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLklWaWV3U2l0ZTsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5QYXJ0SW5pdEV4Y2VwdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS51aS5wYXJ0LlZpZXdQYXJ0OwotaW1wb3J0IG9yZy5lY2xpcHNlLnVpLnRleHRlZGl0b3IuSVRleHRFZGl0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UudWkudmlld3MuY29udGVudG91dGxpbmUuSUNvbnRlbnRPdXRsaW5lUGFnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuU3RydWN0dXJlZE1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSU1vZGVsTWFuYWdlcjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLmNvcmUuaW50ZXJuYWwucHJvdmlzaW9uYWwuSW5kZXhlZFJlZ2lvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3Quc3NlLnVpLlN0cnVjdHVyZWRUZXh0RWRpdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC5zc2UudWkuaW50ZXJuYWwuU3RydWN0dXJlZFRleHRWaWV3ZXI7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByb3Zpc2lvbmFsLmNvbnRlbnR0eXBlLkNvbnRlbnRUeXBlSWRGb3JYTUw7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC51aS5TdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUw7Ci1pbXBvcnQgb3JnLnczYy5kb20uQXR0cjsKLQotCi1wdWJsaWMgY2xhc3MgVmlld2VyVGVzdFhNTCBleHRlbmRzIFZpZXdQYXJ0IHsKLQkvKioKLQkgKiBTZXRzIHRoZSB2aWV3ZXIncyBoaWdobGlnaHRpbmcgdGV4dCByYW5nZSB0byB0aGUgdGV4dCByYW5nZSBpbmRpY2F0ZWQKLQkgKiBieSB0aGUgc2VsZWN0ZWQgTm9kZXMuCi0JICovCi0JcHJvdGVjdGVkIGNsYXNzIE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyIGltcGxlbWVudHMgSVNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lciB7Ci0JCXB1YmxpYyB2b2lkIHNlbGVjdGlvbkNoYW5nZWQoU2VsZWN0aW9uQ2hhbmdlZEV2ZW50IGV2ZW50KSB7Ci0JCQlpZiAoIWV2ZW50LmdldFNlbGVjdGlvbigpLmlzRW1wdHkoKSAmJiBldmVudC5nZXRTZWxlY3Rpb24oKSBpbnN0YW5jZW9mIElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSB7Ci0JCQkJSVN0cnVjdHVyZWRTZWxlY3Rpb24gc2VsZWN0aW9uID0gKElTdHJ1Y3R1cmVkU2VsZWN0aW9uKSBldmVudC5nZXRTZWxlY3Rpb24oKTsKLQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBzZWxlY3Rpb24uZ2V0Rmlyc3RFbGVtZW50KCk7Ci0JCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIHNlbGVjdGlvbi50b0FycmF5KClbc2VsZWN0aW9uLnNpemUoKSAtIDFdOwotCi0JCQkJaWYgKHN0YXJ0Tm9kZSBpbnN0YW5jZW9mIEF0dHIpCi0JCQkJCXN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIHN0YXJ0Tm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0JCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQllbmROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgZW5kTm9kZSkuZ2V0T3duZXJFbGVtZW50KCk7Ci0KLQkJCQlpbnQgc3RhcnQgPSBzdGFydE5vZGUuZ2V0U3RhcnRPZmZzZXQoKTsKLQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRWaXNpYmxlUmVnaW9uKHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0JCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlwcm90ZWN0ZWQgY2xhc3MgTnVtYmVySW5wdXREaWFsb2cgZXh0ZW5kcyBEaWFsb2cgewotCQlwdWJsaWMgVGV4dCBsZW5ndGg7Ci0KLQkJaW50IGxlbmd0aFZhbHVlOwotCQlwdWJsaWMgVGV4dCBzdGFydDsKLQkJaW50IHN0YXJ0VmFsdWU7Ci0KLQkJcHVibGljIE51bWJlcklucHV0RGlhbG9nKFNoZWxsIHNoZWxsKSB7Ci0JCQlzdXBlcihzaGVsbCk7Ci0JCX0KLQotCQlwcm90ZWN0ZWQgQ29udHJvbCBjcmVhdGVEaWFsb2dBcmVhKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJCUNvbXBvc2l0ZSBjb21wb3NpdGUgPSAoQ29tcG9zaXRlKSBzdXBlci5jcmVhdGVEaWFsb2dBcmVhKHBhcmVudCk7Ci0JCQlDb21wb3NpdGUgY29udGFpbmVyID0gbmV3IENvbXBvc2l0ZShjb21wb3NpdGUsIFNXVC5OVUxMKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQkJCWNvbnRhaW5lci5zZXRMYXlvdXQobmV3IEdyaWRMYXlvdXQoMiwgdHJ1ZSkpOwotCQkJc2V0U2hlbGxTdHlsZShnZXRTaGVsbCgpLmdldFN0eWxlKCkgfCBTV1QuUkVTSVpFKTsKLQotCQkJTGFiZWwgbGFiZWwgPSBuZXcgTGFiZWwoY29udGFpbmVyLCBTV1QuTlVMTCk7Ci0JCQlsYWJlbC5zZXRUZXh0KCJTdGFydCIpOwotCQkJbGFiZWwuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxhYmVsID0gbmV3IExhYmVsKGNvbnRhaW5lciwgU1dULk5VTEwpOwotCQkJbGFiZWwuc2V0VGV4dCgiTGVuZ3RoIik7Ci0JCQlsYWJlbC5zZXRMYXlvdXREYXRhKG5ldyBHcmlkRGF0YShHcmlkRGF0YS5GSUxMX0JPVEgpKTsKLQotCQkJc3RhcnQgPSBuZXcgVGV4dChjb250YWluZXIsIFNXVC5CT1JERVIpOwotCQkJc3RhcnRWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldE9mZnNldCgpOwotCQkJc3RhcnQuc2V0VGV4dCgiIiArIHN0YXJ0VmFsdWUpOwotCQkJc3RhcnQuc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCWxlbmd0aCA9IG5ldyBUZXh0KGNvbnRhaW5lciwgU1dULkJPUkRFUik7Ci0JCQlsZW5ndGhWYWx1ZSA9IGZTb3VyY2VWaWV3ZXIuZ2V0VmlzaWJsZVJlZ2lvbigpLmdldExlbmd0aCgpOwotCQkJbGVuZ3RoLnNldFRleHQoIiIgKyBsZW5ndGhWYWx1ZSk7Ci0JCQlsZW5ndGguc2V0TGF5b3V0RGF0YShuZXcgR3JpZERhdGEoR3JpZERhdGEuRklMTF9CT1RIKSk7Ci0KLQkJCS8vIHN0YXJ0LmFkZE1vZGlmeUxpc3RlbmVyKG5ldyBNb2RpZnlMaXN0ZW5lcigpIHsKLQkJCS8vIHB1YmxpYyB2b2lkIG1vZGlmeVRleHQoTW9kaWZ5RXZlbnQgZSkgewotCQkJLy8gaWYgKGUud2lkZ2V0ID09IHN0YXJ0KSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gc3RhcnRWYWx1ZSA9IEludGVnZXIuZGVjb2RlKHN0YXJ0LmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCS8vIH0KLQkJCS8vIGNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCS8vIHN0YXJ0VmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQkvLyBsZW5ndGguYWRkTW9kaWZ5TGlzdGVuZXIobmV3IE1vZGlmeUxpc3RlbmVyKCkgewotCQkJLy8gcHVibGljIHZvaWQgbW9kaWZ5VGV4dChNb2RpZnlFdmVudCBlKSB7Ci0JCQkvLyBpZiAoZS53aWRnZXQgPT0gbGVuZ3RoKSB7Ci0JCQkvLyB0cnkgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSBJbnRlZ2VyLmRlY29kZShsZW5ndGguZ2V0VGV4dCgpKS5pbnRWYWx1ZSgpOwotCQkJLy8gfQotCQkJLy8gY2F0Y2ggKE51bWJlckZvcm1hdEV4Y2VwdGlvbiBlMikgewotCQkJLy8gbGVuZ3RoVmFsdWUgPSAwOwotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfQotCQkJLy8gfSk7Ci0KLQkJCXJldHVybiBjb21wb3NpdGU7Ci0JCX0KLQotCQkvKgotCQkgKiAobm9uLUphdmFkb2MpCi0JCSAqIAotCQkgKiBAc2VlIG9yZy5lY2xpcHNlLmpmYWNlLmRpYWxvZ3MuRGlhbG9nI29rUHJlc3NlZCgpCi0JCSAqLwotCQlwcm90ZWN0ZWQgdm9pZCBva1ByZXNzZWQoKSB7Ci0JCQl0cnkgewotCQkJCXN0YXJ0VmFsdWUgPSBJbnRlZ2VyLmRlY29kZShzdGFydC5nZXRUZXh0KCkpLmludFZhbHVlKCk7Ci0JCQl9Ci0JCQljYXRjaCAoTnVtYmVyRm9ybWF0RXhjZXB0aW9uIGUyKSB7Ci0JCQkJc3RhcnRWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQl0cnkgewotCQkJCWxlbmd0aFZhbHVlID0gSW50ZWdlci5kZWNvZGUobGVuZ3RoLmdldFRleHQoKSkuaW50VmFsdWUoKTsKLQkJCX0KLQkJCWNhdGNoIChOdW1iZXJGb3JtYXRFeGNlcHRpb24gZTIpIHsKLQkJCQlsZW5ndGhWYWx1ZSA9IDA7Ci0JCQl9Ci0JCQlzdXBlci5va1ByZXNzZWQoKTsKLQkJfQotCX0KLQotCXByaXZhdGUgZmluYWwgU3RyaW5nIERFRkFVTFRfVklFV0VSX0NPTlRFTlRTID0gIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48IURPQ1RZUEUgdGFnbGliIFBVQkxJQyBcIi0vL1N1biBNaWNyb3N5c3RlbXMsIEluYy4vL0RURCBKU1AgVGFnIExpYnJhcnkgMS4xLy9FTlwiIFwiaHR0cDovL2phdmEuc3VuLmNvbS9qMmVlL2R0ZHMvd2ViLWpzcHRhZ2xpYnJhcnlfMV8xLmR0ZFwiPlxuIjsKLQlwcml2YXRlIFN0cnVjdHVyZWRUZXh0Vmlld2VyQ29uZmlndXJhdGlvbiBmQ29uZmlnID0gbnVsbDsKLQlwcml2YXRlIElDb250ZW50T3V0bGluZVBhZ2UgZkNvbnRlbnRPdXRsaW5lUGFnZSA9IG51bGw7Ci0JcHJpdmF0ZSBJU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyIGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbnVsbDsKLQotCXByaXZhdGUgU3RydWN0dXJlZFRleHRWaWV3ZXIgZlNvdXJjZVZpZXdlciA9IG51bGw7Ci0KLQlwcml2YXRlIGZpbmFsIFN0cmluZyBTU0VfRURJVE9SX0ZPTlQgPSAib3JnLmVjbGlwc2Uud3N0LnNzZS51aS50ZXh0Zm9udCI7Ci0KLQlwcm90ZWN0ZWQgdm9pZCBhZGRBY3Rpb25zKElDb250cmlidXRpb25NYW5hZ2VyIG1ncikgewotCQlpZiAobWdyICE9IG51bGwpIHsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiTmV3IFhNTCI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJQnVzeUluZGljYXRvci5zaG93V2hpbGUoZ2V0U2l0ZSgpLmdldFNoZWxsKCkuZ2V0RGlzcGxheSgpLCBuZXcgUnVubmFibGUoKSB7Ci0JCQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCQkJc2V0dXBWaWV3ZXJGb3JOZXcoKTsKLQkJCQkJCQlmU291cmNlVmlld2VyLnNldEVkaXRhYmxlKHRydWUpOwotCQkJCQkJfQotCQkJCQl9KTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IFNlcGFyYXRvcigpKTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiQ2hhbmdlIFZpc2liaWxpdHkiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5nZXRTaGVsbCgpKTsKLQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQlpZiAocHJvY2VlZCA9PSBXaW5kb3cuQ0FOQ0VMKQotCQkJCQkJcmV0dXJuOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oZGxnLnN0YXJ0VmFsdWUsIGRsZy5sZW5ndGhWYWx1ZSk7Ci0JCQkJfQotCQkJfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlNob3cgQWxsIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJDaGFuZ2UgVmlzaWJpbGl0eSBpbiBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JCQkJCUlFZGl0b3JQYXJ0IHBhcnQgPSBnZXRWaWV3U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHBhcnQgIT0gbnVsbCAmJiBwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCXNvdXJjZVZpZXdlciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQpLmdldFRleHRWaWV3ZXIoKTsKLQkJCQkJfQotCQkJCQlpZiAoc291cmNlVmlld2VyICE9IG51bGwpIHsKLQkJCQkJCU51bWJlcklucHV0RGlhbG9nIGRsZyA9IG5ldyBOdW1iZXJJbnB1dERpYWxvZyhzb3VyY2VWaWV3ZXIuZ2V0Q29udHJvbCgpLmdldFNoZWxsKCkpOwotCQkJCQkJaW50IHByb2NlZWQgPSBkbGcub3BlbigpOwotCQkJCQkJaWYgKHByb2NlZWQgPT0gV2luZG93LkNBTkNFTCkKLQkJCQkJCQlyZXR1cm47Ci0JCQkJCQlzb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQkJCQlzb3VyY2VWaWV3ZXIuc2V0VmlzaWJsZVJlZ2lvbihkbGcuc3RhcnRWYWx1ZSwgZGxnLmxlbmd0aFZhbHVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTaG93IEFsbCBpbiBFZGl0b3IiOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCVN0cnVjdHVyZWRUZXh0Vmlld2VyIHNvdXJjZVZpZXdlciA9IG51bGw7Ci0JCQkJCUlFZGl0b3JQYXJ0IHBhcnQgPSBnZXRWaWV3U2l0ZSgpLmdldFdvcmtiZW5jaFdpbmRvdygpLmdldEFjdGl2ZVBhZ2UoKS5nZXRBY3RpdmVFZGl0b3IoKTsKLQkJCQkJaWYgKHBhcnQgIT0gbnVsbCAmJiBwYXJ0IGluc3RhbmNlb2YgU3RydWN0dXJlZFRleHRFZGl0b3IpIHsKLQkJCQkJCXNvdXJjZVZpZXdlciA9ICgoU3RydWN0dXJlZFRleHRFZGl0b3IpIHBhcnQpLmdldFRleHRWaWV3ZXIoKTsKLQkJCQkJfQotCQkJCQlpZiAoc291cmNlVmlld2VyICE9IG51bGwpIHsKLQkJCQkJCXNvdXJjZVZpZXdlci5yZXNldFZpc2libGVSZWdpb24oKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgU2VwYXJhdG9yKCkpOwotCQkJLy8gbm8gbG9uZ2VyIGFibGUgdG8gc2V0IGlucHV0IHRvIE5VTEwKLQkJCS8vIG1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCS8vIHJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJLy8gfQotCQkJLy8KLQkJCS8vIHB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkvLyByZXR1cm4gIlNldCBJbnB1dCB0byBOVUxMIjsKLQkJCS8vIH0KLQkJCS8vIHB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCS8vIHN1cGVyLnJ1bigpOwotCQkJLy8gdmlld2VyLnNldElucHV0KG51bGwpOwotCQkJLy8gfQotCQkJLy8gfSk7Ci0JCQltZ3IuYWRkKG5ldyBBY3Rpb24oKSB7Ci0JCQkJcHVibGljIFN0cmluZyBnZXRUZXh0KCkgewotCQkJCQlyZXR1cm4gZ2V0VG9vbFRpcFRleHQoKTsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRvb2xUaXBUZXh0KCkgewotCQkJCQlyZXR1cm4gIlRha2UgSW5wdXQgZnJvbSBBY3RpdmUgRWRpdG9yIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlJVGV4dEVkaXRvciB0ZXh0RWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCQkJCWlmICh0ZXh0RWRpdG9yICE9IG51bGwpIHsKLQkJCQkJCXNldHVwVmlld2VyRm9yRWRpdG9yKHRleHRFZGl0b3IpOwotCQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJUYWtlIElucHV0IGFuZCBGb2xsb3cgU2VsZWN0aW9uIjsKLQkJCQl9Ci0KLQkJCQlwdWJsaWMgdm9pZCBydW4oKSB7Ci0JCQkJCXN1cGVyLnJ1bigpOwotCQkJCQlmb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRFZGl0YWJsZSh0cnVlKTsKLQkJCQl9Ci0JCQl9KTsKLQkJCW1nci5hZGQobmV3IEFjdGlvbigpIHsKLQkJCQlwdWJsaWMgU3RyaW5nIGdldFRleHQoKSB7Ci0JCQkJCXJldHVybiBnZXRUb29sVGlwVGV4dCgpOwotCQkJCX0KLQotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VG9vbFRpcFRleHQoKSB7Ci0JCQkJCXJldHVybiAiVGFrZSBJbnB1dCBhbmQgRm9sbG93IFNlbGVjdGlvbiBBcyBSZWFkT25seSI7Ci0JCQkJfQotCi0JCQkJcHVibGljIHZvaWQgcnVuKCkgewotCQkJCQlzdXBlci5ydW4oKTsKLQkJCQkJZm9sbG93U2VsZWN0aW9uKCk7Ci0JCQkJCWZTb3VyY2VWaWV3ZXIuc2V0RWRpdGFibGUoZmFsc2UpOwotCQkJCX0KLQkJCX0pOwotCQkJbWdyLmFkZChuZXcgQWN0aW9uKCkgewotCQkJCXB1YmxpYyBTdHJpbmcgZ2V0VGV4dCgpIHsKLQkJCQkJcmV0dXJuIGdldFRvb2xUaXBUZXh0KCk7Ci0JCQkJfQotCi0JCQkJcHVibGljIFN0cmluZyBnZXRUb29sVGlwVGV4dCgpIHsKLQkJCQkJcmV0dXJuICJTdG9wIEZvbGxvd2luZyBTZWxlY3Rpb24iOwotCQkJCX0KLQotCQkJCXB1YmxpYyB2b2lkIHJ1bigpIHsKLQkJCQkJc3VwZXIucnVuKCk7Ci0JCQkJCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsKLQkJCQl9Ci0JCQl9KTsKLQkJfQotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjY3JlYXRlUGFydENvbnRyb2woQ29tcG9zaXRlKQotCSAqLwotCXB1YmxpYyB2b2lkIGNyZWF0ZVBhcnRDb250cm9sKENvbXBvc2l0ZSBwYXJlbnQpIHsKLQkJSUNvbnRyaWJ1dGlvbk1hbmFnZXIgbWdyID0gZ2V0Vmlld1NpdGUoKS5nZXRBY3Rpb25CYXJzKCkuZ2V0TWVudU1hbmFnZXIoKTsKLQkJYWRkQWN0aW9ucyhtZ3IpOwotCi0JCS8vIGNyZWF0ZSBzb3VyY2Ugdmlld2VyICYgaXRzIGNvbnRlbnQgdHlwZS1zcGVjaWZpYyB2aWV3ZXIKLQkJLy8gY29uZmlndXJhdGlvbgotCQlmU291cmNlVmlld2VyID0gbmV3IFN0cnVjdHVyZWRUZXh0Vmlld2VyKHBhcmVudCwgbnVsbCwgbnVsbCwgZmFsc2UsIFNXVC5OT05FKTsKLQkJZkNvbmZpZyA9IG5ldyBTdHJ1Y3R1cmVkVGV4dFZpZXdlckNvbmZpZ3VyYXRpb25YTUwoKTsKLQotCQkvLyBzZXQgdXAgdGhlIHZpZXdlciB3aXRoIGEgZG9jdW1lbnQgJiB2aWV3ZXIgY29uZmlnCi0JCXNldHVwVmlld2VyRm9yTmV3KCk7Ci0KLQkJc2V0dXBWaWV3ZXJQcmVmZXJlbmNlcygpOwotCX0KLQotCS8qKgotCSAqIEBzZWUgb3JnLmVjbGlwc2UudWkuSVdvcmtiZW5jaFBhcnQjZGlzcG9zZSgpCi0JICovCi0JcHVibGljIHZvaWQgZGlzcG9zZSgpIHsKLQkJc3RvcEZvbGxvd1NlbGVjdGlvbigpOwotCQlmU291cmNlVmlld2VyLnVuY29uZmlndXJlKCk7Ci0JfQotCi0JLyoqCi0JICogSG9va3MgdXAgdGhlIHZpZXdlciB0byBmb2xsb3cgdGhlIHNlbGVjdGlvbiBtYWRlIGluIHRoZSBhY3RpdmUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIGZvbGxvd1NlbGVjdGlvbigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3IgIT0gbnVsbCkgewotCQkJc2V0dXBWaWV3ZXJGb3JFZGl0b3IoZWRpdG9yKTsKLQkJCWlmIChmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lciA9PSBudWxsKQotCQkJCWZIaWdobGlnaHRSYW5nZUxpc3RlbmVyID0gbmV3IE5vZGVSYW5nZVNlbGVjdGlvbkxpc3RlbmVyKCk7Ci0KLQkJCWZDb250ZW50T3V0bGluZVBhZ2UgPSAoKElDb250ZW50T3V0bGluZVBhZ2UpIGVkaXRvci5nZXRBZGFwdGVyKElDb250ZW50T3V0bGluZVBhZ2UuY2xhc3MpKTsKLQkJCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCQlmQ29udGVudE91dGxpbmVQYWdlLmFkZFNlbGVjdGlvbkNoYW5nZWRMaXN0ZW5lcihmSGlnaGxpZ2h0UmFuZ2VMaXN0ZW5lcik7Ci0KLQkJCQlpZiAoIWZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkuaXNFbXB0eSgpICYmIGZDb250ZW50T3V0bGluZVBhZ2UuZ2V0U2VsZWN0aW9uKCkgaW5zdGFuY2VvZiBJU3RydWN0dXJlZFNlbGVjdGlvbikgewotCQkJCQlmU291cmNlVmlld2VyLnJlc2V0VmlzaWJsZVJlZ2lvbigpOwotCi0JCQkJCU9iamVjdFtdIG5vZGVzID0gKChJU3RydWN0dXJlZFNlbGVjdGlvbikgZkNvbnRlbnRPdXRsaW5lUGFnZS5nZXRTZWxlY3Rpb24oKSkudG9BcnJheSgpOwotCQkJCQlJbmRleGVkUmVnaW9uIHN0YXJ0Tm9kZSA9IChJbmRleGVkUmVnaW9uKSBub2Rlc1swXTsKLQkJCQkJSW5kZXhlZFJlZ2lvbiBlbmROb2RlID0gKEluZGV4ZWRSZWdpb24pIG5vZGVzW25vZGVzLmxlbmd0aCAtIDFdOwotCi0JCQkJCWlmIChzdGFydE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJc3RhcnROb2RlID0gKEluZGV4ZWRSZWdpb24pICgoQXR0cikgc3RhcnROb2RlKS5nZXRPd25lckVsZW1lbnQoKTsKLQkJCQkJaWYgKGVuZE5vZGUgaW5zdGFuY2VvZiBBdHRyKQotCQkJCQkJZW5kTm9kZSA9IChJbmRleGVkUmVnaW9uKSAoKEF0dHIpIGVuZE5vZGUpLmdldE93bmVyRWxlbWVudCgpOwotCi0JCQkJCWludCBzdGFydCA9IHN0YXJ0Tm9kZS5nZXRTdGFydE9mZnNldCgpOwotCQkJCQlpbnQgZW5kID0gZW5kTm9kZS5nZXRFbmRPZmZzZXQoKTsKLQotCQkJCQlmU291cmNlVmlld2VyLnNldFZpc2libGVSZWdpb24oc3RhcnQsIGVuZCAtIHN0YXJ0KTsKLQkJCQkJZlNvdXJjZVZpZXdlci5zZXRTZWxlY3RlZFJhbmdlKHN0YXJ0LCAwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQkvKioKLQkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFjdGl2ZSB0ZXh0IGVkaXRvciBpZiBwb3NzaWJsZQotCSAqIAotCSAqIEByZXR1cm4gSVRleHRFZGl0b3IKLQkgKi8KLQlwcml2YXRlIElUZXh0RWRpdG9yIGdldEFjdGl2ZUVkaXRvcigpIHsKLQkJSVRleHRFZGl0b3IgZWRpdG9yID0gbnVsbDsKLQkJSUVkaXRvclBhcnQgZWRpdG9yUGFydCA9IGdldFNpdGUoKS5nZXRXb3JrYmVuY2hXaW5kb3coKS5nZXRBY3RpdmVQYWdlKCkuZ2V0QWN0aXZlRWRpdG9yKCk7Ci0JCWlmIChlZGl0b3JQYXJ0IGluc3RhbmNlb2YgSVRleHRFZGl0b3IpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQ7Ci0JCWlmIChlZGl0b3IgPT0gbnVsbCAmJiBlZGl0b3JQYXJ0ICE9IG51bGwpCi0JCQllZGl0b3IgPSAoSVRleHRFZGl0b3IpIGVkaXRvclBhcnQuZ2V0QWRhcHRlcihJVGV4dEVkaXRvci5jbGFzcyk7Ci0JCXJldHVybiBlZGl0b3I7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JVmlld1BhcnQjaW5pdChJVmlld1NpdGUsIElNZW1lbnRvKQotCSAqLwotCXB1YmxpYyB2b2lkIGluaXQoSVZpZXdTaXRlIHNpdGUsIElNZW1lbnRvIG1lbWVudG8pIHRocm93cyBQYXJ0SW5pdEV4Y2VwdGlvbiB7Ci0JCXN1cGVyLmluaXQoc2l0ZSwgbWVtZW50byk7Ci0JfQotCi0JLyoqCi0JICogQHNlZSBvcmcuZWNsaXBzZS51aS5JV29ya2JlbmNoUGFydCNzZXRGb2N1cygpCi0JICovCi0JcHVibGljIHZvaWQgc2V0Rm9jdXMoKSB7Ci0JCWlmIChmU291cmNlVmlld2VyLmdldENvbnRyb2woKSAhPSBudWxsICYmICFmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5pc0Rpc3Bvc2VkKCkpCi0JCQlmU291cmNlVmlld2VyLmdldENvbnRyb2woKS5zZXRGb2N1cygpOwotCX0KLQotCS8qKgotCSAqIFNldHMgdXAgdGhlIHZpZXdlciB3aXRoIHRoZSBzYW1lIGRvY3VtZW50L2lucHV0IGFzIHRoZSBnaXZlbiBlZGl0b3IKLQkgKiAKLQkgKiBAcGFyYW0gSVRleHRFZGl0b3IKLQkgKiAgICAgICAgICAgIGVkaXRvciAtIHRoZSBlZGl0b3IgdG8gdXNlICpjYW5ub3QgdG8gYmUgbnVsbCoKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JFZGl0b3IoSVRleHRFZGl0b3IgZWRpdG9yKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQkJSURvY3VtZW50IGRvYyA9IGVkaXRvci5nZXREb2N1bWVudFByb3ZpZGVyKCkuZ2V0RG9jdW1lbnQoZWRpdG9yLmdldEVkaXRvcklucHV0KCkpOwotCQlmU291cmNlVmlld2VyLnNldERvY3VtZW50KGRvYyk7Ci0KLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShuZXcgU3RydWN0dXJlZFRleHRWaWV3ZXJDb25maWd1cmF0aW9uWE1MKCkpOwotCX0KLQotCS8qKgotCSAqIFNldCB1cCBzb3VyY2Ugdmlld2VyIHdpdGggYSBuZXcgZG9jdW1lbnQgJiBjb25maWd1cmUgaXQKLQkgKi8KLQlwcml2YXRlIHZvaWQgc2V0dXBWaWV3ZXJGb3JOZXcoKSB7Ci0JCXN0b3BGb2xsb3dTZWxlY3Rpb24oKTsgLy8gaWYgd2FzIGZvbGxvd2luZyBzZWxlY3Rpb24sIHN0b3AKLQotCQlJTW9kZWxNYW5hZ2VyIG1vZGVsTWFuYWdlciA9IFN0cnVjdHVyZWRNb2RlbE1hbmFnZXIuZ2V0TW9kZWxNYW5hZ2VyKCk7Ci0KLQkJSURvY3VtZW50IGRvYyA9IG1vZGVsTWFuYWdlci5jcmVhdGVTdHJ1Y3R1cmVkRG9jdW1lbnRGb3IoQ29udGVudFR5cGVJZEZvclhNTC5Db250ZW50VHlwZUlEX1hNTCk7Ci0JCWRvYy5zZXQoREVGQVVMVF9WSUVXRVJfQ09OVEVOVFMpOwotCi0JCWZTb3VyY2VWaWV3ZXIuc2V0RG9jdW1lbnQoZG9jKTsKLQkJLy8gbmVlZCB0byByZWNvbmZpZ3VyZSBhZnRlciBzZXQgZG9jdW1lbnQganVzdCBzbyBoaWdobGlnaHRlciB3b3JrcwotCQlmU291cmNlVmlld2VyLmNvbmZpZ3VyZShmQ29uZmlnKTsKLQl9Ci0KLQkvKioKLQkgKiBTZXQgdXAgc291cmNlIHZpZXdlciB3aXRoIGFueSBhZGRpdGlvbmFsIHByZWZlcmVuY2VzIGl0IHNob3VsZCBoYXZlIEV4OgotCSAqIGZvbnQsIHRhYiB3aWR0aAotCSAqLwotCXByaXZhdGUgdm9pZCBzZXR1cFZpZXdlclByZWZlcmVuY2VzKCkgewotCQlmU291cmNlVmlld2VyLmdldFRleHRXaWRnZXQoKS5zZXRGb250KEpGYWNlUmVzb3VyY2VzLmdldEZvbnQoU1NFX0VESVRPUl9GT05UKSk7Ci0JfQotCi0JLyoqCi0JICogQ2Vhc2UgZm9sbG93aW5nIHRoZSBzZWxlY3Rpb24gbWFkZSBpbiB0aGUgZWRpdG9yCi0JICovCi0JcHJpdmF0ZSB2b2lkIHN0b3BGb2xsb3dTZWxlY3Rpb24oKSB7Ci0JCWlmIChmQ29udGVudE91dGxpbmVQYWdlICE9IG51bGwpIHsKLQkJCWZDb250ZW50T3V0bGluZVBhZ2UucmVtb3ZlU2VsZWN0aW9uQ2hhbmdlZExpc3RlbmVyKGZIaWdobGlnaHRSYW5nZUxpc3RlbmVyKTsKLQkJCWZTb3VyY2VWaWV3ZXIucmVzZXRWaXNpYmxlUmVnaW9uKCk7Ci0JCQlmQ29udGVudE91dGxpbmVQYWdlID0gbnVsbDsKLQkJfQotCX0KLQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkOTI4ZTM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLQotPHByb2plY3QKLSAgICBuYW1lPSJ0ZXN0c3VpdGUiCi0gICAgZGVmYXVsdD0icnVuIgotICAgIGJhc2VkaXI9Ii4iPgotICAgIAotICAgIDwhLS0gVGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIHNob3VsZCBiZSBwYXNzZWQgaW50byB0aGlzIHNjcmlwdCAtLT4KLSAgICA8IS0tICR7ZWNsaXBzZS1ob21lfSAgIC0tPgotICAgIDwhLS0gJHtidWlsZERpcmVjdG9yeX0gIC0tPgotICAgIDwhLS0gJHtidWlsZExhYmVsfSAgICAgICAgLS0+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGFib3ZlICAtLT4KLQk8cHJvcGVydHkKLQkJbmFtZT0icGx1Z2luLW5hbWUiCi0JCXZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzLlhNTFVJVGVzdFN1aXRlIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9InVpLXRlc3QiIC8+Ci0KLSAgICA8IS0tIHNob3VsZCBiZSBsaXR0bGUgbmVlZCB0byBjaGFuZ2Ugd2hhdCdzIGJlbG93IC0tPgotCi0gICAgPGVjaG8gbWVzc2FnZT0iYmFzZWRpcjogJHtiYXNlZGlyfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJlY2xpcHNlLWhvbWU6ICR7ZWNsaXBzZS1ob21lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJidWlsZERpcmVjdG9yeTogJHtidWlsZERpcmVjdG9yeX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0icGx1Z2luLW5hbWU6ICR7cGx1Z2luLW5hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImNsYXNzbmFtZTogJHtjbGFzc25hbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InRlc3RUeXBlICR7dGVzdFR5cGV9IiAvPgotCi0KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0ibGlicmFyeS1maWxlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvb3JnLmVjbGlwc2UudGVzdF8zLjEuMC9saWJyYXJ5LnhtbCIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0id29ya3NwYWNlIgotICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L2p1bml0d29ya3NwYWNlcy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBhbGwgaW5pdGlhbGl6YXRpb24gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIC0tPgotICAgIDwhLS0gYWxsIHRlc3RzIHRoYXQgYXJlIHRvIGJlIHJ1bi4gSW5pdGlhbGl6YXRpb24gZm9yIGluZGl2aWR1YWwgdGVzdHMgLS0+Ci0gICAgPCEtLSBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIGJvZHkgb2YgdGhlIHN1aXRlIHRhcmdldC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJpbml0Ij4KLSAgICAgICAgPHRzdGFtcCAvPgotICAgICAgICA8ZGVsZXRlPgotICAgICAgICAgICAgPGZpbGVzZXQKLSAgICAgICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSIKLSAgICAgICAgICAgICAgICBpbmNsdWRlcz0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgPC9kZWxldGU+Ci0gICAgICAgIDwhLS0gbWFrZSBkaXJlY3RvcnksIGluIGNhc2UgcGF0aCBkb2Vzbid0IGV4aXN0IHlldCAtLT4KLSAgICAgICAgPG1rZGlyIGRpcj0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICA8IS0tICBidXQgZGVsZXRlIHRvIG1ha2Ugc3VyZSBmcmVzaCBjb250ZW50cy0tPgotICAgICAgICA8ZGVsZXRlCi0gICAgICAgICAgICBkaXI9IiR7d29ya3NwYWNlfSIKLSAgICAgICAgICAgIHF1aWV0PSJ0cnVlIiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGRlZmluZXMgdGhlIHRlc3RzIHRoYXQgbmVlZCB0byBiZSBydW4uIC0tPgotICAgIDx0YXJnZXQgbmFtZT0ic3VpdGUiPgotCi0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iJHt0ZXN0VHlwZX0iCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJkYXRhLWRpciIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHt3b3Jrc3BhY2V9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLW5hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2NsYXNzbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tcGF0aCIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtlY2xpcHNlLWhvbWV9L3BsdWdpbnMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIDwvYW50PgotCi0gICAgICAgIDxjb3B5Ci0gICAgICAgICAgICBmYWlsb25lcnJvcj0iZmFsc2UiCi0gICAgICAgICAgICBmaWxlPSIke3dvcmtzcGFjZX0vLm1ldGFkYXRhLy5sb2ciCi0gICAgICAgICAgICB0b2ZpbGU9IiR7YnVpbGREaXJlY3Rvcnl9LyR7YnVpbGRMYWJlbH0vdGVzdFJlc3VsdHMvY29uc29sZWxvZ3MvJHtwbHVnaW4tbmFtZX0uY29uc29sZWxvZy50eHQiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgY29kZSB0byBjbGVhbnVwIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGFmdGVyIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIG9mIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuLiBZb3UgY2FuIHVzZSB0aGlzIHRhcmdldCB0byAtLT4KLSAgICA8IS0tIGRlbGV0ZSB0ZW1wb3JhcnkgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZC4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJjbGVhbnVwIj4KLSAgICAgICAgPCEtLSB1c3VhbGx5IG5vIG5lZWQgdG8gZGVsZXRlIHdvcmtzcGFjZSB1bnRpbCBuZXh0IHJ1biwgYW5kIGxlYXZpbmcgaXQgYWxsb3dzIGluc3BlY3Rpb24gLS0+Ci0gICAgICAgIDwhLS0gPGRlbGV0ZSBkaXI9IiR7d29ya3NwYWNlfSIgcXVpZXQ9InRydWUiIC8+IC0tPgotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBydW5zIHRoZSB0ZXN0IHN1aXRlLiBBbnkgYWN0aW9ucyB0aGF0IG5lZWQgdG8gaGFwcGVuIC0tPgotICAgIDwhLS0gYWZ0ZXIgYWxsIHRoZSB0ZXN0cyBoYXZlIGJlZW4gcnVuIHNob3VsZCBnbyBoZXJlLiAtLT4KLSAgICA8dGFyZ2V0Ci0gICAgICAgIG5hbWU9InJ1biIKLSAgICAgICAgZGVwZW5kcz0iaW5pdCxzdWl0ZSxjbGVhbnVwIj4KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSJjb2xsZWN0IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iaW5jbHVkZXMiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJvdXRwdXQtZmlsZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0ueG1sIiAvPgotICAgICAgICA8L2FudD4KLSAgICA8L3RhcmdldD4KLQotPC9wcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Ob244Qml0Q2hhcnMvaW50ZXJuYXRpb25hbC1pbnN0YW5jZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwtaW5zdGFuY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjMwYmQ4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudWkudGVzdHMvdGVzdHJlc291cmNlcy9Ob244Qml0Q2hhcnMvaW50ZXJuYXRpb25hbC1pbnN0YW5jZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPG11bHRpLXJvb3QgeHNpOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249ImludGVybmF0aW9uYWwueHNkIiB4bWxucz0iIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIj4KLQk8cm9vdD5UaGUgcXVpY2sgYnJvd24gZm94IGp1bXBzIG92ZXIgdGhlIGxhenkgZG9nPC9yb290PgotCTzrv4zrpqzshLHrtoQ+67mg66W4IOqwiOyDiSDsl6zsmrDripQg6rKM7Jy866W4IOqwnOyXkCDqsJXtlZjtlZzri6Q8L+u/jOumrOyEseu2hD4KLQk85qC55YWD57SgPui/meWPquW/q+ajleiJsueLkOeLuOi3s+i/h+aHkuaDsOeLlzwv5qC55YWD57SgPgotCTxyb290Pui/meWPquW/q+ajleiJsueLkOeLuOi3s+i/h+aHkuaDsOeLlzwvcm9vdD4KLQk867+M66as7ISx67aEPlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2c8L+u/jOumrOyEseu2hD4KLQk867+M66as7ISx67aEPlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2c8L+u/jOumrOyEseu2hD4KLQk85qC55YWD57SgPuu5oOuluCDqsIjsg4kg7Jes7Jqw64qUIOqyjOycvOuluCDqsJzsl5Ag6rCV7ZWY7ZWc64ukPC/moLnlhYPntKA+Ci08L211bHRpLXJvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC51aS50ZXN0cy90ZXN0cmVzb3VyY2VzL05vbjhCaXRDaGFycy9pbnRlcm5hdGlvbmFsLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODdkMTNjYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnVpLnRlc3RzL3Rlc3RyZXNvdXJjZXMvTm9uOEJpdENoYXJzL2ludGVybmF0aW9uYWwueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiCi0JeG1sbnM6eG1sPSJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiPgotCi0JPCEtLTx4c2Q6aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiBzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wMy94bWwueHNkIi8+LS0+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0ibXVsdGktcm9vdCI+Ci0JCTx4c2Q6Y29tcGxleFR5cGU+Ci0JCQk8eHNkOnNlcXVlbmNlIG1heE9jY3Vycz0idW5ib3VuZGVkIj4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSJyb290IiBtaW5PY2N1cnM9IjAiLz4KLQkJCQk8eHNkOmVsZW1lbnQgcmVmPSLrv4zrpqzshLHrtoQiIG1pbk9jY3Vycz0iMCIvPgotCQkJCTx4c2Q6ZWxlbWVudCByZWY9IuagueWFg+e0oCIgbWluT2NjdXJzPSIwIi8+Ci0JCQk8L3hzZDpzZXF1ZW5jZT4KLQkJPC94c2Q6Y29tcGxleFR5cGU+Ci0JPC94c2Q6ZWxlbWVudD4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSJyb290IiB0eXBlPSJwcm9zZSIgLz4KLQotCTx4c2Q6ZWxlbWVudCBuYW1lPSLrv4zrpqzshLHrtoQiIHR5cGU9InByb3NlIi8+Ci0KLQk8eHNkOmVsZW1lbnQgbmFtZT0i5qC55YWD57SgIiB0eXBlPSJwcm9zZSIgLz4KLQotCTx4c2Q6c2ltcGxlVHlwZSBuYW1lPSJwcm9zZSI+Ci0JCTx4c2Q6cmVzdHJpY3Rpb24gYmFzZT0ieHNkOnN0cmluZyI+Ci0JCQk8eHNkOnBhdHRlcm4gdmFsdWU9IlRoZSBxdWljayBicm93biBmb3gganVtcHMgb3ZlciB0aGUgbGF6eSBkb2ciLz4KLQkJCTx4c2Q6cGF0dGVybiB2YWx1ZT0i6L+Z5Y+q5b+r5qOV6Imy54uQ54u46Lez6L+H5oeS5oOw54uXIi8+Ci0JCQk8eHNkOnBhdHRlcm4gdmFsdWU9Iuu5oOuluCDqsIjsg4kg7Jes7Jqw64qUIOqyjOycvOuluCDqsJzsl5Ag6rCV7ZWY7ZWc64ukIi8+Ci0JCTwveHNkOnJlc3RyaWN0aW9uPgotCTwveHNkOnNpbXBsZVR5cGU+Ci0KLTwveHNkOnNjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uY2xhc3NwYXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDhiYWY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uY2xhc3NwYXRoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxjbGFzc3BhdGg+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9InNyYyIgcGF0aD0ic3JjLyIvPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJjb24iIHBhdGg9Im9yZy5lY2xpcHNlLmpkdC5sYXVuY2hpbmcuSlJFX0NPTlRBSU5FUiIvPgotCTxjbGFzc3BhdGhlbnRyeSBwYXRoPSJvcmcuZWNsaXBzZS5wZGUuY29yZS5yZXF1aXJlZFBsdWdpbnMiIGtpbmQ9ImNvbiI+Ci0JCTxhY2Nlc3NydWxlcz4KLQkJCTxhY2Nlc3NydWxlIGtpbmQ9ImFjY2Vzc2libGUiIHBhdHRlcm49Im9yZy9lY2xpcHNlL3dzdC8qKiIvPgotCQk8L2FjY2Vzc3J1bGVzPgotCTwvY2xhc3NwYXRoZW50cnk+Ci0JPGNsYXNzcGF0aGVudHJ5IGtpbmQ9Im91dHB1dCIgcGF0aD0iYmluIi8+Ci08L2NsYXNzcGF0aD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uY3ZzaWdub3JlIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjOWI4OGQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLWJpbgotdGVtcC5mb2xkZXIKLWJ1aWxkLnhtbAotdmFsaWRhdGV4bWx0ZXN0cy5qYXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8ucHJvamVjdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTEyNTYyZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHByb2plY3REZXNjcmlwdGlvbj4KLQk8bmFtZT5vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHM8L25hbWU+Ci0JPGNvbW1lbnQ+PC9jb21tZW50PgotCTxwcm9qZWN0cz4KLQk8L3Byb2plY3RzPgotCTxidWlsZFNwZWM+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5qZHQuY29yZS5qYXZhYnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuTWFuaWZlc3RCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQkJPGJ1aWxkQ29tbWFuZD4KLQkJCTxuYW1lPm9yZy5lY2xpcHNlLnBkZS5TY2hlbWFCdWlsZGVyPC9uYW1lPgotCQkJPGFyZ3VtZW50cz4KLQkJCTwvYXJndW1lbnRzPgotCQk8L2J1aWxkQ29tbWFuZD4KLQk8L2J1aWxkU3BlYz4KLQk8bmF0dXJlcz4KLQkJPG5hdHVyZT5vcmcuZWNsaXBzZS5wZGUuUGx1Z2luTmF0dXJlPC9uYXR1cmU+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YW5hdHVyZTwvbmF0dXJlPgotCTwvbmF0dXJlcz4KLTwvcHJvamVjdERlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFmYTVjOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI1R1ZSBBcHIgMDQgMDM6MzY6MzIgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1lbmNvZGluZy88cHJvamVjdD49SVNPLTg4NTktMQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2VjNTc1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucnVudGltZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1saW5lLnNlcGFyYXRvcj1cclxuCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY3YmFjNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC5jb3JlLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotI1NhdCBBdWcgMTkgMTY6MzE6NDMgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmNsZWFuT3V0cHV0Rm9sZGVyPWNsZWFuCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmR1cGxpY2F0ZVJlc291cmNlVGFzaz13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLmludmFsaWRDbGFzc3BhdGg9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5idWlsZGVyLnJlc291cmNlQ29weUV4Y2x1c2lvbkZpbHRlcj0qLmxhdW5jaAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2lyY3VsYXJDbGFzc3BhdGg9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNsYXNzcGF0aC5leGNsdXNpb25QYXR0ZXJucz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGgubXVsdGlwbGVPdXRwdXRMb2NhdGlvbnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi5pbmxpbmVKc3JCeXRlY29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuY29kZWdlbi50YXJnZXRQbGF0Zm9ybT0xLjIKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udW51c2VkTG9jYWw9cHJlc2VydmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvbXBsaWFuY2U9MS40Ci1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5saW5lTnVtYmVyPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5sb2NhbFZhcmlhYmxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kZWJ1Zy5zb3VyY2VGaWxlPWdlbmVyYXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5kb2MuY29tbWVudC5zdXBwb3J0PWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLm1heFByb2JsZW1QZXJVbml0PTEwMAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hbm5vdGF0aW9uU3VwZXJJbnRlcmZhY2U9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5hc3NlcnRJZGVudGlmaWVyPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXV0b2JveGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uSW5EZXByZWNhdGVkQ29kZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbldoZW5PdmVycmlkaW5nRGVwcmVjYXRlZE1ldGhvZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRpc2NvdXJhZ2VkUmVmZXJlbmNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW1wdHlTdGF0ZW1lbnQ9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5lbnVtSWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZpZWxkSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbFBhcmFtZXRlckJvdW5kPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maW5hbGx5QmxvY2tOb3RDb21wbGV0aW5nTm9ybWFsbHk9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZm9yYmlkZGVuUmVmZXJlbmNlPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmhpZGRlbkNhdGNoQmxvY2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBhdGlibGVOb25Jbmhlcml0ZWRJbnRlcmZhY2VNZXRob2Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbmNvbXBsZXRlRW51bVN3aXRjaD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5kaXJlY3RTdGF0aWNBY2Nlc3M9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc0RlcHJlY2F0ZWRSZWY9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NOb3RWaXNpYmxlUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmxvY2FsVmFyaWFibGVIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1ldGhvZFdpdGhDb25zdHJ1Y3Rvck5hbWU9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0RlcHJlY2F0ZWRBbm5vdGF0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzT3ZlcnJpZGluZz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jQ29tbWVudHNWaXNpYmlsaXR5PXB1YmxpYwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdKYXZhZG9jVGFnc092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NWaXNpYmlsaXR5PXByaXZhdGUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ092ZXJyaWRlQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ1NlcmlhbFZlcnNpb249ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9FZmZlY3RBc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vSW1wbGljaXRTdHJpbmdDb252ZXJzaW9uPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubm9uRXh0ZXJuYWxpemVkU3RyaW5nTGl0ZXJhbD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ub3ZlcnJpZGluZ1BhY2thZ2VEZWZhdWx0TWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ucG9zc2libGVBY2NpZGVudGFsQm9vbGVhbkFzc2lnbm1lbnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3BlY2lhbFBhcmFtZXRlckhpZGluZ0ZpZWxkPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3RhdGljQWNjZXNzUmVjZWl2ZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uc3VwcHJlc3NXYXJuaW5ncz1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN5bnRoZXRpY0FjY2Vzc0VtdWxhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udHlwZVBhcmFtZXRlckhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5jaGVja2VkVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuZG9jdW1lbnRlZEVtcHR5QmxvY2s9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuaGFuZGxlZFdhcm5pbmdUb2tlbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5RWxzZT1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5uZWNlc3NhcnlUeXBlQ2hlY2s9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5xdWFsaWZpZWRGaWVsZEFjY2Vzcz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW5zYWZlVHlwZU9wZXJhdGlvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZERlY2xhcmVkVGhyb3duRXhjZXB0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbldoZW5PdmVycmlkaW5nPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZEltcG9ydD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMYWJlbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRMb2NhbD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXI9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFBhcmFtZXRlcldoZW5JbXBsZW1lbnRpbmdBYnN0cmFjdD1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuT3ZlcnJpZGluZ0NvbmNyZXRlPWRpc2FibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVudXNlZFByaXZhdGVNZW1iZXI9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udmFyYXJnc0FyZ3VtZW50TmVlZENhc3Q9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuc291cmNlPTEuMwotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wYXRpYmxlSkRLTGV2ZWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5pbmNvbXBsZXRlQ2xhc3NwYXRoPWVycm9yCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDFjN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LnVpLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi0jTW9uIEFwciAxNyAwMTo0ODozOSBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLWludGVybmFsLmRlZmF1bHQuY29tcGxpYW5jZT1kZWZhdWx0Ci1vcmcuZWNsaXBzZS5qZHQudWkudGV4dC5jdXN0b21fY29kZV90ZW1wbGF0ZXM9PD94bWwgdmVyc2lvblw9IjEuMCIgZW5jb2RpbmdcPSJVVEYtOCI/PlxyXG48dGVtcGxhdGVzLz4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNTkzNjhjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UubHRrLmNvcmUucmVmYWN0b3JpbmcuZW5hYmxlLnByb2plY3QucmVmYWN0b3JpbmcuaGlzdG9yeT1mYWxzZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM1MjJiYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLnBkZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLSNNb24gQXByIDE3IDAyOjAxOjMzIEVEVCAyMDA2Ci1jb21waWxlcnMuaW5jb21wYXRpYmxlLWVudmlyb25tZW50PTAKLWNvbXBpbGVycy5wLmJ1aWxkPTAKLWNvbXBpbGVycy5wLmRlcHJlY2F0ZWQ9MQotY29tcGlsZXJzLnAuaWxsZWdhbC1hdHQtdmFsdWU9MAotY29tcGlsZXJzLnAubm8tcmVxdWlyZWQtYXR0PTAKLWNvbXBpbGVycy5wLm5vdC1leHRlcm5hbGl6ZWQtYXR0PTAKLWNvbXBpbGVycy5wLnVua25vd24tYXR0cmlidXRlPTAKLWNvbXBpbGVycy5wLnVua25vd24tY2xhc3M9MAotY29tcGlsZXJzLnAudW5rbm93bi1lbGVtZW50PTAKLWNvbXBpbGVycy5wLnVua25vd24tcmVzb3VyY2U9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1leC1wb2ludHM9MAotY29tcGlsZXJzLnAudW5yZXNvbHZlZC1pbXBvcnQ9MAotY29tcGlsZXJzLnAudW51c2VkLWVsZW1lbnQtb3ItYXR0cmlidXRlPTAKLWNvbXBpbGVycy51c2UtcHJvamVjdD10cnVlCi1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL01FVEEtSU5GL01BTklGRVNULk1GCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGViMGIzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLU1hbmlmZXN0LVZlcnNpb246IDEuMAotQnVuZGxlLU1hbmlmZXN0VmVyc2lvbjogMgotQnVuZGxlLU5hbWU6ICVCdW5kbGUtTmFtZS4wCi1CdW5kbGUtU3ltYm9saWNOYW1lOiBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMKLUJ1bmRsZS1WZXJzaW9uOiAxLjAuMjAyLnF1YWxpZmllcgotQnVuZGxlLUNsYXNzUGF0aDogdmFsaWRhdGV4bWx0ZXN0cy5qYXIKLUJ1bmRsZS1BY3RpdmF0b3I6IG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YTUxWYWxpZGF0b3JUZXN0c1BsdWdpbgotQnVuZGxlLVZlbmRvcjogJUJ1bmRsZS1WZW5kb3IuMAotQnVuZGxlLUxvY2FsaXphdGlvbjogcGx1Z2luCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUKLVJlcXVpcmUtQnVuZGxlOiBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLmNvcmUucnVudGltZSwKLSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUsCi0gb3JnLmVjbGlwc2Uud3N0LnhtbC51aSwKLSBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbiwKLSBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyCi1FY2xpcHNlLUxhenlTdGFydDogdHJ1ZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGVjNTk4OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvYWJvdXQuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLTwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAvL0VOIj4KLTxIVE1MPgotCi08aGVhZD4KLTx0aXRsZT5BYm91dDwvdGl0bGU+Ci08bWV0YSBodHRwLWVxdWl2PUNvbnRlbnQtVHlwZSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+Ci08L2hlYWQ+Ci0KLTxCT0RZIGxhbmc9IkVOLVVTIj4KLQotPEgzPkFib3V0IFRoaXMgQ29udGVudDwvSDM+Ci0KLTxQPk1heSAyLCAyMDA2PC9QPgotCi08SDM+TGljZW5zZTwvSDM+Ci0KLTxQPlRoZSBFY2xpcHNlIEZvdW5kYXRpb24gbWFrZXMgYXZhaWxhYmxlIGFsbCBjb250ZW50IGluIHRoaXMgcGx1Zy1pbiAKLSgiQ29udGVudCIpLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIENvbnRlbnQgaXMgcHJvdmlkZWQgdG8geW91IAotdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wIAotKCJFUEwiKS4gQSBjb3B5IG9mIHRoZSBFUEwgaXMgYXZhaWxhYmxlIGF0Ci08QSBocmVmPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHAiPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvb3JnL2RvY3VtZW50cy9lcGwtdjEwLnBocDwvQT4uIAotRm9yIHB1cnBvc2VzIG9mIHRoZSBFUEwsICJQcm9ncmFtIiB3aWxsIG1lYW4gdGhlIENvbnRlbnQuPC9QPgotCi08UD5JZiB5b3UgZGlkIG5vdCByZWNlaXZlIHRoaXMgQ29udGVudCBkaXJlY3RseSBmcm9tIHRoZSBFY2xpcHNlIEZvdW5kYXRpb24sIHRoZSAKLUNvbnRlbnQgaXMgYmVpbmcgcmVkaXN0cmlidXRlZCBieSBhbm90aGVyIHBhcnR5ICgiUmVkaXN0cmlidXRvciIpIGFuZCBkaWZmZXJlbnQgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8geW91ciB1c2Ugb2YgYW55IG9iamVjdCBjb2RlIGluIHRoZSBDb250ZW50LiAKLUNoZWNrIHRoZSBSZWRpc3RyaWJ1dG9yknMgbGljZW5zZSB0aGF0IHdhcyBwcm92aWRlZCB3aXRoIHRoZSBDb250ZW50LiBJZiBubyBzdWNoIAotbGljZW5zZSBleGlzdHMsIGNvbnRhY3QgdGhlIFJlZGlzdHJpYnV0b3IuIFVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIGJlbG93LCB0aGUgCi10ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRVBMIHN0aWxsIGFwcGx5IHRvIGFueSBzb3VyY2UgY29kZSBpbiB0aGUgQ29udGVudCAKLWFuZCBzdWNoIHNvdXJjZSBjb2RlIG1heSBiZSBvYnRhaW5lZCBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy8iPmh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvPC9BPi48L1A+Ci0KLTwvQk9EWT4KLTwvSFRNTD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiODljNTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL2J1aWxkLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLWJpbi5pbmNsdWRlcyA9IHRlc3QueG1sLFwKLSAgICAgICAgICAgICAgIHRlc3RyZXNvdXJjZXMvLFwKLSAgICAgICAgICAgICAgIHZhbGlkYXRleG1sdGVzdHMuamFyLFwKLSAgICAgICAgICAgICAgIE1FVEEtSU5GLyxcCi0gICAgICAgICAgICAgICBhYm91dC5odG1sCi1zb3VyY2UudmFsaWRhdGV4bWx0ZXN0cy5qYXIgPSBzcmMvCi1iaW4uZXhjbHVkZXMgPSB0ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVjMDU2OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UKLUJ1bmRsZS1OYW1lLjAgPSBYTUwgVmFsaWRhdG9yIFRlc3RzIFBsdWctaW4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFmN2Y5YS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL1hNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTMwICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0IHRoZSBYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlCi17Ci0gIFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247Ci0JCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0Jc3VwZXIuc2V0VXAoKTsKLQljb25maWd1cmF0aW9uID0gbmV3IFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gIH0KLQotCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCWNvbmZpZ3VyYXRpb24gPSBudWxsOwotCXN1cGVyLnRlYXJEb3duKCk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBUZXN0IHRoZSBkZWZhdWx0IHNldHRpbmcgb2YgdGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldFdhcm5Ob0dyYW1tYXJGZWF0dXJlRGVmYXVsdCgpCi0gIHsKLQl0cnkKLQl7Ci0JCWFzc2VydEZhbHNlKCJUaGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUgaXMgbm90IHNldCBieSBkZWZhdWx0IHRvIGZhbHNlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCByZWFkIHRoZSBXQVJOX05PX0dSQU1NQVIgZmVhdHVyZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyB0aGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUgdG8gdHJ1ZS4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTZXRXYXJuTm9HcmFtbWFyRmVhdHVyZVRydWUoKQotICB7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUiwgdHJ1ZSk7Ci0JICBhc3NlcnRUcnVlKCJUaGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUgaXMgbm90IHNldCB0byB0cnVlLiIsIGNvbmZpZ3VyYXRpb24uZ2V0RmVhdHVyZShYTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5XQVJOX05PX0dSQU1NQVIpKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCBXQVJOX05PX0dSQU1NQVIgdG8gdHJ1ZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyB0aGUgV0FSTl9OT19HUkFNTUFSIGZlYXR1cmUgdG8gZmFsc2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U2V0V2Fybk5vR3JhbW1hckZlYXR1cmVGYWxzZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uV0FSTl9OT19HUkFNTUFSLCBmYWxzZSk7Ci0JICBhc3NlcnRGYWxzZSgiVGhlIFdBUk5fTk9fR1JBTU1BUiBmZWF0dXJlIGlzIG5vdCBzZXQgdG8gZmFsc2UuIiwgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUikpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gc2V0IFdBUk5fTk9fR1JBTU1BUiB0byBmYWxzZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyBhIGZlYXR1cmUgdGhhdCBkb2Vzbid0IGV4aXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldE5vdEV4aXN0YW50RmVhdHVyZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoIk5PTl9FWElTVEFOVF9GRUFUVVJFIiwgZmFsc2UpOwotCSAgZmFpbCgiU2V0dGluZyBhIG5vbiBleGlzdGFudCBmZWF0dXJlIGRpZCBub3QgcHJvZHVjZSBhbiBleGNlcHRpb24uIik7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIC8vIFRoZSB0ZXN0IHN1Y2NlZWRzIGlmIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LgotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgZ2V0dGluZyBhIGZlYXR1cmUgdGhhdCBkb2Vzbid0IGV4aXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEdldE5vdEV4aXN0YW50RmVhdHVyZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLmdldEZlYXR1cmUoIk5PTl9FWElTVEFOVF9GRUFUVVJFIik7Ci0JICBmYWlsKCJHZXR0aW5nIGEgbm9uIGV4aXN0YW50IGZlYXR1cmUgZGlkIG5vdCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4iKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgLy8gVGhlIHRlc3Qgc3VjY2VlZHMgaWYgdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQuCi0JfQotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwYTY4ZTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5jb3JlLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnByZWZlcmVuY2VzLlhNTENvcmVQcmVmZXJlbmNlTmFtZXM7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uTWVzc2FnZTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25SZXBvcnQ7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLlhNTFZhbGlkYXRvclRlc3RzUGx1Z2luOwotCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBWYWxpZGF0b3JXcmFwcGVyIHZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3JXcmFwcGVyKCk7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShWYWxpZGF0b3JUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGFkZEluZm9Ub01lc3NhZ2UgbWV0aG9kLiBUaGUgZm9sbG93aW5nIHRlc3RzIGFyZSBwZXJmb3JtZWQ6PGJyLz4KLSAgICogMS4gV2hlbiB0aGUgdmFsaWRhdGlvbiBtZXNzYWdlIGNvbnRhaW5zIGEgbnVsbCBrZXkgbm90aGluZyBpcyBhZGRlZCB0byB0aGUgbWVzc2FnZS48YnIvPgotICAgKiAyLiBXaGVuIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSBrZXkgIkVOVElSRV9FTEVNRU5UIiB0aGUgdGhyZWUgYXR0cmlidXRlcyBhcmUgYWRkZWQKLSAgICogdG8gdGhlIG1ldGhvZCBhbmQgdGhlIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIGlzIG51bGwuPGJyLz4KLSAgICogMy4gV2hlbiB0aGUgbWVzc2FnZSBjb250YWlucyB0aGUga2V5ICJFbnRpdHlOb3REZWNsYXJlZCIgdGhlIHRocmVlIGF0dHJpYnV0ZXMgYXJlIHNldC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBZGRJbmZvVG9NZXNzYWdlKCkKLSAgewotICAgIC8vIFRoZXNlIHN0cmluZ3MgYXJlIGNvbW1vbiBhZGRpdGlvbiBpbmZvcm1hdGlvbiB0eXBlcy4KLQlTdHJpbmcgQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgPSAiY29sdW1uTnVtYmVyIjsgLy8kTk9OLU5MUy0xJAotCVN0cmluZyBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gInNxdWlnZ2xlU2VsZWN0aW9uU3RyYXRlZ3kiOyAvLyROT04tTkxTLTEkCi0JU3RyaW5nIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFID0gInNxdWlnZ2xlTmFtZU9yVmFsdWUiOyAvLyROT04tTkxTLTEkCi0JCi0JLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gdGhlIGF0dHJpYnV0ZXMgd2hlbiB0aGUgbWV0aG9kIGlzIGNhbGxlZAotCS8vIHdpdGggYSBudWxsIGtleS4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIpOwotCU1lc3NhZ2UgbWVzc2FnZSA9IG5ldyBNZXNzYWdlKCk7Ci0JdmFsaWRhdG9yLmFkZEluZm9Ub01lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UsIG1lc3NhZ2UpOwotCWFzc2VydE51bGwoIkNPTFVNTl9OVU1CRVJfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSwgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSB3YXMgbm90IG51bGwgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCBhIG51bGwga2V5LiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSksIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0JCi0JLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIHdoZW4gdGhlIGtleSBpcyBzZXQgdG8gIkVsZW1lbnRVbnRlcm1pbmF0ZWQiLgotCVZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlMiA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIsICJFbGVtZW50VW50ZXJtaW5hdGVkIiwgbnVsbCk7Ci0JTWVzc2FnZSBtZXNzYWdlMiA9IG5ldyBNZXNzYWdlKCk7Ci0JdmFsaWRhdG9yLmFkZEluZm9Ub01lc3NhZ2UodmFsaWRhdGlvbk1lc3NhZ2UyLCBtZXNzYWdlMik7Ci0JYXNzZXJ0RXF1YWxzKCJDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSB3YXMgY29ycmVjdGx5IHNldCB0byAxIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggdGhlIGtleSBFTlRJUkVfRUxFTUVOVC4gQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKENPTFVNTl9OVU1CRVJfQVRUUklCVVRFKSwgbmV3IEludGVnZXIoMSksIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSkpOwotCWFzc2VydEVxdWFscygiU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSB3YXMgbm90IEVOVElSRV9FTEVNRU5ULiBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSwgIkVOVElSRV9FTEVNRU5UIiwgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnROdWxsKCJTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSB3YXMgbm90IG51bGwgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IEVOVElSRV9FTEVNRU5ULiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpLCBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpKTsKLQkKLSAgICAvLyBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgY29udGFpbnMgdGhlIHRocmVlIGF0dHJpYnV0ZXMgd2hlbiB0aGUga2V5IGlzIHNldCB0byAiRW50aXR5Tm90RGVjbGFyZWQiLgotCVZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlMyA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIsICJFbnRpdHlOb3REZWNsYXJlZCIsIG5ldyBPYmplY3RbXXsiTXlOYW1lIn0pOwotCU1lc3NhZ2UgbWVzc2FnZTMgPSBuZXcgTWVzc2FnZSgpOwotCXZhbGlkYXRvci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlMywgbWVzc2FnZTMpOwotCWFzc2VydEVxdWFscygiQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgd2FzIGNvcnJlY3RseSBzZXQgdG8gMSBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIHRoZSBrZXkgRW50aXR5Tm90RGVjbGFyZWQuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSksIG5ldyBJbnRlZ2VyKDEpLCBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgd2FzIG5vdCBURVhUX0VOVElUWV9SRUZFUkVOQ0UuIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpLCAiVEVYVF9FTlRJVFlfUkVGRVJFTkNFIiwgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIHdhcyBub3Qgc2V0IHRvIE15TmFtZSBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIHRoZSBrZXkgRW50aXR5Tm90RGVjbGFyZWQuIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSksICJNeU5hbWUiLCBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIHZhbGlkYXRlIG1ldGhvZC4gVGVzdHMgdG8gYmUgcGVyZm9ybWVkOjxici8+Ci0gICAqIDEuIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSBmcm9tIGEgVVJJIG9yIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuPGJyLz4KLSAgICogMi4gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYW4gaW52YWxpZCBmaWxlIGZyb20gYSBVUkkgb3IgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICAvLyBUZXN0IHRoYXQgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgZnJvbSBhIFVSSSBhbmQgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLQkgIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbkxvY2F0aW9uKCkudG9TdHJpbmcoKSArICIvIjsKLQkgIFN0cmluZyB1cmkgPSAiZmlsZTovLy8iICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyAidGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54bWwiOwotCSAgVmFsaWRhdGlvblJlcG9ydCByZXBvcnQxID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgbnVsbCk7Ci0JICBWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDIgPSBudWxsOwotCSAgSW5wdXRTdHJlYW0gaXMgPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGlzID0gbmV3IFVSTCh1cmkpLm9wZW5TdHJlYW0oKTsKLQkgICAgcmVwb3J0MiA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlzLCBudWxsKTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgYXNzZXJ0VHJ1ZSgiVmFsaWRhdGlvbiB1c2luZyBhIFVSSSBkaWQgbm90IHByb2R1Y3QgYSB2YWxpZCB2YWxpZGF0aW9uIHJlc3VsdC4iLCByZXBvcnQxLmlzVmFsaWQoKSk7Ci0JICBhc3NlcnRFcXVhbHMoIlZhbGlkYXRpb24gdXNpbmcgVVJJIGFuZCB1c2luZyBpbnB1dHN0cmVhbSBvZiB0aGUgc2FtZSBmaWxlIHByb2R1Y2VzIGRpZmZlcmVudCBudW1iZXJzIG9mIGVycm9ycy4iLCByZXBvcnQxLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCSAgCi0gICAgICAvLyBUZXN0IHRoYXQgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgZnJvbSBhIFVSSSBhbmQgYW4gaW5wdXQgc3RyZWFtIHByb2R1Y2VzIHRoZSBzYW1lIHJlc3VsdC4KLQkgIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueG1sIjsKLQkgIHJlcG9ydDEgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBudWxsKTsKLQkgIHJlcG9ydDIgPSBudWxsOwotCSAgaXMgPSBudWxsOwotCSAgdHJ5Ci0JICB7Ci0JICAgIGlzID0gbmV3IFVSTCh1cmkpLm9wZW5TdHJlYW0oKTsKLQkgICAgcmVwb3J0MiA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIGlzLCBudWxsKTsKLQkgIH0KLQkgIGNhdGNoKEV4Y2VwdGlvbiBlKQotCSAgewotCQlmYWlsKCJBIHByb2JsZW0gb2NjdXJyZWQgd2hpbGUgdmFsaWRhdGluZyBhbiBpbnZhbGlkIGZpbGUgd2l0aCBhbiBpbnB1dHN0cmVhbTogIiArIGUpOwotCSAgfQotCSAgZmluYWxseQotCSAgewotCQlpZihpcyAhPSBudWxsKQotCQl7Ci0JCSAgdHJ5Ci0JCSAgewotCQkgICAgaXMuY2xvc2UoKTsKLQkJICB9Ci0JCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkJICB7Ci0JCQkvLyBEbyBub3RoaW5nLgotCQkgIH0KLQkJfQotCSAgfQotCSAgYXNzZXJ0RmFsc2UoIlZhbGlkYXRpb24gdXNpbmcgYSBVUkkgZGlkIG5vdCBwcm9kdWN0IGFuIGludmFsaWQgdmFsaWRhdGlvbiByZXN1bHQuIiwgcmVwb3J0MS5pc1ZhbGlkKCkpOwotCSAgYXNzZXJ0RXF1YWxzKCJWYWxpZGF0aW9uIHVzaW5nIFVSSSBhbmQgdXNpbmcgaW5wdXRzdHJlYW0gb2YgdGhlIHNhbWUgZmlsZSBwcm9kdWNlcyBkaWZmZXJlbnQgbnVtYmVycyBvZiBlcnJvcnMuIiwgcmVwb3J0MS5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgsIHJlcG9ydDIuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIGxvY2F0ZSBwbHVnLWluIGxvY2F0aW9uOiAiICsgZSk7Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZSBpcyByZWFkIGZyb20gdGhlIFhNTCBjb3JlIHByZWZlcmVuY2VzLgotICAgKiBUaGVyZSBhcmUgdGhyZWUgdGVzdHMgdG8gcGVyZm9ybS4KLSAgICogMS4gVGVzdCB0aGF0IHRoZSBkZWZhdWx0IHByZWZlcmVuY2UgaXMgZGlzYWJsZWQuCi0gICAqIDIuIFRlc3QgdGhhdCBzZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHRvIGVuYWJsZWQgd29ya3MuCi0gICAqIDMuIFRlc3QgdGhhdCBzZXR0aW5nIHRoZSBwcmVmZXJlbmNlIHRvIGRpc2FibGVkIHdvcmtzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFdhcm5Ob0dyYW1tYXJQcmVmZXJlbmNlKCkKLSAgewotCS8vIFRlc3QgdGhhdCB0aGUgZGVmYXVsdCBwcmVmZXJlbmNlIGlzIGRpc2FibGVkLgotCXZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24obnVsbCk7Ci0JYXNzZXJ0RmFsc2UoIlRoZSBkZWZhdWx0IHdhcm4gbm8gZ3JhbW1hciBwcmVmZXJlbmNlIGlzIG5vdCBmYWxzZS4iLCB2YWxpZGF0b3IuZ2V0V2Fybk5vR3JhbW1hclByZWZlcmVuY2UoKSk7Ci0JCi0JLy8gVGVzdCB0aGF0IHRoZSBwcmVmZXJlbmNlIGlzIHJlYWQgd2hlbiBlbmFibGVkLgotCVhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldFBsdWdpblByZWZlcmVuY2VzKCkuc2V0VmFsdWUoWE1MQ29yZVByZWZlcmVuY2VOYW1lcy5XQVJOX05PX0dSQU1NQVIsIHRydWUpOwotCXZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24obnVsbCk7Ci0JYXNzZXJ0VHJ1ZSgiVGhlIHdhcm4gbm8gZ3JhbW1hciBwcmVmZXJlbmNlIGlzIG5vdCB0cnVlIHdoZW4gdGhlIHByZWZlcmVuY2UgaXMgc2V0IHRvIHRydWUuIiwgdmFsaWRhdG9yLmdldFdhcm5Ob0dyYW1tYXJQcmVmZXJlbmNlKCkpOwotCQotCQotCS8vIFRlc3QgdGhhdCB0aGUgcHJlZmVyZW5jZSBpcyByZWFkIHdoZW4gZGlzYWJsZWQuCi0JWE1MQ29yZVBsdWdpbi5nZXREZWZhdWx0KCkuZ2V0UGx1Z2luUHJlZmVyZW5jZXMoKS5zZXRWYWx1ZShYTUxDb3JlUHJlZmVyZW5jZU5hbWVzLldBUk5fTk9fR1JBTU1BUiwgZmFsc2UpOwotCXZhbGlkYXRvci5zZXR1cFZhbGlkYXRpb24obnVsbCk7Ci0JYXNzZXJ0RmFsc2UoIlRoZSB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZSBpcyBub3QgZmFsc2Ugd2hlbiB0aGUgcHJlZmVyZW5jZSBpcyBzZXQgdG8gZmFsc2UuIiwgdmFsaWRhdG9yLmdldFdhcm5Ob0dyYW1tYXJQcmVmZXJlbmNlKCkpOwotCQotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjZhZDk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuTmVzdGVkVmFsaWRhdG9yQ29udGV4dDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotCi0vKioKLSAqIFRoaXMgY2xhc3MgZXh0ZW5kcyB2YWxpZGF0b3IgdG8gZXhwb3NlIHRoZSBwcm90ZWN0ZWQgbWV0aG9kcwotICogZm9yIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3JXcmFwcGVyIGV4dGVuZHMgVmFsaWRhdG9yIAotewotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IjYWRkSW5mb1RvTWVzc2FnZShvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlLCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgYWRkSW5mb1RvTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSwgSU1lc3NhZ2UgbWVzc2FnZSkgCi0gIHsKLQlzdXBlci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlLCBtZXNzYWdlKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yI3NldHVwVmFsaWRhdGlvbihvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLk5lc3RlZFZhbGlkYXRvckNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXR1cFZhbGlkYXRpb24oTmVzdGVkVmFsaWRhdG9yQ29udGV4dCBjb250ZXh0KSAKLSAgewotCXN1cGVyLnNldHVwVmFsaWRhdGlvbihjb250ZXh0KTsKLSAgfQotCi0vKioKLSAgICogRXhwb3J0IHRoZSB3YXJuIG5vIGdyYW1tYXIgcHJlZmVyZW5jZSBmb3IgdGVzdGluZy4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIHdhcm4gbm8gZ3JhbW1hciBwcmVmZXJlbmNlLgotICAgKi8KLSAgcHVibGljIGJvb2xlYW4gZ2V0V2Fybk5vR3JhbW1hclByZWZlcmVuY2UoKQotICB7Ci0JcmV0dXJuIHdhcm5Ob0dyYW1tYXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRiZjNjYi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWE1MTWVzc2FnZUluZm9IZWxwZXJUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0IGNhc2UgdG8gdGVzdCB0aGUgWE1MTWVzc2FnZUluZm9IZWxwZXIgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxNZXNzYWdlSW5mb0hlbHBlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgcHJpdmF0ZSBYTUxNZXNzYWdlSW5mb0hlbHBlciBoZWxwZXIgPSBuZXcgWE1MTWVzc2FnZUluZm9IZWxwZXIoKTsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFhNTE1lc3NhZ2VJbmZvSGVscGVyVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgdGhlIGNyZWF0ZU1lc3NhZ2VJbmZvIG1ldGhvZCByZXR1cm5zIHsiIiwgbnVsbH0gd2hlbgotICAgKiBnaXZlbiBhIG5vbi1leGlzdGFudCBrZXkgYW5kIG51bGwgbWVzc2FnZSBhcmd1bWVudHMuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Tm90RXhpc3RhbnRLZXlBbmROdWxsTWVzc2FnZUFyZ3VtZW50cygpCi0gIHsKLQlTdHJpbmdbXSBtZXNzYWdlSW5mbyA9IGhlbHBlci5jcmVhdGVNZXNzYWdlSW5mbygiTk9OX0VYSVNUQU5UX0tFWSIsIG51bGwpOwotCWFzc2VydEVxdWFscygiVGhlIHNlbGVjdGlvbiBzdHJhdGVneSByZXR1cm5lZCB3YXMgbm90IGFuIGVtcHR5IHN0cmluZy4iLCAiIiwgbWVzc2FnZUluZm9bMF0pOwotCWFzc2VydE51bGwoIlRoZSBuYW1lT3JWYWx1ZSByZXR1cm5lZCB3YXMgbm90IG51bGwuIiwgbWVzc2FnZUluZm9bMV0pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSBjcmVhdGVNZXNzYWdlSW5mbyBtZXRob2QgcmV0dXJucyB7IiIsIG51bGx9IHdoZW4KLSAgICogZ2l2ZW4gYSBub24tZXhpc3RhbnQga2V5IGFuZCBudWxsIG1lc3NhZ2UgYXJndW1lbnRzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE51bGxLZXlBbmRNZXNzYWdlQXJndW1lbnRzKCkKLSAgewotCVN0cmluZ1tdIG1lc3NhZ2VJbmZvID0gaGVscGVyLmNyZWF0ZU1lc3NhZ2VJbmZvKG51bGwsIG51bGwpOwotCWFzc2VydEVxdWFscygiVGhlIHNlbGVjdGlvbiBzdHJhdGVneSByZXR1cm5lZCB3YXMgbm90IGFuIGVtcHR5IHN0cmluZy4iLCAiIiwgbWVzc2FnZUluZm9bMF0pOwotCWFzc2VydE51bGwoIlRoZSBuYW1lT3JWYWx1ZSByZXR1cm5lZCB3YXMgbm90IG51bGwuIiwgbWVzc2FnZUluZm9bMV0pOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxWYWxpZGF0b3JUZXN0LmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWE1MVmFsaWRhdG9yVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMDA1NWM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxWYWxpZGF0b3JUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLQotLyoqCi0gKiBUZXN0IHRoZSBFY2xpcHNlIHNwZWNpZmljIFhNTCB2YWxpZGF0b3IuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxWYWxpZGF0b3JUZXN0IGV4dGVuZHMgVGVzdENhc2UgCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFhNTFZhbGlkYXRvclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0byBlbnN1cmUgdGhlIFVSSSByZXNvbHZlciBpcyBub3QgbnVsbCBpbiB0aGUgRWNsaXBzZQotICAgKiBzcGVjaWZpYyBYTUwgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVSSVJlc29sdmVySXNSZWdpc3RlcmVkKCkKLSAgewotCVhNTFZhbGlkYXRvcldyYXBwZXIgdmFsaWRhdG9yID0gbmV3IFhNTFZhbGlkYXRvcldyYXBwZXIoKTsKLQlhc3NlcnROb3ROdWxsKCJUaGUgVVJJIHJlc29sdmVyIGlzIG51bGwuIiwgdmFsaWRhdG9yLmdldFVSSVJlc29sdmVyKCkpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxWYWxpZGF0b3JXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWE1MVmFsaWRhdG9yV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTFhMDk2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YTUxWYWxpZGF0b3JXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QuY29tbW9uLnVyaXJlc29sdmVyLmludGVybmFsLnByb3Zpc2lvbmFsLlVSSVJlc29sdmVyOwotCi0vKioKLSAqIFdyYXBwZXIgZm9yIHRoZSBFY2xpcHNlIFhNTCB2YWxpZGF0b3IgY2xhc3MgdG8gYWxsb3cgZm9yIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBYTUxWYWxpZGF0b3JXcmFwcGVyIGV4dGVuZHMgWE1MVmFsaWRhdG9yIAotewotICAvKioKLSAgICogQ29uc3RydWN0b3IuCi0gICAqLwotICBwdWJsaWMgWE1MVmFsaWRhdG9yV3JhcHBlcigpCi0gIHsKLQlzdXBlcigpOwotICB9Ci0gIAotICAvKioKLSAgICogR2V0IHRoZSBVUkkgcmVzb2x2ZXIgcmVnaXN0ZXJlZCBvbiB0aGUgWE1MIHZhbGlkYXRvci4KLSAgICogCi0gICAqIEByZXR1cm4gVGhlIFVSSSByZXNvbHZlciByZWdpc3RlcmVkIG9uIHRoZSBYTUwgdmFsaWRhdG9yLgotICAgKi8KLSAgcHVibGljIFVSSVJlc29sdmVyIGdldFVSSVJlc29sdmVyKCkKLSAgewotCXJldHVybiB1cmlSZXNvbHZlcjsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRiNDVkMWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbjsKLQotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uSW5mbzsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5FcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyLkVycm9yTWVzc2FnZUluZm9ybWF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YTUxWYWxpZGF0b3JUZXN0c1BsdWdpbjsKLQotLyoqCi0gKiBUZXN0IHRoZSBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLQkKLSAgLyoqCi0gICAqIFRlc3QgdGhlIHN0YXJ0RWxlbWVudCBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIHRlc3RzOgotICAgKiAxLiBUZXN0IHRoYXQgdGhlIHJvb3QgZWxlbWVudCBpcyBwcm9wZXJseSBwdXNoZWQgdG8gdGhlIHN0YWNrLgotICAgKiAyLiBUZXN0IHRoYXQgYSBzdWJzZXF1ZW50IGVsZW1lbnQgaXMgcHJvcGVybHkgcHVzaGVkIHRvIHRoZSBzdGFjayBhbmQKLSAgICogICAgcmVnaXN0ZXJlZCBhcyBhIGNoaWxkIGVsZW1lbnQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3RhcnRFbGVtZW50KCkKLSAgewotCS8vIDEuIFRlc3QgdGhhdCB0aGUgcm9vdCBlbGVtZW50IGlzIHByb3Blcmx5IHB1c2hlZCB0byB0aGUgc3RhY2suCi0JU3RyaW5nIG5hbWVzcGFjZTEgPSAiaHR0cDovL25hbWVzcGFjZTEiOwotCVN0cmluZyBsb2NhbG5hbWUxID0gImxvY2FsbmFtZSI7Ci0JRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgbWFuYWdlciA9IG5ldyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlcigpOwotCWFzc2VydEVxdWFscygiMS4gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gc3RhY2sgaXMgbm90IGVtcHR5IHRvIHN0YXJ0LiIsIDAsIG1hbmFnZXIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5zaXplKCkpOwotCW1hbmFnZXIuc3RhcnRFbGVtZW50KG5hbWVzcGFjZTEsIGxvY2FsbmFtZTEpOwotCUVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtSW5mbyA9IChFbGVtZW50SW5mb3JtYXRpb24pbWFuYWdlci5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnBvcCgpOwotCWFzc2VydEVxdWFscygiMS4gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gc3RhY2sgaXMgbm90IGVtcHR5IHRvIGFmdGVyIHBvcHBpbmcgdGhlIHRvcCBlbGVtZW50LiIsIDAsIG1hbmFnZXIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiMS4gVGhlIG5hbWVzcGFjZSBzcGVjaWZpZWQgb24gdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gaXMgbm90IGh0dHA6Ly9uYW1lc3BhY2UxIGl0IGlzICIgKyBlbGVtSW5mby5nZXROYW1lc3BhY2UoKSwgbmFtZXNwYWNlMSwgZWxlbUluZm8uZ2V0TmFtZXNwYWNlKCkpOwotCWFzc2VydEVxdWFscygiMS4gVGhlIGxvY2FsIG5hbWUgc3BlY2lmaWVkIG9uIHRoZSBlbGVtZW50IGluZm9ybWF0aW9uIGlzIG5vdCBsb2NhbG5hbWUgaXQgaXMgIiArIGVsZW1JbmZvLmdldExvY2FsbmFtZSgpLCBsb2NhbG5hbWUxLCBlbGVtSW5mby5nZXRMb2NhbG5hbWUoKSk7Ci0JCi0JLy8gMi4gVGVzdCB0aGF0IGEgc3Vic2VxdWVudCBlbGVtZW50IGlzIHByb3Blcmx5IHB1c2hlZCB0byB0aGUgc3RhY2sgYW5kIHJlZ2lzdGVyZWQgYXMgYSBjaGlsZCBlbGVtZW50LgotCVN0cmluZyBsb2NhbG5hbWUyID0gImxvY2FsbmFtZTIiOwotICAgIEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyIG1hbmFnZXIyID0gbmV3IEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyKCk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjayBpcyBub3QgZW1wdHkgdG8gc3RhcnQuIiwgMCwgbWFuYWdlcjIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5zaXplKCkpOwotCW1hbmFnZXIyLnN0YXJ0RWxlbWVudChuYW1lc3BhY2UxLCBsb2NhbG5hbWUxKTsKLQltYW5hZ2VyMi5zdGFydEVsZW1lbnQobmFtZXNwYWNlMSwgbG9jYWxuYW1lMik7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjayBkb2VzIG5vdCBjb250YWluIDIgZWxlbWVudHMuIiwgMiwgbWFuYWdlcjIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5zaXplKCkpOwotCUVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtSW5mbzIgPSAoRWxlbWVudEluZm9ybWF0aW9uKW1hbmFnZXIyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkucG9wKCk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjayBkb2VzIG5vdCBjb250YWluIDEgZWxlbWVudCBhZnRlciBwb3BwaW5nIHRoZSB0b3AgZWxlbWVudC4iLCAxLCBtYW5hZ2VyMi5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnNpemUoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgbmFtZXNwYWNlIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbiBjaGlsZCBpcyBub3QgaHR0cDovL25hbWVzcGFjZTEgaXQgaXMgIiArIGVsZW1JbmZvMi5nZXROYW1lc3BhY2UoKSwgbmFtZXNwYWNlMSwgZWxlbUluZm8yLmdldE5hbWVzcGFjZSgpKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBsb2NhbCBuYW1lIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbiBjaGlsZCBpcyBub3QgbG9jYWxuYW1lMiBpdCBpcyAiICsgZWxlbUluZm8yLmdldExvY2FsbmFtZSgpLCBsb2NhbG5hbWUyLCBlbGVtSW5mbzIuZ2V0TG9jYWxuYW1lKCkpOwotCUVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtSW5mbzMgPSAoRWxlbWVudEluZm9ybWF0aW9uKW1hbmFnZXIyLmdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkucG9wKCk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgZWxlbWVudCBpbmZvcm1hdGlvbiBzdGFjayBkb2VzIG5vdCBjb250YWluIDAgZWxlbWVudHMgYWZ0ZXIgcG9wcGluZyB0aGUgdG9wIGVsZW1lbnQuIiwgMCwgbWFuYWdlcjIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5zaXplKCkpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIG5hbWVzcGFjZSBzcGVjaWZpZWQgb24gdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gaXMgbm90IGh0dHA6Ly9uYW1lc3BhY2UxIGl0IGlzICIgKyBlbGVtSW5mbzMuZ2V0TmFtZXNwYWNlKCksIG5hbWVzcGFjZTEsIGVsZW1JbmZvMy5nZXROYW1lc3BhY2UoKSk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgbG9jYWwgbmFtZSBzcGVjaWZpZWQgb24gdGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gaXMgbm90IGxvY2FsbmFtZSBpdCBpcyAiICsgZWxlbUluZm8zLmdldExvY2FsbmFtZSgpLCBsb2NhbG5hbWUxLCBlbGVtSW5mbzMuZ2V0TG9jYWxuYW1lKCkpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGVsZW1lbnQgaW5mb3JtYXRpb24gZG9lcyBub3QgY29udGFpbiAxIGNoaWxkIGVsZW1lbnQgaXQgY29udGFpbnMgIiArIGVsZW1JbmZvMy5nZXRDaGlsZHJlbigpLnNpemUoKSwgMSwgZWxlbUluZm8zLmdldENoaWxkcmVuKCkuc2l6ZSgpKTsKLQlFbGVtZW50SW5mb3JtYXRpb24gZWxlbUluZm80ID0gKEVsZW1lbnRJbmZvcm1hdGlvbillbGVtSW5mbzMuZ2V0Q2hpbGRyZW4oKS5nZXQoMCk7Ci0JYXNzZXJ0RXF1YWxzKCIyLiBUaGUgbmFtZXNwYWNlIHNwZWNpZmllZCBvbiB0aGUgZWxlbWVudCBpbmZvcm1hdGlvbidzIGNoaWxkIGlzIG5vdCBodHRwOi8vbmFtZXNwYWNlMSBpdCBpcyAiICsgZWxlbUluZm80LmdldE5hbWVzcGFjZSgpLCBuYW1lc3BhY2UxLCBlbGVtSW5mbzQuZ2V0TmFtZXNwYWNlKCkpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGxvY2FsIG5hbWUgc3BlY2lmaWVkIG9uIHRoZSBlbGVtZW50IGluZm9ybWF0aW9uJ3MgY2hpbGQgaXMgbm90IGxvY2FsbmFtZTIgaXQgaXMgIiArIGVsZW1JbmZvNC5nZXRMb2NhbG5hbWUoKSwgbG9jYWxuYW1lMiwgZWxlbUluZm80LmdldExvY2FsbmFtZSgpKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGVuZEVsZW1lbnQgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyB0ZXN0czoKLSAgICogMS4gQ2hlY2sgdGhhdCB0aGUgbGFzdCBlbGVtZW50IG9uIHRoZSBzdGFjayBpcyBzdWNjZXNzZnVsbHkgcG9wcGVkLgotICAgKiAyLiBUZXN0IHRoYXQgYW4gZWxlbWVudCBpbiBhIHNhbXBsZSBuYW1lc3BhY2UgcHJvZHVjZXMgdGhlIGV4cGVjdGVkIG1lc3NhZ2UuCi0gICAqIDMuIFRlc3QgdGhhdCBhbiBlbGVtZW50IG5vdCBpbiBhIHNhbXBsZSBuYW1lc3BhY2UgcmV0YWlucyBpdHMgdmFsdWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RW5kRWxlbWVudCgpCi0gIHsKLQkvLyAxLiBDaGVjayB0aGF0IHRoZSBsYXN0IGVsZW1lbnQgb24gdGhlIHN0YWNrIGlzIHN1Y2Nlc3NmdWxseSBwb3BwZWQuCi0JU3RyaW5nIG5hbWVzcGFjZTEgPSAiaHR0cDovL25hbWVzcGFjZTEiOwotICAgIFN0cmluZyBsb2NhbG5hbWUxID0gImxvY2FsbmFtZSI7Ci0JRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgbWFuYWdlciA9IG5ldyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlcigpOwotCW1hbmFnZXIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5wdXNoKG5ldyBFbGVtZW50SW5mb3JtYXRpb24obmFtZXNwYWNlMSwgbG9jYWxuYW1lMSkpOwotCW1hbmFnZXIuZW5kRWxlbWVudChuYW1lc3BhY2UxLCBsb2NhbG5hbWUxKTsKLQlhc3NlcnRFcXVhbHMoIjEuIFRoZSBzdGFjayBzdGlsbCBjb250YWlucyBhbiBlbGVtZW50LiIsIDAsIG1hbmFnZXIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5zaXplKCkpOwotCQotCS8vIDIuIFRlc3QgdGhhdCBhbiBlbGVtZW50IGluIGEgc2FtcGxlIG5hbWVzcGFjZSBwcm9kdWNlcyB0aGUgZXhwZWN0ZWQgbWVzc2FnZS4KLQlTdHJpbmcgbmFtZXNwYWNlMiA9ICJYTUxWYWxpZGF0aW9uVGVzdFNhbXBsZU5hbWVzcGFjZSI7Ci0JRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnkuZ2V0SW5zdGFuY2UoKS5hZGRFcnJvck1lc3NhZ2VDdXN0b21pemVyKG5hbWVzcGFjZTIsIG5ldyBTYW1wbGVFcnJvck1lc3NhZ2VDdXN0b21pemVyKCkpOwotCUVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyIG1hbmFnZXIyID0gbmV3IEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyKCk7Ci0JbWFuYWdlcjIuZ2V0RWxlbWVudEluZm9ybWF0aW9uU3RhY2soKS5wdXNoKG5ldyBFbGVtZW50SW5mb3JtYXRpb24obmFtZXNwYWNlMiwgbG9jYWxuYW1lMSkpOwotCUVycm9yTWVzc2FnZUluZm9ybWF0aW9uIGVtaSA9IG1hbmFnZXIyLm5ldyBFcnJvck1lc3NhZ2VJbmZvcm1hdGlvbigpOwotCWVtaS5tZXNzYWdlID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlKCJTYW1wbGVNZXNzYWdlIiwgMSwgMiwgbmFtZXNwYWNlMik7Ci0JbWFuYWdlcjIuc2V0TWVzc2FnZUZvckNvbnNpZGVyYXRpb24oZW1pKTsKLQltYW5hZ2VyMi5lbmRFbGVtZW50KG5hbWVzcGFjZTIsIGxvY2FsbmFtZTEpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIG1lc3NhZ2Ugd2FzIG5vdCBjdXN0b21pemVkIHRvIEFBQUEuIFRoZSBtZXNzYWdlIGlzICIgKyBlbWkubWVzc2FnZS5nZXRNZXNzYWdlKCksICJBQUFBIiwgZW1pLm1lc3NhZ2UuZ2V0TWVzc2FnZSgpKTsKLQkKLQkvLyAzLiBUZXN0IHRoYXQgYW4gZWxlbWVudCBub3QgaW4gYSBzYW1wbGUgbmFtZXNwYWNlIHJldGFpbnMgaXRzIHZhbHVlLgotCVN0cmluZyBuYW1lc3BhY2UzID0gIlhNTFZhbGlkYXRpb25UZXN0U2FtcGxlTmFtZXNwYWNlMyI7Ci0JRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgbWFuYWdlcjMgPSBuZXcgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIoKTsKLQltYW5hZ2VyMy5nZXRFbGVtZW50SW5mb3JtYXRpb25TdGFjaygpLnB1c2gobmV3IEVsZW1lbnRJbmZvcm1hdGlvbihuYW1lc3BhY2UzLCBsb2NhbG5hbWUxKSk7Ci0JRXJyb3JNZXNzYWdlSW5mb3JtYXRpb24gZW1pMiA9IG1hbmFnZXIzLm5ldyBFcnJvck1lc3NhZ2VJbmZvcm1hdGlvbigpOwotCWVtaTIubWVzc2FnZSA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiU2FtcGxlTWVzc2FnZSIsIDEsIDIsIG5hbWVzcGFjZTMpOwotCW1hbmFnZXIzLnNldE1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uKGVtaTIpOwotCW1hbmFnZXIzLmVuZEVsZW1lbnQobmFtZXNwYWNlMywgbG9jYWxuYW1lMSk7Ci0JYXNzZXJ0RXF1YWxzKCIzLiBUaGUgbWVzc2FnZSBkaWQgbm90IHJldGFpbiBpdHMgdmFsdWUgb2YgU2FtcGxlTWVzc2FnZS4gVGhlIG1lc3NhZ2UgaXMgIiArIGVtaTIubWVzc2FnZS5nZXRNZXNzYWdlKCksICJTYW1wbGVNZXNzYWdlIiwgZW1pMi5tZXNzYWdlLmdldE1lc3NhZ2UoKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoZSBjb25zaWRlclJlcG9ydGVkRXJyb3IgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyB0ZXN0czoKLSAgICogMS4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZUZvckNvbnNpZGVyYXRpb24gaXMgbm90IHNldCBpZiB0aGVyZSBhcmUgbm8gY3VycmVudAotICAgKiAgICB2YWxpZGF0aW9uIG1lc3NhZ2VzLgotICAgKiAyLiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlRm9yQ29uc2lkZXJhdGlvbiBpcyBzZXQgY29ycmVjdGx5IGlmIHRoZXJlIGlzIGEKLSAgICogICAgdmFsaWRhdGlvbiBtZXNzYWdlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENvbnNpZGVyUmVwb3J0ZWRFcnJvcigpCi0gIHsKLQkvLyAxLiBDaGVjayB0aGF0IHRoZSBtZXNzYWdlRm9yQ29uc2lkZXJhdGlvbiBpcyBub3Qgc2V0IGlmIHRoZXJlIGFyZSBubyBjdXJyZW50IHZhbGlkYXRpb24gbWVzc2FnZXMuCi0JU3RyaW5nIG5hbWVzcGFjZTEgPSAiaHR0cDovL25hbWVzcGFjZTEiOwotCUVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyIG1hbmFnZXIgPSBuZXcgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIoKTsKLQlWYWxpZGF0aW9uSW5mbyB2YWxpbmZvID0gbmV3IFZhbGlkYXRpb25JbmZvKG5hbWVzcGFjZTEpOwotCW1hbmFnZXIuY29uc2lkZXJSZXBvcnRlZEVycm9yKHZhbGluZm8sICJrZXkiLCBudWxsKTsKLQlhc3NlcnROdWxsKCIxLiBUaGUgbWVzc2FnZUZvckNvbnNpZGVyYXRpb24gaXMgbm90IG51bGwgd2hlbiBubyB2YWxpZGF0aW9uIG1lc3NhZ2VzIGV4aXN0LiIsIG1hbmFnZXIuZ2V0TWVzc2FnZUZvckNvbnNpZGVyYXRpb24oKSk7Ci0JCi0JLy8gMi4gQ2hlY2sgdGhhdCB0aGUgbWVzc2FnZUZvckNvbnNpZGVyYXRpb24gaXMgc2V0IGNvcnJlY3RseSBpZiB0aGVyZSBpcyBhIHZhbGlkYXRpb24gbWVzc2FnZS4KLQlFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlciBtYW5hZ2VyMiA9IG5ldyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlcigpOwotCVZhbGlkYXRpb25JbmZvIHZhbGluZm8yID0gbmV3IFZhbGlkYXRpb25JbmZvKG5hbWVzcGFjZTEpOwotCXZhbGluZm8yLmFkZEVycm9yKCJtZXNzYWdlIiwgMSwgMSwgbmFtZXNwYWNlMSk7Ci0JbWFuYWdlcjIuY29uc2lkZXJSZXBvcnRlZEVycm9yKHZhbGluZm8yLCAia2V5IiwgbnVsbCk7Ci0JYXNzZXJ0Tm90TnVsbCgiMi4gVGhlIG1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uIGlzIG51bGwgd2hlbiBhIHZhbGlkYXRpb24gbWVzc2FnZSBleGlzdHMuIiwgbWFuYWdlcjIuZ2V0TWVzc2FnZUZvckNvbnNpZGVyYXRpb24oKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoYXQgYW4gZXJyb3IgY3VzdG9taXplciBpcyBvbmx5IGNhbGxlZCBmb3IgdGhlCi0gICAqIGNvcnJlY3QgZWxlbWVudC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFcnJvclJlcG9ydGVkT25Db3JyZWN0RWxlbWVudCgpCi0gIHsKLQkgIElFcnJvck1lc3NhZ2VDdXN0b21pemVyIHRlc3RDdXN0b21pemVyID0gbmV3IElFcnJvck1lc3NhZ2VDdXN0b21pemVyKCkKLQkgIHsKLQkJICBwdWJsaWMgU3RyaW5nIGN1c3RvbWl6ZU1lc3NhZ2UoRWxlbWVudEluZm9ybWF0aW9uIGVsZW1lbnRJbmZvLCBTdHJpbmcga2V5LCBPYmplY3RbXSBhcmd1bWVudHMpCi0JCSAgewotCQkJICBpZihlbGVtZW50SW5mby5nZXRMb2NhbG5hbWUoKS5lcXVhbHMoImNoaWxkMSIpKQotCQkJICB7Ci0JCQkJICBmYWlsKCJBbiBlcnJvciB3YXMgcmVwb3J0ZWQgZm9yIHRoZSBjaGlsZDEgZWxlbWVudC4iKTsKLQkJCSAgfQotCQkJICByZXR1cm4gbnVsbDsKLQkJICB9Ci0JICB9OwotCSAgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnkgcmVnaXN0cnkgPSBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeS5nZXRJbnN0YW5jZSgpOwotCSAgcmVnaXN0cnkuYWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplcigiaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zaW1wbGVuZXN0ZWQiLCB0ZXN0Q3VzdG9taXplcik7Ci0JICB0cnkKLQkgIHsKLQkJICBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRQbHVnaW5Mb2NhdGlvbigpLnRvU3RyaW5nKCkgKyAiLyI7Ci0JCSAgU3RyaW5nIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ3VzdG9tRXJyb3JSZXBvcnRlZE9uQ29ycmVjdEVsZW1lbnQvc2ltcGxlbmVzdGVkLnhtbCI7Ci0JCSAgCi0JCSAgWE1MVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBYTUxWYWxpZGF0b3IoKTsKLQkJICB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBuZXcgWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24oKSk7Ci0JCSAgdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgbnVsbCwgbmV3IFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCkpOwotCSAgfQotCSAgY2F0Y2goSU9FeGNlcHRpb24gZSkKLQkgIHsKLQkJICBmYWlsKCJBbiBleGNlcHRpb24gb2NjdXJyZWQgd2hpbGUgcnVubmluZyB0aGUgdGVzdDoiICsgZSk7Ci0JICB9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODIwMmJjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1MiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbjsKLQotaW1wb3J0IGphdmEudXRpbC5TdGFjazsKLQotLyoqCi0gKiBBIHdyYXBwZXIgZm9yIGNsYXNzIEVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXIgdG8gZmFjaWxpdGF0ZSB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgRXJyb3JDdXN0b21pemF0aW9uTWFuYWdlcldyYXBwZXIgZXh0ZW5kcyBFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyIAotewotICAvKioKLSAgICogR2V0IHRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBlbGVtZW50IGluZm9ybWF0aW9uIHN0YWNrLgotICAgKi8KLSAgcHVibGljIFN0YWNrIGdldEVsZW1lbnRJbmZvcm1hdGlvblN0YWNrKCkKLSAgewotCXJldHVybiBlbGVtZW50SW5mb3JtYXRpb25TdGFjazsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgY3VycmVudCBtZXNzYWdlIGZvciBjb25zaWRlcmF0aW9uLgotICAgKiAKLSAgICogQHJldHVybgotICAgKiAJCVRoZSBjdXJyZW50IG1lc3NhZ2UgZm9yIGNvbnNpZGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgRXJyb3JNZXNzYWdlSW5mb3JtYXRpb24gZ2V0TWVzc2FnZUZvckNvbnNpZGVyYXRpb24oKQotICB7Ci0JcmV0dXJuIG1lc3NhZ2VGb3JDb25zaWRlcmF0aW9uOwotICB9Ci0gIAotICAvKioKLSAgICogU2V0IHRoZSBjdXJyZW50IG1lc3NhZ2UgZm9yIGNvbnNpZGVyYXRpb24uCi0gICAqIAotICAgKiBAcGFyYW0gbWVzc2FnZQotICAgKiAJCVRoZSBjdXJyZW50IG1lc3NhZ2UgZm9yIGNvbnNpZGVyYXRpb24uCi0gICAqLwotICBwdWJsaWMgdm9pZCBzZXRNZXNzYWdlRm9yQ29uc2lkZXJhdGlvbihFcnJvck1lc3NhZ2VJbmZvcm1hdGlvbiBtZXNzYWdlKQotICB7Ci0JbWVzc2FnZUZvckNvbnNpZGVyYXRpb24gPSBtZXNzYWdlOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5VGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjAzNDEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5VGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTEyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0vKioKLSAqIFRlc3RzIGZvciB0aGUgRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnkgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgcHJpdmF0ZSBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeSByZWdpc3RyeSA9IG51bGw7Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXJlZ2lzdHJ5ID0gbmV3IEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5V3JhcHBlcigpOwotICAgIHN1cGVyLnNldFVwKCk7Ci0gIH0KLQotICAvKioKLSAgICogVGVzdCB0aGUgQWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplclRvUmVnaXN0cnkgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyB0ZXN0czoKLSAgICogMS4gVGVzdCB0aGF0IGFkZGluZyBhbiBlcnJvciBjdXN0b21pemVyIGZvciBhIG5hbWVzcGFjZSBpcyBzdWNjZXNzZnVsLgotICAgKiAyLiBUZXN0IHRoYXQgYWRkaW5nIHR3byBlcnJvciBjdXN0b21pemVycyBmb3IgYSBuYW1lc3BhY2UgcmV0dXJucyBib3RoIGN1c3RvbWl6ZXJzLgotICAgKiAzLiBUZXN0IHRoYXQgYWRkaW5nIGFuIGVudHJ5IHdpdGggYSBudWxsIG5hbWVzcGFjZSBhZGRzIHRoZSBlbnRyeSBmb3IgdGhlIGVtcHR5IHN0cmluZwotICAgKiAgICBuYW1lc3BhY2UuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplclRvUmVnaXN0cnkoKQotICB7Ci0gICAgLy8gMS4gVGVzdCB0aGF0IGFkZGluZyBhbiBlcnJvciBjdXN0b21pemVyIGZvciBhIG5hbWVzcGFjZSBpcyBzdWNjZXNzZnVsLgotCVN0cmluZyBuYW1lc3BhY2UxID0gImh0dHA6Ly9uYW1lc3BhY2UxIjsKLQlJRXJyb3JNZXNzYWdlQ3VzdG9taXplciBjdXN0b21pemVyID0gbmV3IElFcnJvck1lc3NhZ2VDdXN0b21pemVyKCl7Ci0gICAgICBwdWJsaWMgU3RyaW5nIGN1c3RvbWl6ZU1lc3NhZ2UoRWxlbWVudEluZm9ybWF0aW9uIGVsZW1lbnRJbmZvLCBTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIGFyZ3VtZW50cykgCi0gICAgICB7Ci0gICAgICAgIC8vIFRoaXMgc3R1YiBmb3IgdGVzdGluZyBkb2VzIG5vdCByZXF1aXJlIGFuIGltcGxlbWVudGF0aW9uLgotCQlyZXR1cm4gbnVsbDsKLSAgICAgIH0KLSAgICB9OwotICAgIHJlZ2lzdHJ5LmFkZEVycm9yTWVzc2FnZUN1c3RvbWl6ZXIobmFtZXNwYWNlMSwgY3VzdG9taXplcik7Ci0gICAgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXJbXSByZWdpc3RlcmVkQ3VzdG9taXplcnMgPSByZWdpc3RyeS5nZXRDdXN0b21pemVycyhuYW1lc3BhY2UxKTsKLSAgICBhc3NlcnRFcXVhbHMoIjEuIFRoZXJlIHNob3VsZCBvbmx5IGJlIDEgY3VzdG9taXplciByZWdpc3RlcmVkIGZvciB0aGUgbmFtZXNwYWNlIGJ1dCB0aGVyZSBhcmUgIiArIHJlZ2lzdGVyZWRDdXN0b21pemVycy5sZW5ndGgsIDEsIHJlZ2lzdGVyZWRDdXN0b21pemVycy5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygiMS4gVGhlIElFcnJvck1lc3NhZ2VDdXN0b21pemVyIHJldHVybmVkIGlzIG5vdCB0aGUgc2FtZSBvbmUgcmVnaXN0ZXJlZC4iLCBjdXN0b21pemVyLCByZWdpc3RlcmVkQ3VzdG9taXplcnNbMF0pOwotICAgIAotICAgIC8vIDIuIFRlc3QgdGhhdCBhZGRpbmcgdHdvIGVycm9yIGN1c3RvbWl6ZXJzIGZvciBhIG5hbWVzcGFjZSByZXR1cm5zIGJvdGggY3VzdG9taXplcnMuCi0JSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgY3VzdG9taXplcjIgPSBuZXcgSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIoKXsKLSAgICAgIHB1YmxpYyBTdHJpbmcgY3VzdG9taXplTWVzc2FnZShFbGVtZW50SW5mb3JtYXRpb24gZWxlbWVudEluZm8sIFN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gYXJndW1lbnRzKSAKLSAgICAgIHsKLSAgICAgICAgLy8gVGhpcyBzdHViIGZvciB0ZXN0aW5nIGRvZXMgbm90IHJlcXVpcmUgYW4gaW1wbGVtZW50YXRpb24uCi0JCXJldHVybiBudWxsOwotICAgICAgfQotICAgIH07Ci0gICAgcmVnaXN0cnkuYWRkRXJyb3JNZXNzYWdlQ3VzdG9taXplcihuYW1lc3BhY2UxLCBjdXN0b21pemVyMik7Ci0gICAgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzID0gcmVnaXN0cnkuZ2V0Q3VzdG9taXplcnMobmFtZXNwYWNlMSk7Ci0gICAgYXNzZXJ0RXF1YWxzKCIyLiBUaGVyZSBzaG91bGQgYmUgMiBjdXN0b21pemVycyByZWdpc3RlcmVkIGZvciB0aGUgbmFtZXNwYWNlIGJ1dCB0aGVyZSBhcmUgIiArIHJlZ2lzdGVyZWRDdXN0b21pemVycy5sZW5ndGgsIDIsIHJlZ2lzdGVyZWRDdXN0b21pemVycy5sZW5ndGgpOwotICAgIGFzc2VydEVxdWFscygiMi4gVGhlIGZpcnN0IElFcnJvck1lc3NhZ2VDdXN0b21pemVyIHJldHVybmVkIGlzIG5vdCB0aGUgc2FtZSBvbmUgcmVnaXN0ZXJlZC4iLCBjdXN0b21pemVyLCByZWdpc3RlcmVkQ3VzdG9taXplcnNbMF0pOwotICAgIGFzc2VydEVxdWFscygiMi4gVGhlIHNlY29uZCBJRXJyb3JNZXNzYWdlQ3VzdG9taXplciByZXR1cm5lZCBpcyBub3QgdGhlIHNhbWUgb25lIHJlZ2lzdGVyZWQuIiwgY3VzdG9taXplcjIsIHJlZ2lzdGVyZWRDdXN0b21pemVyc1sxXSk7Ci0gICAgCi0gICAgLy8gMy4gVGVzdCB0aGF0IGFkZGluZyBhbiBlbnRyeSB3aXRoIGEgbnVsbCBuYW1lc3BhY2UgYWRkcyB0aGUgZW50cnkgZm9yIHRoZSBlbXB0eSBzdHJpbmcgbmFtZXNwYWNlLgotICAgIHJlZ2lzdHJ5LmFkZEVycm9yTWVzc2FnZUN1c3RvbWl6ZXIobnVsbCwgY3VzdG9taXplcik7Ci0gICAgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzID0gcmVnaXN0cnkuZ2V0Q3VzdG9taXplcnMoIiIpOwotICAgIGFzc2VydEVxdWFscygiMy4gVGhlcmUgc2hvdWxkIGJlIDEgY3VzdG9taXplcnMgcmVnaXN0ZXJlZCBmb3IgdGhlIG5hbWVzcGFjZSBidXQgdGhlcmUgYXJlICIgKyByZWdpc3RlcmVkQ3VzdG9taXplcnMubGVuZ3RoLCAxLCByZWdpc3RlcmVkQ3VzdG9taXplcnMubGVuZ3RoKTsKLSAgICBhc3NlcnRFcXVhbHMoIjMuIFRoZSBJRXJyb3JNZXNzYWdlQ3VzdG9taXplciByZXR1cm5lZCBpcyBub3QgdGhlIHNhbWUgb25lIHJlZ2lzdGVyZWQuIiwgY3VzdG9taXplciwgcmVnaXN0ZXJlZEN1c3RvbWl6ZXJzWzBdKTsKLSAgfQotCQotICAvKioKLSAgICogVGVzdCB0aGUgZ2V0Q3VzdG9taXplcnMgbWV0aG9kIHdpdGggdGhlIGZvbGxvd2luZyB0ZXN0czoKLSAgICogMS4gVGVzdCB0aGF0IHJlcXVlc3RpbmcgYW4gZXJyb3IgY3VzdG9taXplciBhcnJheSBmb3IgYSBuYW1lc3BhY2UgdGhhdCBoYXMgbm90IGJlZW4KLSAgICogICAgcmVnaXN0ZXJlZCBwcm9kdWNlcyBhbiBlbXB0eSBhcnJheS4KLSAgICogMi4gVGVzdCB0aGF0IHJlcXVlc3RpbmcgYW4gZXJyb3IgY3VzdG9taXplciBhcnJheSBmb3IgdGhlIG51bGwgbmFtZXNwYWNlIHJldHVybnMgdGhlCi0gICAqICAgIG9uZSByZWdpc3RlcmVkIGN1c3RvbWl6ZXIuCi0gICAqIDMuIFRlc3QgdGhhdCByZXF1ZXN0aW5nIGFuIGVycm9yIGN1c3RvbWl6ZXIgYXJyYXkgZm9yIHRoZSBlbXB0eSBzdHJpbmcgbmFtZXNwYWNlIHJldHVybnMKLSAgICogICAgdGhlIG9uZSByZWdpc3RlcmVkIGN1c3RvbWl6ZXIuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0R2V0Q3VzdG9taXplcnMoKQotICB7Ci0JLy8gMS4gVGVzdCB0aGF0IHJlcXVlc3RpbmcgYW4gZXJyb3IgY3VzdG9taXplciBsaXN0IGZvciBhIG5hbWVzcGFjZSB0aGF0IGhhcyBub3QgYmVlbgotCS8vIHJlZ2lzdGVyZWQgcHJvZHVjZXMgYW4gZW1wdHkgbGlzdC4KLQlJRXJyb3JNZXNzYWdlQ3VzdG9taXplcltdIGN1c3RvbWl6ZXJzID0gcmVnaXN0cnkuZ2V0Q3VzdG9taXplcnMoImh0dHA6Ly9ub25yZWdpc3RlcmVkbmFtZXNwYWNlIik7Ci0JYXNzZXJ0RXF1YWxzKCIxLiBUaGUgYXJyYXkgb2YgY3VzdG9taXplcnMgZm9yIGFuIHVucmVnaXN0ZXJlZCBuYW1lc3BhY2UgaXMgbm90IGVtcHR5LiIsIDAsIGN1c3RvbWl6ZXJzLmxlbmd0aCk7Ci0JCi0JLy8gMi4gVGVzdCB0aGF0IHJlcXVlc3RpbmcgYW4gZXJyb3IgY3VzdG9taXplciBhcnJheSBmb3IgdGhlIG51bGwgbmFtZXNwYWNlIHJldHVybnMgdGhlCi0JLy8gb25lIHJlZ2lzdGVyZWQgY3VzdG9taXplci4KLQlJRXJyb3JNZXNzYWdlQ3VzdG9taXplciBjdXN0b21pemVyID0gbmV3IElFcnJvck1lc3NhZ2VDdXN0b21pemVyKCl7Ci0JICBwdWJsaWMgU3RyaW5nIGN1c3RvbWl6ZU1lc3NhZ2UoRWxlbWVudEluZm9ybWF0aW9uIGVsZW1lbnRJbmZvLCBTdHJpbmcgZXJyb3JLZXksIE9iamVjdFtdIGFyZ3VtZW50cykgCi0JICB7Ci0JICAgIC8vIFRoaXMgc3R1YiBmb3IgdGVzdGluZyBkb2VzIG5vdCByZXF1aXJlIGFuIGltcGxlbWVudGF0aW9uLgotICAgICAgICByZXR1cm4gbnVsbDsKLQkgIH0KLQl9OwotCXJlZ2lzdHJ5LmFkZEVycm9yTWVzc2FnZUN1c3RvbWl6ZXIobnVsbCwgY3VzdG9taXplcik7Ci0JY3VzdG9taXplcnMgPSByZWdpc3RyeS5nZXRDdXN0b21pemVycyhudWxsKTsKLQlhc3NlcnRFcXVhbHMoIjIuIFRoZSBhcnJheSBvZiBjdXN0b21pemVycyBmb3IgYSByZWdpc3RlcmVkIGN1c3RvbWl6ZXIgZm9yIHRoZSBudWxsIG5hbWVzcGFjZSBkb2VzIG5vdCBjb250YWluIDEgY3VzdG9taXplci4iLCAxLCBjdXN0b21pemVycy5sZW5ndGgpOwotCWFzc2VydEVxdWFscygiMi4gVGhlIGN1c3RvbWl6ZXIgZm9yIHRoZSBudWxsIG5hbWVzcGFjZSB3YXMgbm90IHN1Y2Nlc3NmdWxseSByZXR1cm5lZC4iLCBjdXN0b21pemVyLCBjdXN0b21pemVyc1swXSk7Ci0JCi0JLy8gMy4gVGVzdCB0aGF0IHJlcXVlc3RpbmcgYW4gZXJyb3IgY3VzdG9taXplciBhcnJheSBmb3IgdGhlIGVtcHR5IHN0cmluZyBuYW1lc3BhY2UgcmV0dXJucwotCS8vICAgIHRoZSBvbmUgcmVnaXN0ZXJlZCBjdXN0b21pemVyIGZvciB0aGUgbnVsbCBuYW1lc3BhY2UuCi0JY3VzdG9taXplcnMgPSByZWdpc3RyeS5nZXRDdXN0b21pemVycygiIik7Ci0JYXNzZXJ0RXF1YWxzKCIzLiBUaGUgYXJyYXkgb2YgY3VzdG9taXplcnMgZm9yIGEgcmVnaXN0ZXJlZCBjdXN0b21pemVyIGZvciB0aGUgbnVsbCBuYW1lc3BhY2UgZG9lcyBub3QgY29udGFpbiAxIGN1c3RvbWl6ZXIgZm9yIHRoZSBlbXB0eSBzdHJpbmcgbmFtZXNwYWNlLiIsIDEsIGN1c3RvbWl6ZXJzLmxlbmd0aCk7Ci0JYXNzZXJ0RXF1YWxzKCIzLiBUaGUgY3VzdG9taXplciBmb3IgdGhlIGVtcHR5IHN0cmluZyBuYW1lc3BhY2Ugd2FzIG5vdCBzdWNjZXNzZnVsbHkgcmV0dXJuZWQuIiwgY3VzdG9taXplciwgY3VzdG9taXplcnNbMF0pOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5V3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlXcmFwcGVyLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlMDJkNzMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JDdXN0b21pemF0aW9uUmVnaXN0cnlXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbjsKLQotLyoqCi0gKiBBIHdyYXBwZXIgZm9yIHRoZSBFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeSBjbGFzcyB0byBhbGxvdyBmb3IgdGVzdGluZy4KLSAqLwotcHVibGljIGNsYXNzIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5V3JhcHBlciBleHRlbmRzIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5IAotewotICAvKioKLSAgICogUHVibGljIGNvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIEVycm9yQ3VzdG9taXphdGlvblJlZ2lzdHJ5V3JhcHBlcigpCi0gIHsKLQlzdXBlcigpOwotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNGY3ZTQ5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLlhNTFZhbGlkYXRvclRlc3RzUGx1Z2luOwotCi0vKioKLSAqIFRlc3QgdGhlIEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZSBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZSAKLXsKLSAgLyoqCi0gICAqIFRlc3QgdGhlIGxvYWRDdXN0b21pemVyIG1ldGhvZCB3aXRoIHRoZSBmb2xsb3dpbmcgdGVzdHM6Ci0gICAqIDEuIFRlc3QgdGhhdCBhIHZhbGlkIGJ1bmRsZSBhIGNsYXNzIHN1Y2NlZWRzLgotICAgKiAyLiBUZXN0IHRoYXQgYW4gaW52YWxpZCBjbGFzcyBmYWlscyBhbmQga2VlcHMgdGhlIGN1c3RvbWl6ZXIgc2V0IHRvIG51bGwuCi0gICAqIDMuIFRlc3QgdGhhdCBhIG51bGwgYnVuZGxlIGZhaWxzIGFuZCBrZWVwcyB0aGUgY3VzdG9taXplciBzZXQgdG8gbnVsbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RMb2FkQ3VzdG9taXplcigpCi0gIHsKLQkvLyAxLiBUZXN0IHRoYXQgYSB2YWxpZCBidW5kbGUgYSBjbGFzcyBzdWNjZWVkcy4KLQlFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyIGRlbGVnYXRlID0gbmV3IEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIoWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QnVuZGxlKCksICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplciIpOwotCWRlbGVnYXRlLmxvYWRDdXN0b21pemVyKCk7Ci0JYXNzZXJ0Tm90TnVsbCgiMS4gVGhlIGN1c3RvbWl6ZXIgbG9hZGVkIHdhcyBudWxsIGZvciBhIHZhbGlkIGN1c3RvbWl6ZXIgYW5kIGJ1bmRsZS4iLCBkZWxlZ2F0ZS5nZXRDdXN0b21pemVyKCkpOwotCQotCS8vIDIuIFRlc3QgdGhhdCBhbiBpbnZhbGlkIGNsYXNzIGZhaWxzIGFuZCBrZWVwcyB0aGUgY3VzdG9taXplciBzZXQgdG8gbnVsbC4KLQlFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyIGRlbGVnYXRlMiA9IG5ldyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyKFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbigpLmdldEJ1bmRsZSgpLCAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLk5vbmV4aXN0YW50RXJyb3JNZXNzYWdlQ3VzdG9taXplciIpOwotCWRlbGVnYXRlMi5sb2FkQ3VzdG9taXplcigpOwotCWFzc2VydE51bGwoIjIuIFRoZSBjdXN0b21pemVyIGxvYWRlZCB3YXMgbm90IG51bGwgZm9yIGFuIGludmFsaWQgY3VzdG9taXplciBjbGFzcy4iLCBkZWxlZ2F0ZTIuZ2V0Q3VzdG9taXplcigpKTsKLQkKLQkvLyAzLiBUZXN0IHRoYXQgYSBudWxsIGJ1bmRsZSBmYWlscyBhbmQga2VlcHMgdGhlIGN1c3RvbWl6ZXIgc2V0IHRvIG51bGwuCi0JRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlciBkZWxlZ2F0ZTMgPSBuZXcgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlcihudWxsLCAib3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLlNhbXBsZUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIiKTsKLQlkZWxlZ2F0ZTMubG9hZEN1c3RvbWl6ZXIoKTsKLQlhc3NlcnROdWxsKCIzLiBUaGUgY3VzdG9taXplciBsb2FkZWQgd2FzIG5vdCBudWxsIGZvciBhIG51bGwgYnVuZGxlLiIsIGRlbGVnYXRlMy5nZXRDdXN0b21pemVyKCkpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgY3VzdG9taXplTWVzc2FnZSBtZXRob2Qgd2l0aCB0aGUgZm9sbG93aW5nIHRlc3RzOgotICAgKiAxLiBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgcmV0dXJuZWQgaXMgY29ycmVjdCBmb3IgYSB2YWxpZCBjdXN0b21pemVyLgotICAgKiAyLiBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgcmV0dXJuZWQgaXMgbnVsbCBmb3IgYW4gaW52YWxpZCBjdXN0b21pemVyIGNsYXNzLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEN1c3RvbWl6ZU1lc3NhZ2UoKQotICB7Ci0gICAgLy8gMS4gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIHJldHVybmVkIGlzIGNvcnJlY3QgZm9yIGEgdmFsaWQgY3VzdG9taXplci4KLSAgICBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyIGRlbGVnYXRlID0gbmV3IEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIoWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uZ2V0UGx1Z2luKCkuZ2V0QnVuZGxlKCksICJvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplciIpOwotICAgIFN0cmluZyBtZXNzYWdlID0gZGVsZWdhdGUuY3VzdG9taXplTWVzc2FnZShudWxsLCBudWxsLCBudWxsKTsKLQlhc3NlcnRFcXVhbHMoIjEuIFRoZSBtZXNzYWdlIHJldHVybmVkIHdhcyBub3QgQUFBQS4iLCAiQUFBQSIsIG1lc3NhZ2UpOwotCQotCS8vIDIuIFRlc3QgdGhhdCB0aGUgbWVzc2FnZSByZXR1cm5lZCBpcyBudWxsIGZvciBhbiBpbnZhbGlkIGN1c3RvbWl6ZXIgY2xhc3MuCi0JRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlciBkZWxlZ2F0ZTIgPSBuZXcgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlcihYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5nZXRQbHVnaW4oKS5nZXRCdW5kbGUoKSwgIm9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5Ob25leGlzdGFudEVycm9yTWVzc2FnZUN1c3RvbWl6ZXIiKTsKLQltZXNzYWdlID0gZGVsZWdhdGUyLmN1c3RvbWl6ZU1lc3NhZ2UobnVsbCwgbnVsbCwgbnVsbCk7Ci0JYXNzZXJ0TnVsbCgiMi4gVGhlIG1lc3NhZ2UgcmV0dXJuZWQgd2FzIG5vdCBudWxsIGZvciBhbiBpbnZhbGlkIGN1c3RvbWl6ZXIuIiwgbWVzc2FnZSk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL0Vycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI4NzE2MS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2Vycm9yY3VzdG9taXphdGlvbi9FcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGVXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbjsKLQotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGU7Ci0KLS8qKgotICogQSB3cmFwcGVyIG9mIHRoZSBjbGFzcyBFcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGUgdG8gZmFjaWxpdGF0ZSB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgRXJyb3JNZXNzYWdlQ3VzdG9taXplckRlbGVnYXRlV3JhcHBlciBleHRlbmRzIEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZSAKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVdyYXBwZXIoQnVuZGxlIGJ1bmRsZSwgU3RyaW5nIGNsYXNzbmFtZSkKLSAgewotCXN1cGVyKGJ1bmRsZSwgY2xhc3NuYW1lKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5FcnJvck1lc3NhZ2VDdXN0b21pemVyRGVsZWdhdGUjbG9hZEN1c3RvbWl6ZXIoKQotICAgKi8KLSAgcHVibGljIHZvaWQgbG9hZEN1c3RvbWl6ZXIoKQotICB7Ci0Jc3VwZXIubG9hZEN1c3RvbWl6ZXIoKTsKLSAgfQotICAKLSAgcHVibGljIElFcnJvck1lc3NhZ2VDdXN0b21pemVyIGdldEN1c3RvbWl6ZXIoKQotICB7Ci0JcmV0dXJuIGN1c3RvbWl6ZXI7Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lcnJvcmN1c3RvbWl6YXRpb24vU2FtcGxlRXJyb3JNZXNzYWdlQ3VzdG9taXplci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YjYxODI4Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZXJyb3JjdXN0b21pemF0aW9uL1NhbXBsZUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uOwotCi0vKioKLSAqIEEgc2FtcGxlIGVycm9yIG1lc3NhZ2UgY3VzdG9taXplciBmb3IgdGVzdGluZy4gVGhpcyBjdXN0b21pemVyIGhhcyBhIHNpbXBsZQotICogaW1wbGVtZW50YXRpb24gdGhhdCBzaW1wbGUgcmV0dXJucyB0aGUgc3RyaW5nICJBQUFBIi4KLSAqLwotcHVibGljIGNsYXNzIFNhbXBsZUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIgaW1wbGVtZW50cyBJRXJyb3JNZXNzYWdlQ3VzdG9taXplciB7Ci0KLQkvKiAobm9uLUphdmFkb2MpCi0JICogQHNlZSBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uSUVycm9yTWVzc2FnZUN1c3RvbWl6ZXIjY3VzdG9taXplTWVzc2FnZShvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lcnJvcmN1c3RvbWl6YXRpb24uRWxlbWVudEluZm9ybWF0aW9uLCBqYXZhLmxhbmcuU3RyaW5nLCBqYXZhLmxhbmcuT2JqZWN0W10pCi0JICovCi0JcHVibGljIFN0cmluZyBjdXN0b21pemVNZXNzYWdlKEVsZW1lbnRJbmZvcm1hdGlvbiBlbGVtZW50SW5mbywKLQkJCVN0cmluZyBlcnJvcktleSwgT2JqZWN0W10gYXJndW1lbnRzKSB7Ci0JCS8vIFRPRE8gQXV0by1nZW5lcmF0ZWQgbWV0aG9kIHN0dWIKLQkJcmV0dXJuICJBQUFBIjsKLQl9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFhNTFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYTUxUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDI3NmVlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFhNTFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuVmFsaWRhdG9yVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhNTE1lc3NhZ2VJbmZvSGVscGVyVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlhNTFZhbGlkYXRvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLkVycm9yQ3VzdG9taXphdGlvbk1hbmFnZXJUZXN0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVycm9yY3VzdG9taXphdGlvbi5FcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZXJyb3JjdXN0b21pemF0aW9uLkVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVRlc3Q7Ci0KLS8qKgotICogVGhlIHJvb3QgdGVzdCBzdWl0ZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBYTUwgdmFsaWRhdG9yIHRlc3Qgc3VpdGVzLgotICovCi1wdWJsaWMgY2xhc3MgQWxsWE1MVGVzdHMgZXh0ZW5kcyBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlCi17Ci0gIC8qKgotICAgKiBDcmVhdGUgdGhpcyB0ZXN0IHN1aXRlLgotICAgKiAKLSAgICogQHJldHVybiBUaGlzIHRlc3Qgc3VpdGUuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBBbGxYTUxUZXN0cygpOwotICB9Ci0gIAotICAvKioKLSAgICogQ29uc3RydWN0b3IKLSAgICovCi0gIHB1YmxpYyBBbGxYTUxUZXN0cygpCi0gIHsKLSAgICBzdXBlcigiWE1MVGVzdHNUZXN0U3VpdGUiKTsKLSAgICBhZGRUZXN0KFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFZhbGlkYXRvclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYTUxNZXNzYWdlSW5mb0hlbHBlclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChYTUxWYWxpZGF0b3JUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoWE1MRXhhbXBsZXNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoQnVnRml4ZXNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3QoUGF0aHNUZXN0LnN1aXRlKCkpOwotICAgIGFkZFRlc3RTdWl0ZShFcnJvckN1c3RvbWl6YXRpb25NYW5hZ2VyVGVzdC5jbGFzcyk7Ci0gICAgYWRkVGVzdFN1aXRlKEVycm9yTWVzc2FnZUN1c3RvbWl6ZXJEZWxlZ2F0ZVRlc3QuY2xhc3MpOwotICAgIGFkZFRlc3RTdWl0ZShFcnJvckN1c3RvbWl6YXRpb25SZWdpc3RyeVRlc3QuY2xhc3MpOwotICAgIGFkZFRlc3RTdWl0ZShMaW5lTnVtYmVyQWRqdXN0bWVudHNUZXN0LmNsYXNzKTsKLSAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYzE3YzguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQmFzZVRlc3RDYXNlLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw5NCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWE1MVmFsaWRhdG9yOwotCi0KLS8qKgotICogQmFzZSB0ZXN0IGNhc2UgY2xhc3Mgd2hpY2ggcHJvdmlkZXMgbWV0aG9kcyB0byAKLSAqIC0gY3JlYXRlIGxvZ3MKLSAqIC0gcmVhZCBmcm9tIGxvZ3MKLSAqIC0gcnVuIGxvZyBjb21wYXJpc29uIHRlc3RzCi0gKi8KLXB1YmxpYyBjbGFzcyBCYXNlVGVzdENhc2UgZXh0ZW5kcyBUZXN0Q2FzZQotewotICBwcm90ZWN0ZWQgU3RyaW5nIEZJTEVfUFJPVE9DT0wgPSAiZmlsZTovLy8iOyAKLSAgcHJvdGVjdGVkIFN0cmluZyBQTFVHSU5fQUJTT0xVVEVfUEFUSDsKLSAgcHJvdGVjdGVkIFN0cmluZyBTQU1QTEVTX0RJUiA9ICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvIjsKLSAgcHJvdGVjdGVkIFhNTFZhbGlkYXRvciB2YWxpZGF0b3IgPSBYTUxWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLSAgcHJvdGVjdGVkIFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNvbmZpZ3VyYXRpb247Ci0gIAotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlI3NldFVwKCkKLSAgICovCi0gIHByb3RlY3RlZCB2b2lkIHNldFVwKCkgdGhyb3dzIElPRXhjZXB0aW9uCi0gIHsKLSAgICBQTFVHSU5fQUJTT0xVVEVfUEFUSCA9IFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luLmdldFBsdWdpbkxvY2F0aW9uKCkudG9TdHJpbmcoKSArICIvIjsKLSAgICBjb25maWd1cmF0aW9uID0gbmV3IFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUiwgZmFsc2UpOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCJVbmFibGUgdG8gc2V0IHRoZSBmZWF0dXJlIG9uIHRoZSBYTUwgdmFsaWRhdGlvbiBjb25maWd1cmF0aW9uLiIpOwotICAgIH0KLSAgfQotICAKLSAgLyoqCi0gICAqIFJ1biBhIHZhbGlkYXRvciB0ZXN0LiBUaGUgdGVzdCB3aWxsIHJ1biB0aGUgdmFsaWRhdG9yLCBhbmQgY29tcGFyZSB0aGUgdmFsaWRhdGlvbiByZXN1bHQgd2l0aAotICAgKiB0aGUgaW5mb3JtYXRpb24gc3BlY2lmaWVkLgotICAgKiAKLSAgICogQHBhcmFtIHRlc3RmaWxlIFRoZSBmaWxlIHRvIHJ1biB0aGUgdmFsaWRhdG9yIHRlc3Qgb24uCi0gICAqIEBwYXJhbSBrZXlzIFRoZSBsaXN0IG9mIGFsbG93cyBtZXNzYWdlIGtleXMuCi0gICAqIEBwYXJhbSBudW1FcnJvcnMgVGhlIG51bWJlciBvZiBleHBlY3RlZCBlcnJvcnMuCi0gICAqIEBwYXJhbSBudW1XYXJuaW5ncyBUaGUgbnVtYmVyIG9mIGV4cGVjdGVkIHdhcm5pbmdzLgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuVGVzdChTdHJpbmcgdGVzdGZpbGUsIExpc3Qga2V5cywgaW50IG51bUVycm9ycywgaW50IG51bVdhcm5pbmdzKQotICB7Ci0gICAgVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQgPSB2YWxpZGF0b3IudmFsaWRhdGUodGVzdGZpbGUsIG51bGwsIGNvbmZpZ3VyYXRpb24pOwotCQotCVZhbGlkYXRpb25NZXNzYWdlW10gdmFsbWVzc2FnZXMgPSB2YWxyZXBvcnQuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCk7Ci0gICAgaW50IG51bW1lc3NhZ2VzID0gdmFsbWVzc2FnZXMubGVuZ3RoOwotCQotCWludCBlcnJvckNvdW50ID0gMDsKLQlpbnQgd2FybmluZ0NvdW50ID0gMDsKLQotICAgIGZvcihpbnQgaSA9IDA7IGkgPCBudW1tZXNzYWdlczsgaSsrKQotICAgIHsKLSAgICAgIFZhbGlkYXRpb25NZXNzYWdlIHZhbG1lcyA9IHZhbG1lc3NhZ2VzW2ldOwotCSAgU3RyaW5nIGtleSA9IHZhbG1lcy5nZXRLZXkoKTsKLQkgIGFzc2VydFRydWUoIlRoZSBtZXNzYWdlIGtleSAiICsga2V5ICsgIiBpcyBub3QgY29ycmVjdC4iLCBrZXlzLmNvbnRhaW5zKGtleSkpOwotICAgICAgaWYodmFsbWVzLmdldFNldmVyaXR5KCkgPT0gVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0xPVykKLSAgICAgIHsKLSAgICAgICAgd2FybmluZ0NvdW50Kys7Ci0gICAgICB9Ci0gICAgICBlbHNlCi0gICAgICB7Ci0gICAgICAgIGVycm9yQ291bnQrKzsKLSAgICAgIH0KLSAgICB9Ci0gICAgYXNzZXJ0RXF1YWxzKGVycm9yQ291bnQgKyAiIGVycm9ycyB3ZXJlIHJlcG9ydGVkIGJ1dCAiICsgbnVtRXJyb3JzICsgIiBlcnJvcnMgd2VyZSBleHBlY3RlZC4iLCBudW1FcnJvcnMsIGVycm9yQ291bnQpOwotCWFzc2VydEVxdWFscyh3YXJuaW5nQ291bnQgKyAiIHdhcm5pbmdzIHdlcmUgcmVwb3J0ZWQgYnV0ICIgKyBudW1XYXJuaW5ncyArICIgd2FybmluZ3Mgd2VyZSBleHBlY3RlZC4iLCBudW1XYXJuaW5ncywgd2FybmluZ0NvdW50KTsKLSAgfQotICAKLSAgCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CdWdGaXhlc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZjVlMDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuTGlzdDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5YTUxWYWxpZGF0aW9uQ29uZmlndXJhdGlvbjsKLS8qKgotICogVGVzdCBjbGFzcyBmb3IgdGhlIFhNTCB2YWxpZGF0b3IgdG8gdGVzdCBidWcgZml4ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBCdWdGaXhlc1Rlc3QgZXh0ZW5kcyBCYXNlVGVzdENhc2UKLXsgCi0gIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBCVUdGSVhFU19ESVIgPSAiYnVnZml4ZXMvIjsKLQotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShCdWdGaXhlc1Rlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvUm9vdE5vTlNDaGlsZE5TL1Jvb3ROb05TQ2hpbGROUy54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Um9vdE5vTlNDaGlsZE5TKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlJvb3ROb05TQ2hpbGROUyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiUm9vdE5vTlNDaGlsZE5TLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFbXB0eSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJFbXB0eSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiRW1wdHlGaWxlLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERURFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RWYWxpZGF0ZVdpdGhEVERWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJWYWxpZGF0ZVdpdGhEVERWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVmFsaWRhdGVXaXRoRFRELyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERUREludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFZhbGlkYXRlV2l0aERUREludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiVmFsaWRhdGVXaXRoRFRESW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVmFsaWRhdGVXaXRoRFRELyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1TR19DT05URU5UX0lOVkFMSUQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9Ob3RXZWxsRm9ybWVkL05vdFdlbGxGb3JtZWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE5vdFdlbGxGb3JtZWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiTm90V2VsbEZvcm1lZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTm90V2VsbEZvcm1lZC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJFVGFnUmVxdWlyZWQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZEhvc3QueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludmFsaWRIb3N0KCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkludmFsaWRIb3N0IjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJDYW5ub3RMb2NhdGVEVEQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiRklMRV9OT1RfRk9VTkQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAxOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZExvY2F0aW9uLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbnZhbGlkTG9jYXRpb24oKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiSW52YWxpZExvY2F0aW9uIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJDYW5ub3RMb2NhdGVEVEQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiRklMRV9OT1RfRk9VTkQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAxOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9idWdmaXhlcy9Ob0dyYW1tYXIvTm9HcmFtbWFyLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb0dyYW1tYXIoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiTm9HcmFtbWFyIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJOb0dyYW1tYXIvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTk9fR1JBTU1BUl9GT1VORCIpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDE7Ci0KLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWE1MVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uV0FSTl9OT19HUkFNTUFSLCB0cnVlKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgZmFpbCgiVW5hYmxlIHRvIHNldCBjb25maWd1cmF0aW9uIFdBUk5fTk9fR1JBTU1BUi4iKTsKLQl9Ci0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0JdHJ5Ci0JewotCSAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhNTFZhbGlkYXRpb25Db25maWd1cmF0aW9uLldBUk5fTk9fR1JBTU1BUiwgZmFsc2UpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gc2V0IGNvbmZpZ3VyYXRpb24gV0FSTl9OT19HUkFNTUFSLiIpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb05hbWVzcGFjZVNjaGVtYSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJOb05hbWVzcGFjZVNjaGVtYSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTm9OYW1lc3BhY2VTY2hlbWEvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvTGluZU51bWJlckFkanVzdG1lbnRzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvTGluZU51bWJlckFkanVzdG1lbnRzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MWI2NTA2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0xpbmVOdW1iZXJBZGp1c3RtZW50c1Rlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDEzMyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotCi0vKioKLSAqIEEgdGVzdCBjbGFzcyB0byB0ZXN0IHRoZSBsaW5lIG51bWJlciBhZGp1c3RtZW50cyBtYWRlIGluIHRoZSBYTUwgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgTGluZU51bWJlckFkanVzdG1lbnRzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotCXByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgPSAiTGluZU51bWJlckFkanVzdG1lbnRzLyI7Ci0JCi0JLyoqCi0JICogUnVuIGEgdmFsaWRhdG9yIHRlc3QuIFRoZSB0ZXN0IHdpbGwgcnVuIHRoZSB2YWxpZGF0b3IsIGFuZCBjb21wYXJlIHRoZSB2YWxpZGF0aW9uIHJlc3VsdCB3aXRoCi0JICogdGhlIGluZm9ybWF0aW9uIHNwZWNpZmllZC4KLQkgKiAKLQkgKiBAcGFyYW0gdGVzdGZpbGUgCi0JICogCQkJVGhlIGZpbGUgdG8gcnVuIHRoZSB2YWxpZGF0b3IgdGVzdCBvbi4KLQkgKiBAcGFyYW0ga2V5IAotCSAqIAkJCVRoZSBtZXNzYWdlIGtleS4KLQkgKiBAcGFyYW0gbnVtRXJyb3JzIAotCSAqIAkJCVRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgZXJyb3JzLgotCSAqIEBwYXJhbSBudW1XYXJuaW5ncyAKLQkgKiAJCQlUaGUgbnVtYmVyIG9mIGV4cGVjdGVkIHdhcm5pbmdzLgotCSAqIEBwYXJhbSBsaW5lbm8KLQkgKiAJCQlUaGUgbGluZSBudW1iZXIgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGxvY2F0ZWQgb24uCi0JICogQHBhcmFtIGNvbHVtbm5vCi0JICogCQkJVGhlIGNvbHVtbiBudW1iZXIgdGhlIG1lc3NhZ2Ugc2hvdWxkIGJlIGxvY2F0ZWQgb24uCi0JICovCi0JcHVibGljIHZvaWQgcnVuVGVzdChTdHJpbmcgdGVzdGZpbGUsIFN0cmluZyBrZXksIGludCBudW1FcnJvcnMsIGludCBudW1XYXJuaW5ncywgaW50IGxpbmVubywgaW50IGNvbHVtbm5vKQotCXsKLQkgIFZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKHRlc3RmaWxlLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLQkJCi0gICAgICBWYWxpZGF0aW9uTWVzc2FnZVtdIHZhbG1lc3NhZ2VzID0gdmFscmVwb3J0LmdldFZhbGlkYXRpb25NZXNzYWdlcygpOwotCSAgaW50IG51bW1lc3NhZ2VzID0gdmFsbWVzc2FnZXMubGVuZ3RoOwotCQkKLSAgICAgIGludCBlcnJvckNvdW50ID0gMDsKLQkgIGludCB3YXJuaW5nQ291bnQgPSAwOwotCi0JICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtbWVzc2FnZXM7IGkrKykKLQkgIHsKLQkgICAgVmFsaWRhdGlvbk1lc3NhZ2UgdmFsbWVzID0gdmFsbWVzc2FnZXNbaV07Ci0JCVN0cmluZyBtZXNza2V5ID0gdmFsbWVzLmdldEtleSgpOwotCQlhc3NlcnRUcnVlKCJUaGUgbWVzc2FnZSBrZXkgIiArIGtleSArICIgaXMgbm90IGNvcnJlY3QuIiwga2V5LmVxdWFscyhtZXNza2V5KSk7Ci0JCWFzc2VydEVxdWFscygiVGhlIGxpbmUgbnVtYmVyIGlzIGluY29ycmVjdC4iLCBsaW5lbm8sIHZhbG1lcy5nZXRMaW5lTnVtYmVyKCkpOwotCQlhc3NlcnRFcXVhbHMoIlRoZSBjb2x1bW4gbnVtYmVyIGlzIGluY29ycmVjdC4iLCBjb2x1bW5ubywgdmFsbWVzLmdldENvbHVtbk51bWJlcigpKTsKLQkgICAgaWYodmFsbWVzLmdldFNldmVyaXR5KCkgPT0gVmFsaWRhdGlvbk1lc3NhZ2UuU0VWX0xPVykKLQkgICAgewotCSAgICAgIHdhcm5pbmdDb3VudCsrOwotCSAgICB9Ci0JICAgIGVsc2UKLQkgICAgewotCSAgICAgIGVycm9yQ291bnQrKzsKLQkgICAgfQotCSAgfQotCSAgYXNzZXJ0RXF1YWxzKGVycm9yQ291bnQgKyAiIGVycm9ycyB3ZXJlIHJlcG9ydGVkIGJ1dCAiICsgbnVtRXJyb3JzICsgIiBlcnJvcnMgd2VyZSBleHBlY3RlZC4iLCBudW1FcnJvcnMsIGVycm9yQ291bnQpOwotICAgICAgYXNzZXJ0RXF1YWxzKHdhcm5pbmdDb3VudCArICIgd2FybmluZ3Mgd2VyZSByZXBvcnRlZCBidXQgIiArIG51bVdhcm5pbmdzICsgIiB3YXJuaW5ncyB3ZXJlIGV4cGVjdGVkLiIsIG51bVdhcm5pbmdzLCB3YXJuaW5nQ291bnQpOwotCX0KLQkKLQkvKioKLQkgKiBUZXN0IC9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMueG1sLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RjdmNjb21wbGV4dHlwZTIzKCkKLQl7Ci0JICBTdHJpbmcgdGVzdG5hbWUgPSAiY3ZjLWNvbXBsZXgtdHlwZS4yLjMiOwotCSAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgKyAiY3ZjLWNvbXBsZXgtdHlwZS4yLjMvIiArIHRlc3RuYW1lICsgIi54bWwiOwotICAgICAgU3RyaW5nIGtleSA9ICJjdmMtY29tcGxleC10eXBlLjIuMyI7Ci0JICBpbnQgbGluZW5vID0gMjsKLQkgIGludCBjb2x1bW5ubyA9IDE4NzsKLQkgIGludCBudW1FcnJvcnMgPSAxOwotCSAgaW50IG51bVdhcm5pbmdzID0gMDsKLQotCSAgcnVuVGVzdCh0ZXN0ZmlsZSwga2V5LCBudW1FcnJvcnMsIG51bVdhcm5pbmdzLCBsaW5lbm8sIGNvbHVtbm5vKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCAvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi54bWwuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdGN2Y2NvbXBsZXh0eXBlMjRiKCkKLQl7Ci0JICBTdHJpbmcgdGVzdG5hbWUgPSAiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiI7Ci0JICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJjdmMtY29tcGxleC10eXBlLjIuNC5iLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLSAgICAgIFN0cmluZyBrZXkgPSAiY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYiI7Ci0JICBpbnQgbGluZW5vID0gMjsKLQkgIGludCBjb2x1bW5ubyA9IDE4NzsKLQkgIGludCBudW1FcnJvcnMgPSAxOwotCSAgaW50IG51bVdhcm5pbmdzID0gMDsKLQotCSAgcnVuVGVzdCh0ZXN0ZmlsZSwga2V5LCBudW1FcnJvcnMsIG51bVdhcm5pbmdzLCBsaW5lbm8sIGNvbHVtbm5vKTsKLQl9Ci0JCi0JLyoqCi0JICogVGVzdCAvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOQ09NUExFVEUvTVNHX0NPTlRFTlRfSU5DT01QTEVURS54bWwuCi0JICovCi0JcHVibGljIHZvaWQgdGVzdE1zZ0NvbnRlbnRJbmNvbXBsZXRlKCkKLQl7Ci0JICBTdHJpbmcgdGVzdG5hbWUgPSAiTVNHX0NPTlRFTlRfSU5DT01QTEVURSI7Ci0JICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIExJTkVfTlVNQkVSX0FESlVTVE1FTlRTX0RJUiArICJNU0dfQ09OVEVOVF9JTkNPTVBMRVRFLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLSAgICAgIFN0cmluZyBrZXkgPSAiTVNHX0NPTlRFTlRfSU5DT01QTEVURSI7Ci0JICBpbnQgbGluZW5vID0gNjsKLQkgIGludCBjb2x1bW5ubyA9IDc7Ci0JICBpbnQgbnVtRXJyb3JzID0gMTsKLQkgIGludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQkgIHJ1blRlc3QodGVzdGZpbGUsIGtleSwgbnVtRXJyb3JzLCBudW1XYXJuaW5ncywgbGluZW5vLCBjb2x1bW5ubyk7Ci0JfQotCQotCS8qKgotCSAqIFRlc3QgL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9NU0dfQ09OVEVOVF9JTlZBTElEL01TR19DT05URU5UX0lOVkFMSUQueG1sLgotCSAqLwotCXB1YmxpYyB2b2lkIHRlc3RNc2dDb250ZW50SW52YWxpZCgpCi0JewotCSAgU3RyaW5nIHRlc3RuYW1lID0gIk1TR19DT05URU5UX0lOVkFMSUQiOwotCSAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBMSU5FX05VTUJFUl9BREpVU1RNRU5UU19ESVIgKyAiTVNHX0NPTlRFTlRfSU5WQUxJRC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0gICAgICBTdHJpbmcga2V5ID0gIk1TR19DT05URU5UX0lOVkFMSUQiOwotCSAgaW50IGxpbmVubyA9IDY7Ci0JICBpbnQgY29sdW1ubm8gPSA3OwotCSAgaW50IG51bUVycm9ycyA9IDE7Ci0JICBpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JICBydW5UZXN0KHRlc3RmaWxlLCBrZXksIG51bUVycm9ycywgbnVtV2FybmluZ3MsIGxpbmVubywgY29sdW1ubm8pOwotCX0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvUGF0aHNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MjQ1ZjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvUGF0aHNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw2MTYgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLS8qKgotICogVGVzdCBjbGFzcyBmb3IgdGhlIFhNTCB2YWxpZGF0b3IgdG8gdGVzdCBidWcgZml4ZXMuCi0gKiAKLSAqIEBhdXRob3IgTGF3cmVuY2UgTWFuZGVsLCBJQk0KLSAqLwotcHVibGljIGNsYXNzIFBhdGhzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQoteyAKLSAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFBBVEhTX0RJUiA9ICJQYXRocy8iOwotCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFBhdGhzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2VJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXRJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkRhc2hJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJEYXNoLUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJFeGNsYW1hdGlvbkluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEV4Y2xhbWF0aW9uSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RPcGVuQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UGVyaW9kQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RCcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2RJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RCcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZC5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLyAKLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEJyYWNrZXRJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluUGF0aEludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiUXVvdGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGUnSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RRdW90ZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZSdJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIk1hcmt1cEVudGl0eU1pc21hdGNoIik7Ci0JaW50IG51bUVycm9ycyA9IDE7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2UgSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJUaWxkZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFRpbGRlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlfkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhWYWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFVuZGVyc2NvcmVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluUGF0aFZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWtleXMuYWRkKCJNYXJrdXBFbnRpdHlNaXNtYXRjaCIpOwotCWludCBudW1FcnJvcnMgPSAxOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RBbmdsZUhhdEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAJU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiTWFya3VwRW50aXR5TWlzbWF0Y2giKTsKLQlpbnQgbnVtRXJyb3JzID0gMTsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3htbC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1hNTEV4YW1wbGVzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MRXhhbXBsZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVmNmNhODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MRXhhbXBsZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNCBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwotaW1wb3J0IGphdmEudXRpbC5MaXN0OwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RTdWl0ZTsKLS8qKgotICogVGVzdCBjbGFzcyBmb3IgdGhlIFhNTCB2YWxpZGF0b3IgdG8gdGVzdCB0aGUgWE1MUHJvamVjdC4KLSAqIAotICogQGF1dGhvciBMYXdyZW5jZSBNYW5kZWwsIElCTQotICovCi1wdWJsaWMgY2xhc3MgWE1MRXhhbXBsZXNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17IAotICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgWE1MRXhhbXBsZXNfRElSID0gIlhNTEV4YW1wbGVzLyI7Ci0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKFhNTEV4YW1wbGVzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YTUxFeGFtcGxlcy9JbnZvaWNlL0ludm9pY2UueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludm9pY2UoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiSW52b2ljZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYTUxFeGFtcGxlc19ESVIgKyAiSW52b2ljZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZVJlbW90ZSgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJJbnZvaWNlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJJbnZvaWNlUmVtb3RlLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9ICAKLSAgCi0gIC8qKgotICAgKiBUZXN0IC9YTUxFeGFtcGxlcy9JbnZvaWNlUmVtb3RlL0ludm9pY2UueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludm9pY2VSZW1vdGVJbmRpcmVjdCgpCi0gIHsKLSAgCVN0cmluZyB0ZXN0bmFtZSA9ICJJbnZvaWNlSW5kaXJlY3QiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgWE1MRXhhbXBsZXNfRElSICsgIkludm9pY2VSZW1vdGUvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAwOwotCi0JcnVuVGVzdCh0ZXN0ZmlsZSwga2V5cywgbnVtRXJyb3JzLCBudW1XYXJuaW5ncyk7Ci0gIH0gICAgCi0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvSW52b2ljZUludmFsaWQvSW52b2ljZS54bWwuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW52b2ljZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiSW52b2ljZSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYTUxFeGFtcGxlc19ESVIgKyAiSW52b2ljZUludmFsaWQvIiArIHRlc3RuYW1lICsgIi54bWwiOwotCUxpc3Qga2V5cyA9IG5ldyBBcnJheUxpc3QoKTsKLQlrZXlzLmFkZCgiRklMRV9OT1RfRk9VTkQiKTsKLQlpbnQgbnVtRXJyb3JzID0gMDsKLQlpbnQgbnVtV2FybmluZ3MgPSAxOwotICAgIAotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbC4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDYXRhbG9ndWUoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQ2F0YWxvZ3VlIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJQdWJsaWNhdGlvbkNhdGFsb2d1ZS8iICsgdGVzdG5hbWUgKyAiLnhtbCI7Ci0JTGlzdCBrZXlzID0gbmV3IEFycmF5TGlzdCgpOwotCWludCBudW1FcnJvcnMgPSAwOwotCWludCBudW1XYXJuaW5ncyA9IDA7Ci0KLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlSW52YWxpZC9DYXRhbG9ndWUueG1sLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENhdGFsb2d1ZUludmFsaWQoKQotICB7Ci0gIAlTdHJpbmcgdGVzdG5hbWUgPSAiQ2F0YWxvZ3VlSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBYTUxFeGFtcGxlc19ESVIgKyAiUHVibGljYXRpb25DYXRhbG9ndWVJbnZhbGlkLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0Ja2V5cy5hZGQoIkZJTEVfTk9UX0ZPVU5EIik7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMTsKLSAgICAKLQlydW5UZXN0KHRlc3RmaWxlLCBrZXlzLCBudW1FcnJvcnMsIG51bVdhcm5pbmdzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1hNTEV4YW1wbGVzL2oyZWUvd2ViLnhtbC4KLSAgICovCi0gIC8qKgotICBwdWJsaWMgdm9pZCB0ZXN0V2ViKCkKLSAgewotCSAgCi0gIAlTdHJpbmcgdGVzdG5hbWUgPSAid2ViIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFhNTEV4YW1wbGVzX0RJUiArICJqMmVlLyIgKyB0ZXN0bmFtZSArICIueG1sIjsKLQlMaXN0IGtleXMgPSBuZXcgQXJyYXlMaXN0KCk7Ci0JaW50IG51bUVycm9ycyA9IDA7Ci0JaW50IG51bVdhcm5pbmdzID0gMDsKLQotCXJ1blRlc3QodGVzdGZpbGUsIGtleXMsIG51bUVycm9ycywgbnVtV2FybmluZ3MpOwotICB9Ci0gICovCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveG1sL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzZlZTMxZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94bWwvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YTUxWYWxpZGF0b3JUZXN0c1BsdWdpbi5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotCi1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLkZpbGVMb2NhdG9yOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QYXRoOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5QbHVnaW47Ci0KLS8qKgotICogVGhlIHBsdWdpbiBjbGFzcyBmb3IgdGhpcyB0ZXN0IHBsdWdpbi4KLSAqLwotcHVibGljIGNsYXNzIFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luIGV4dGVuZHMgUGx1Z2luIHsKLQlwcml2YXRlIHN0YXRpYyBYTUxWYWxpZGF0b3JUZXN0c1BsdWdpbiBwbHVnaW4gPSBudWxsOwotCi0JcHVibGljIFhNTFZhbGlkYXRvclRlc3RzUGx1Z2luKCkgewotCQlwbHVnaW4gPSB0aGlzOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgU3RyaW5nIGdldFBsdWdpbkxvY2F0aW9uKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKLQkJU3RyaW5nIGZpbGUgPSBGaWxlTG9jYXRvci5yZXNvbHZlKHBsdWdpbi5nZXRCdW5kbGUoKS5nZXRFbnRyeSgiLyIpKS5nZXRGaWxlKCk7Ci0JCXJldHVybiBuZXcgUGF0aChmaWxlKS5yZW1vdmVUcmFpbGluZ1NlcGFyYXRvcigpLnRvU3RyaW5nKCk7Ci0JfQotCQotCXB1YmxpYyBzdGF0aWMgWE1MVmFsaWRhdG9yVGVzdHNQbHVnaW4gZ2V0UGx1Z2luKCkKLQl7Ci0JCXJldHVybiBwbHVnaW47Ci0JfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZWEzMzEzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cyIgLz4KLSAgICA8cHJvcGVydHkKLSAgICAgICAgbmFtZT0iY2xhc3NuYW1lIgotICAgICAgICB2YWx1ZT0ib3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsLkFsbFhNTFRlc3RzIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ0ZXN0VHlwZSIKLSAgICAgICAgdmFsdWU9ImNvcmUtdGVzdCIgLz4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYmVsb3cgLS0+Ci0KLSAgICA8ZWNobyBtZXNzYWdlPSJiYXNlZGlyOiAke2Jhc2VkaXJ9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImVjbGlwc2UtaG9tZTogJHtlY2xpcHNlLWhvbWV9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9ImJ1aWxkRGlyZWN0b3J5OiAke2J1aWxkRGlyZWN0b3J5fSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJwbHVnaW4tbmFtZTogJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iY2xhc3NuYW1lOiAke2NsYXNzbmFtZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0idGVzdFR5cGUgJHt0ZXN0VHlwZX0iIC8+Ci0KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJsaWJyYXJ5LWZpbGUiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy9vcmcuZWNsaXBzZS50ZXN0XzMuMS4wL2xpYnJhcnkueG1sIiAvPgotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJ3b3Jrc3BhY2UiCi0gICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vanVuaXR3b3Jrc3BhY2VzLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICAKLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGFsbCBpbml0aWFsaXphdGlvbiBjb2RlIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBmb3IgLS0+Ci0gICAgPCEtLSBhbGwgdGVzdHMgdGhhdCBhcmUgdG8gYmUgcnVuLiBJbml0aWFsaXphdGlvbiBmb3IgaW5kaXZpZHVhbCB0ZXN0cyAtLT4KLSAgICA8IS0tIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgc3VpdGUgdGFyZ2V0LiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImluaXQiPgotICAgICAgICA8dHN0YW1wIC8+Ci0gICAgICAgIDxkZWxldGU+Ci0gICAgICAgICAgICA8ZmlsZXNldAotICAgICAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9IgotICAgICAgICAgICAgICAgIGluY2x1ZGVzPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICA8L2RlbGV0ZT4KLSAgICAgICAgPCEtLSBtYWtlIGRpcmVjdG9yeSwgaW4gY2FzZSBwYXRoIGRvZXNuJ3QgZXhpc3QgeWV0IC0tPgotICAgICAgICA8bWtkaXIgZGlyPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgIDwhLS0gIGJ1dCBkZWxldGUgdG8gbWFrZSBzdXJlIGZyZXNoIGNvbnRlbnRzLS0+Ci0gICAgICAgIDxkZWxldGUKLSAgICAgICAgICAgIGRpcj0iJHt3b3Jrc3BhY2V9IgotICAgICAgICAgICAgcXVpZXQ9InRydWUiIC8+Ci0KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgZGVmaW5lcyB0aGUgdGVzdHMgdGhhdCBuZWVkIHRvIGJlIHJ1bi4gLS0+Ci0gICAgPHRhcmdldCBuYW1lPSJzdWl0ZSI+Ci0KLSAgICAgICAgPGFudAotICAgICAgICAgICAgdGFyZ2V0PSIke3Rlc3RUeXBlfSIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImRhdGEtZGlyIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3dvcmtzcGFjZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJwbHVnaW4tbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7Y2xhc3NuYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1wYXRoIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke2VjbGlwc2UtaG9tZX0vcGx1Z2lucy8ke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgPC9hbnQ+Ci0KLSAgICAgICAgPGNvcHkKLSAgICAgICAgICAgIGZhaWxvbmVycm9yPSJmYWxzZSIKLSAgICAgICAgICAgIGZpbGU9IiR7d29ya3NwYWNlfS8ubWV0YWRhdGEvLmxvZyIKLSAgICAgICAgICAgIHRvZmlsZT0iJHtidWlsZERpcmVjdG9yeX0vJHtidWlsZExhYmVsfS90ZXN0UmVzdWx0cy9jb25zb2xlbG9ncy8ke3BsdWdpbi1uYW1lfS5jb25zb2xlbG9nLnR4dCIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBob2xkcyBjb2RlIHRvIGNsZWFudXAgdGhlIHRlc3RpbmcgZW52aXJvbm1lbnQgYWZ0ZXIgLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgb2YgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4uIFlvdSBjYW4gdXNlIHRoaXMgdGFyZ2V0IHRvIC0tPgotICAgIDwhLS0gZGVsZXRlIHRlbXBvcmFyeSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9ImNsZWFudXAiPgotICAgICAgICA8IS0tIHVzdWFsbHkgbm8gbmVlZCB0byBkZWxldGUgd29ya3NwYWNlIHVudGlsIG5leHQgcnVuLCBhbmQgbGVhdmluZyBpdCBhbGxvd3MgaW5zcGVjdGlvbiAtLT4KLSAgICAgICAgPCEtLSA8ZGVsZXRlIGRpcj0iJHt3b3Jrc3BhY2V9IiBxdWlldD0idHJ1ZSIgLz4gLS0+Ci0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IHJ1bnMgdGhlIHRlc3Qgc3VpdGUuIEFueSBhY3Rpb25zIHRoYXQgbmVlZCB0byBoYXBwZW4gLS0+Ci0gICAgPCEtLSBhZnRlciBhbGwgdGhlIHRlc3RzIGhhdmUgYmVlbiBydW4gc2hvdWxkIGdvIGhlcmUuIC0tPgotICAgIDx0YXJnZXQKLSAgICAgICAgbmFtZT0icnVuIgotICAgICAgICBkZXBlbmRzPSJpbml0LHN1aXRlLGNsZWFudXAiPgotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9ImNvbGxlY3QiCi0gICAgICAgICAgICBhbnRmaWxlPSIke2xpYnJhcnktZmlsZX0iCi0gICAgICAgICAgICBkaXI9IiR7ZWNsaXBzZS1ob21lfSI+Ci0gICAgICAgICAgICA8cHJvcGVydHkKLSAgICAgICAgICAgICAgICBuYW1lPSJpbmNsdWRlcyIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtwbHVnaW4tbmFtZX0uKnhtbCIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9Im91dHB1dC1maWxlIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS54bWwiIC8+Ci0gICAgICAgIDwvYW50PgotICAgIDwvdGFyZ2V0PgotCi08L3Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNTM1NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvLmN2c2lnbm9yZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLWdlbmVyYXRlZFJlc3VsdHMKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOQ09NUExFVEUvTVNHX0NPTlRFTlRfSU5DT01QTEVURS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9NU0dfQ09OVEVOVF9JTkNPTVBMRVRFL01TR19DT05URU5UX0lOQ09NUExFVEUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTg1YzlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL01TR19DT05URU5UX0lOQ09NUExFVEUvTVNHX0NPTlRFTlRfSU5DT01QTEVURS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcm9vdCBbCi08IUVMRU1FTlQgcm9vdCAoY2hpbGQrKT4KLTwhRUxFTUVOVCBjaGlsZCAoI1BDREFUQSk+Ci1dPgotPHJvb3Q+Ci08L3Jvb3Q+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9NU0dfQ09OVEVOVF9JTlZBTElEL01TR19DT05URU5UX0lOVkFMSUQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvTVNHX0NPTlRFTlRfSU5WQUxJRC9NU0dfQ09OVEVOVF9JTlZBTElELnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUxYmQ1Mi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9NU0dfQ09OVEVOVF9JTlZBTElEL01TR19DT05URU5UX0lOVkFMSUQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHJvb3QgWwotPCFFTEVNRU5UIHJvb3QgKGNoaWxkKyk+Ci08IUVMRU1FTlQgY2hpbGQgKCNQQ0RBVEEpPgotXT4KLTxyb290PgotYWFhYQotPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjMvTm9DaGlsZHJlbi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9Ob0NoaWxkcmVuLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUwZjRkMC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9Ob0NoaWxkcmVuLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vQ2hpbGRyZW4iIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIj4KLQotICAgIDxlbGVtZW50IG5hbWU9Ik15RWxlbWVudCIgdHlwZT0idG5zOk5ld1hTRENvbXBsZXhUeXBlIj48L2VsZW1lbnQ+Ci0KLSAgICA8Y29tcGxleFR5cGUgbmFtZT0iTmV3WFNEQ29tcGxleFR5cGUiPgotICAgIAk8c2VxdWVuY2U+Ci0gICAgCQk8ZWxlbWVudCBuYW1lPSJOZXdFbGVtZW50MSIgdHlwZT0ic3RyaW5nIiBtYXhPY2N1cnM9InVuYm91bmRlZCIgbWluT2NjdXJzPSIwIj48L2VsZW1lbnQ+Ci0gICAgCTwvc2VxdWVuY2U+Ci0gICAgPC9jb21wbGV4VHlwZT4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL2N2Yy1jb21wbGV4LXR5cGUuMi4zLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi4zL2N2Yy1jb21wbGV4LXR5cGUuMi4zLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzgwNWVjZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuMy9jdmMtY29tcGxleC10eXBlLjIuMy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dG5zOk15RWxlbWVudCB4bWxuczp0bnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9DaGlsZHJlbiIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vQ2hpbGRyZW4gTm9DaGlsZHJlbi54c2QgIj4KLWFhYWFhCi08L3RuczpNeUVsZW1lbnQ+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL05vQ2hpbGRyZW4ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9Ob0NoaWxkcmVuLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIwMWEwOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0xpbmVOdW1iZXJBZGp1c3RtZW50cy9jdmMtY29tcGxleC10eXBlLjIuNC5iL05vQ2hpbGRyZW4ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9DaGlsZHJlbiIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL05vQ2hpbGRyZW4iPgotCi0gICAgPGVsZW1lbnQgbmFtZT0iTXlFbGVtZW50IiB0eXBlPSJ0bnM6TmV3WFNEQ29tcGxleFR5cGUiPjwvZWxlbWVudD4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJOZXdYU0RDb21wbGV4VHlwZSI+Ci0gICAgCTxzZXF1ZW5jZT4KLSAgICAJCTxlbGVtZW50IG5hbWU9Ik5ld0VsZW1lbnQxIiB0eXBlPSJzdHJpbmciIG1heE9jY3Vycz0idW5ib3VuZGVkIiBtaW5PY2N1cnM9IjEiPjwvZWxlbWVudD4KLSAgICAJPC9zZXF1ZW5jZT4KLSAgICA8L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvTGluZU51bWJlckFkanVzdG1lbnRzL2N2Yy1jb21wbGV4LXR5cGUuMi40LmIvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNiYmVkYjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9MaW5lTnVtYmVyQWRqdXN0bWVudHMvY3ZjLWNvbXBsZXgtdHlwZS4yLjQuYi9jdmMtY29tcGxleC10eXBlLjIuNC5iLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx0bnM6TXlFbGVtZW50IHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Ob0NoaWxkcmVuIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvTm9DaGlsZHJlbiBOb0NoaWxkcmVuLnhzZCAiPgotICAKLTwvdG5zOk15RWxlbWVudD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoSW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54bWwiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lVmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueG1sIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueG1sIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54bWwiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhtbCIKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhtbCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhtbCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54bWwiCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVmNjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmYzNWNiMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aFZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWY2NjQ2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZjM1Y2IxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllZjY2NDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmMzVjYjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QvPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZS9JbnZvaWNlLmR0ZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZS9JbnZvaWNlLmR0ZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDczN2JhNi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2UvSW52b2ljZS5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSwzMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFFTEVNRU5UIEludm9pY2UgKEhlYWRlcixJdGVtKyk+Ci08IUVMRU1FTlQgSGVhZGVyIChEYXRlLEJpbGxUbyk+Ci08IUFUVExJU1QgSGVhZGVyCi0gaW52b2ljZU51bWJlciBDREFUQSAjUkVRVUlSRUQKLT4KLTwhRUxFTUVOVCBJdGVtIChkZXNjcmlwdGlvbiopPgotPCFBVFRMSVNUIEl0ZW0KLSBwcmljZSBDREFUQSAjUkVRVUlSRUQKLSBkaXNjb3VudCAocHJvbW90aW9uIHwgcmVndWxhcikgInJlZ3VsYXIiCi0+Ci08IUVMRU1FTlQgRGF0ZSAoKE1vbnRoLERheSxZZWFyKXwoRGF5LE1vbnRoLFllYXIpKT4KLTwhRUxFTUVOVCBCaWxsVG8gKEFkZHJlc3MpPgotPCFBVFRMSVNUIEJpbGxUbwotIGN1c3ROdW1iZXIgSUQgI1JFUVVJUkVECi0gbmFtZSBDREFUQSAjSU1QTElFRAotIHBob25lIENEQVRBICNJTVBMSUVECi0+Ci08IUVMRU1FTlQgZGVzY3JpcHRpb24gKCNQQ0RBVEEpPgotPCFFTEVNRU5UIEFkZHJlc3MgKHN0cmVldDEsc3RyZWV0Mj8sY2l0eSwoc3RhdGV8cHJvdmluY2UpLHppcCxjb3VudHJ5Pyk+Ci08IUVMRU1FTlQgc3RyZWV0MSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgc3RyZWV0MiAoI1BDREFUQSk+Ci08IUVMRU1FTlQgY2l0eSAoI1BDREFUQSk+Ci08IUVMRU1FTlQgc3RhdGUgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIHByb3ZpbmNlICgjUENEQVRBKT4KLTwhRUxFTUVOVCB6aXAgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIGNvdW50cnkgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIE1vbnRoICgjUENEQVRBKT4KLTwhRUxFTUVOVCBEYXkgKCNQQ0RBVEEpPgotPCFFTEVNRU5UIFllYXIgKCNQQ0RBVEEpPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlL0ludm9pY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlL0ludm9pY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzlhZjI3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZS9JbnZvaWNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgSW52b2ljZSBQVUJMSUMgIkludm9pY2VJZCIgIkludm9pY2UuZHRkIiA+Ci08SW52b2ljZT4KLSAgPEhlYWRlciBpbnZvaWNlTnVtYmVyPSIxMjM0NSI+Ci0gICAgPERhdGU+Ci0gICAgICA8TW9udGg+SnVseTwvTW9udGg+Ci0gICAgICA8RGF5PjE1PC9EYXk+Ci0gICAgICA8WWVhcj4yMDAxPC9ZZWFyPgotICAgIDwvRGF0ZT4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9Ilg1NzM5IiBuYW1lPSJNaWx0b24gTWNHb28iIHBob25lPSI0MTYtNDQ4LTQ0MTQiPgotICAgICAgPEFkZHJlc3M+Ci0gICAgICAgIDxzdHJlZXQxPklCTTwvc3RyZWV0MT4KLSAgICAgICAgPHN0cmVldDI+MTE1MCBFZ2xpbnRvbiBBdmUgRWFzdDwvc3RyZWV0Mj4KLSAgICAgICAgPGNpdHk+VG9yb250bzwvY2l0eT4KLSAgICAgICAgPHN0YXRlPk9udGFyaW88L3N0YXRlPgotICAgICAgICA8emlwPk0zQyAxSDc8L3ppcD4KLSAgICAgICAgPGNvdW50cnk+Q2FuYWRhPC9jb3VudHJ5PgotICAgICAgPC9BZGRyZXNzPgotICAgIDwvQmlsbFRvPgotICA8L0hlYWRlcj4KLSAgPEl0ZW0gZGlzY291bnQ9InByb21vdGlvbiIgcHJpY2U9IjU3Ij4KLSAgICA8ZGVzY3JpcHRpb24+aGlnaCBzcGVlZCAzRCBncmFwaGljcyBjYXJkPC9kZXNjcmlwdGlvbj4KLSAgPC9JdGVtPgotPC9JbnZvaWNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlSW52YWxpZC9JbnZvaWNlLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZUludmFsaWQvSW52b2ljZS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3OWFmMjcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlSW52YWxpZC9JbnZvaWNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgSW52b2ljZSBQVUJMSUMgIkludm9pY2VJZCIgIkludm9pY2UuZHRkIiA+Ci08SW52b2ljZT4KLSAgPEhlYWRlciBpbnZvaWNlTnVtYmVyPSIxMjM0NSI+Ci0gICAgPERhdGU+Ci0gICAgICA8TW9udGg+SnVseTwvTW9udGg+Ci0gICAgICA8RGF5PjE1PC9EYXk+Ci0gICAgICA8WWVhcj4yMDAxPC9ZZWFyPgotICAgIDwvRGF0ZT4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9Ilg1NzM5IiBuYW1lPSJNaWx0b24gTWNHb28iIHBob25lPSI0MTYtNDQ4LTQ0MTQiPgotICAgICAgPEFkZHJlc3M+Ci0gICAgICAgIDxzdHJlZXQxPklCTTwvc3RyZWV0MT4KLSAgICAgICAgPHN0cmVldDI+MTE1MCBFZ2xpbnRvbiBBdmUgRWFzdDwvc3RyZWV0Mj4KLSAgICAgICAgPGNpdHk+VG9yb250bzwvY2l0eT4KLSAgICAgICAgPHN0YXRlPk9udGFyaW88L3N0YXRlPgotICAgICAgICA8emlwPk0zQyAxSDc8L3ppcD4KLSAgICAgICAgPGNvdW50cnk+Q2FuYWRhPC9jb3VudHJ5PgotICAgICAgPC9BZGRyZXNzPgotICAgIDwvQmlsbFRvPgotICA8L0hlYWRlcj4KLSAgPEl0ZW0gZGlzY291bnQ9InByb21vdGlvbiIgcHJpY2U9IjU3Ij4KLSAgICA8ZGVzY3JpcHRpb24+aGlnaCBzcGVlZCAzRCBncmFwaGljcyBjYXJkPC9kZXNjcmlwdGlvbj4KLSAgPC9JdGVtPgotPC9JbnZvaWNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlUmVtb3RlL0ludm9pY2UueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9JbnZvaWNlUmVtb3RlL0ludm9pY2UueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNWJhM2VhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZVJlbW90ZS9JbnZvaWNlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgSW52b2ljZSBQVUJMSUMgIkludm9pY2VJZCIgImh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvd3N0L2NvbXBvbmVudHMveHNkL3Rlc3RzL2R0ZC1yZWZlcmVuY2VzL0ludm9pY2UuZHRkIj4KLTxJbnZvaWNlPgotICA8SGVhZGVyIGludm9pY2VOdW1iZXI9IjEyMzQ1Ij4KLSAgICA8RGF0ZT4KLSAgICAgIDxNb250aD5KdWx5PC9Nb250aD4KLSAgICAgIDxEYXk+MTU8L0RheT4KLSAgICAgIDxZZWFyPjIwMDE8L1llYXI+Ci0gICAgPC9EYXRlPgotICAgIDxCaWxsVG8gY3VzdE51bWJlcj0iWDU3MzkiIG5hbWU9Ik1pbHRvbiBNY0dvbyIgcGhvbmU9IjQxNi00NDgtNDQxNCI+Ci0gICAgICA8QWRkcmVzcz4KLSAgICAgICAgPHN0cmVldDE+SUJNPC9zdHJlZXQxPgotICAgICAgICA8c3RyZWV0Mj4xMTUwIEVnbGludG9uIEF2ZSBFYXN0PC9zdHJlZXQyPgotICAgICAgICA8Y2l0eT5Ub3JvbnRvPC9jaXR5PgotICAgICAgICA8c3RhdGU+T250YXJpbzwvc3RhdGU+Ci0gICAgICAgIDx6aXA+TTNDIDFINzwvemlwPgotICAgICAgICA8Y291bnRyeT5DYW5hZGE8L2NvdW50cnk+Ci0gICAgICA8L0FkZHJlc3M+Ci0gICAgPC9CaWxsVG8+Ci0gIDwvSGVhZGVyPgotICA8SXRlbSBkaXNjb3VudD0icHJvbW90aW9uIiBwcmljZT0iNTciPgotICAgIDxkZXNjcmlwdGlvbj5oaWdoIHNwZWVkIDNEIGdyYXBoaWNzIGNhcmQ8L2Rlc2NyaXB0aW9uPgotICA8L0l0ZW0+Ci08L0ludm9pY2U+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL0ludm9pY2VSZW1vdGUvSW52b2ljZUluZGlyZWN0LnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZVJlbW90ZS9JbnZvaWNlSW5kaXJlY3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOWU5ODc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvSW52b2ljZVJlbW90ZS9JbnZvaWNlSW5kaXJlY3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBJbnZvaWNlIFBVQkxJQyAiSW52b2ljZUlkIiAiaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy93c3QvY29tcG9uZW50cy94c2QvdGVzdHMvZHRkLXJlZmVyZW5jZXMvSW5kaXJlY3RJbnZvaWNlLmR0ZCI+Ci08SW52b2ljZT4KLSAgPEhlYWRlciBpbnZvaWNlTnVtYmVyPSIxMjM0NSI+Ci0gICAgPERhdGU+Ci0gICAgICA8TW9udGg+SnVseTwvTW9udGg+Ci0gICAgICA8RGF5PjE1PC9EYXk+Ci0gICAgICA8WWVhcj4yMDAxPC9ZZWFyPgotICAgIDwvRGF0ZT4KLSAgICA8QmlsbFRvIGN1c3ROdW1iZXI9Ilg1NzM5IiBuYW1lPSJNaWx0b24gTWNHb28iIHBob25lPSI0MTYtNDQ4LTQ0MTQiPgotICAgICAgPEFkZHJlc3M+Ci0gICAgICAgIDxzdHJlZXQxPklCTTwvc3RyZWV0MT4KLSAgICAgICAgPHN0cmVldDI+MTE1MCBFZ2xpbnRvbiBBdmUgRWFzdDwvc3RyZWV0Mj4KLSAgICAgICAgPGNpdHk+VG9yb250bzwvY2l0eT4KLSAgICAgICAgPHN0YXRlPk9udGFyaW88L3N0YXRlPgotICAgICAgICA8emlwPk0zQyAxSDc8L3ppcD4KLSAgICAgICAgPGNvdW50cnk+Q2FuYWRhPC9jb3VudHJ5PgotICAgICAgPC9BZGRyZXNzPgotICAgIDwvQmlsbFRvPgotICA8L0hlYWRlcj4KLSAgPEl0ZW0gZGlzY291bnQ9InByb21vdGlvbiIgcHJpY2U9IjU3Ij4KLSAgICA8ZGVzY3JpcHRpb24+aGlnaCBzcGVlZCAzRCBncmFwaGljcyBjYXJkPC9kZXNjcmlwdGlvbj4KLSAgPC9JdGVtPgotPC9JbnZvaWNlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzQ5ODc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWUvQ2F0YWxvZ3VlLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDE5ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08YzpDYXRhbG9ndWUgeG1sbnM6Yz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpzY2hlbWFMb2NhdGlvbj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUgQ2F0YWxvZ3VlLnhzZCAiPgotCTxjOkJvb2s+Ci0JCTx0aXRsZT5Qcm9mZXNzaW9uYWwgWE1MIFNjaGVtYTwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JCTxpc2JuPjEtODYxMDA1LTQ3LTQ8L2lzYm4+Ci0JCTxwdWJsaXNoZXI+V3JveCBQcmVzczwvcHVibGlzaGVyPgotCTwvYzpCb29rPgotCTxjOk1hZ2F6aW5lPgotCQk8dGl0bGU+V2ViU3BoZXJlIERldmVsb3BlcidzIEpvdXJuYWw8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCTwvYzpNYWdhemluZT4KLQk8YzpCb29rPgotCQk8dGl0bGU+SmF2YSBhbmQgWFNMVDwvdGl0bGU+Ci0JCTxkYXRlPjIwMDE8L2RhdGU+Ci0JCTxpc2JuPjAtNTk2LTAwMTQzLTY8L2lzYm4+Ci0JCTxwdWJsaXNoZXI+TydSZWlsbHk8L3B1Ymxpc2hlcj4KLQk8L2M6Qm9vaz4KLTwvYzpDYXRhbG9ndWU+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlL0NhdGFsb2d1ZS54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZmY5ZmQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9QdWJsaWNhdGlvbkNhdGFsb2d1ZS9DYXRhbG9ndWUueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSIgeG1sbnM6Yz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUiPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9IlB1YmxpY2F0aW9uVHlwZSI+Ci0JCTxzZXF1ZW5jZT4KLQkJCTxlbGVtZW50IG5hbWU9InRpdGxlIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9ImF1dGhvciIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0idW5ib3VuZGVkIj48L2VsZW1lbnQ+Ci0JCQk8ZWxlbWVudCBuYW1lPSJkYXRlIiB0eXBlPSJnWWVhciI+PC9lbGVtZW50PgotCQk8L3NlcXVlbmNlPgotCTwvY29tcGxleFR5cGU+Ci0JCi0JPGNvbXBsZXhUeXBlIG5hbWU9IkJvb2tUeXBlIj4KLQkJPGNvbXBsZXhDb250ZW50PgotCQkJPGV4dGVuc2lvbiBiYXNlPSJjOlB1YmxpY2F0aW9uVHlwZSI+Ci0JCQkgICAgPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJpc2JuIiB0eXBlPSJzdHJpbmciIC8+Ci0JCQkJCTxlbGVtZW50IG5hbWU9InB1Ymxpc2hlciIgdHlwZT0ic3RyaW5nIi8+Ci0gICAgICAgICAgICAgICAgPC9zZXF1ZW5jZT4KLQkJCTwvZXh0ZW5zaW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0JCi0JPGNvbXBsZXhUeXBlIG5hbWU9Ik1hZ2F6aW5lVHlwZSI+Ci0JCTxjb21wbGV4Q29udGVudD4JCQkKLQkJCTxyZXN0cmljdGlvbiBiYXNlPSJjOlB1YmxpY2F0aW9uVHlwZSI+Ci0JCQkJPHNlcXVlbmNlPgotICAgICAgICAgICAgICAgICAgICA8ZWxlbWVudCBuYW1lPSJ0aXRsZSIgdHlwZT0ic3RyaW5nIiAvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJhdXRob3IiIHR5cGU9InN0cmluZyIgbWluT2NjdXJzPSIwIiBtYXhPY2N1cnM9IjAiLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0iZGF0ZSIgdHlwZT0iZ1llYXIiPjwvZWxlbWVudD4KLQkJCQk8L3NlcXVlbmNlPgotCQkJPC9yZXN0cmljdGlvbj4KLQkJPC9jb21wbGV4Q29udGVudD4KLQk8L2NvbXBsZXhUeXBlPgotCQotCTxlbGVtZW50IG5hbWU9IlB1YmxpY2F0aW9uIiB0eXBlPSJjOlB1YmxpY2F0aW9uVHlwZSIgYWJzdHJhY3Q9InRydWUiPjwvZWxlbWVudD4KLQkKLQk8ZWxlbWVudCBuYW1lPSJCb29rIiB0eXBlPSJjOkJvb2tUeXBlIiBzdWJzdGl0dXRpb25Hcm91cD0iYzpQdWJsaWNhdGlvbiI+PC9lbGVtZW50PgotCi0JPGVsZW1lbnQgbmFtZT0iTWFnYXppbmUiIHR5cGU9ImM6TWFnYXppbmVUeXBlIiBzdWJzdGl0dXRpb25Hcm91cD0iYzpQdWJsaWNhdGlvbiI+PC9lbGVtZW50PgotCQotCTxlbGVtZW50IG5hbWU9IkNhdGFsb2d1ZSI+Ci0JCTxjb21wbGV4VHlwZT4KLQkJCTxzZXF1ZW5jZT4KLQkJCQk8ZWxlbWVudCByZWY9ImM6UHVibGljYXRpb24iIG1heE9jY3Vycz0idW5ib3VuZGVkIj48L2VsZW1lbnQ+Ci0JCQk8L3NlcXVlbmNlPgotCQk8L2NvbXBsZXhUeXBlPgotCTwvZWxlbWVudD4KLQkKLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWVJbnZhbGlkL0NhdGFsb2d1ZS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL1B1YmxpY2F0aW9uQ2F0YWxvZ3VlSW52YWxpZC9DYXRhbG9ndWUueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzQ5ODc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvWE1MRXhhbXBsZXMvUHVibGljYXRpb25DYXRhbG9ndWVJbnZhbGlkL0NhdGFsb2d1ZS54bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPGM6Q2F0YWxvZ3VlIHhtbG5zOmM9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvd2VidG9vbHMvQ2F0YWxvZ3VlIENhdGFsb2d1ZS54c2QgIj4KLQk8YzpCb29rPgotCQk8dGl0bGU+UHJvZmVzc2lvbmFsIFhNTCBTY2hlbWE8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCQk8aXNibj4xLTg2MTAwNS00Ny00PC9pc2JuPgotCQk8cHVibGlzaGVyPldyb3ggUHJlc3M8L3B1Ymxpc2hlcj4KLQk8L2M6Qm9vaz4KLQk8YzpNYWdhemluZT4KLQkJPHRpdGxlPldlYlNwaGVyZSBEZXZlbG9wZXIncyBKb3VybmFsPC90aXRsZT4KLQkJPGRhdGU+MjAwMTwvZGF0ZT4KLQk8L2M6TWFnYXppbmU+Ci0JPGM6Qm9vaz4KLQkJPHRpdGxlPkphdmEgYW5kIFhTTFQ8L3RpdGxlPgotCQk8ZGF0ZT4yMDAxPC9kYXRlPgotCQk8aXNibj4wLTU5Ni0wMDE0My02PC9pc2JuPgotCQk8cHVibGlzaGVyPk8nUmVpbGx5PC9wdWJsaXNoZXI+Ci0JPC9jOkJvb2s+Ci08L2M6Q2F0YWxvZ3VlPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9YTUxFeGFtcGxlcy9qMmVlL3dlYi54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL2oyZWUvd2ViLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGM2MGE0MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1hNTEV4YW1wbGVzL2oyZWUvd2ViLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDEzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08d2ViLWFwcCBpZD0iV2ViQXBwX0lEIiB2ZXJzaW9uPSIyLjQiIHhtbG5zPSJodHRwOi8vamF2YS5zdW4uY29tL3htbC9ucy9qMmVlIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly9qYXZhLnN1bi5jb20veG1sL25zL2oyZWUgaHR0cDovL2phdmEuc3VuLmNvbS94bWwvbnMvajJlZS93ZWItYXBwXzJfNC54c2QiPgotICAgIDxkaXNwbGF5LW5hbWU+bW9kdWxlPC9kaXNwbGF5LW5hbWU+Ci0gICAgPHdlbGNvbWUtZmlsZS1saXN0PgotICAgICAgICA8d2VsY29tZS1maWxlPmluZGV4Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5pbmRleC5odG08L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5pbmRleC5qc3A8L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bWw8L3dlbGNvbWUtZmlsZT4KLSAgICAgICAgPHdlbGNvbWUtZmlsZT5kZWZhdWx0Lmh0bTwvd2VsY29tZS1maWxlPgotICAgICAgICA8d2VsY29tZS1maWxlPmRlZmF1bHQuanNwPC93ZWxjb21lLWZpbGU+Ci0gICAgPC93ZWxjb21lLWZpbGUtbGlzdD4KLTwvd2ViLWFwcD4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZEhvc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZEhvc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOWU4ZGI2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRIb3N0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBleGFtcGxlIFBVQkxJQyAiUHVibGljIElkZW50aWZpZXIiICJodHRwOi8vd3d3LmVjbGlwc2UuYmxhaC9ub24tZXhpc3RlbnQtZHRkLmR0ZCI+Ci08ZXhhbXBsZS8+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZExvY2F0aW9uLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ2Fubm90TG9jYXRlRFREL0ludmFsaWRMb2NhdGlvbi54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyMWI4YmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DYW5ub3RMb2NhdGVEVEQvSW52YWxpZExvY2F0aW9uLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBleGFtcGxlIFBVQkxJQyAiUHVibGljIElkZW50aWZpZXIiICJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL25vbi1leGlzdGVudC1kdGQuZHRkIj4KLTxleGFtcGxlLz4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0N1c3RvbUVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50L3NpbXBsZW5lc3RlZC54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0N1c3RvbUVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50L3NpbXBsZW5lc3RlZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZTdiYTYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9DdXN0b21FcnJvclJlcG9ydGVkT25Db3JyZWN0RWxlbWVudC9zaW1wbGVuZXN0ZWQueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHJvb3QgeG1sbnM9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2ltcGxlbmVzdGVkIiB4bWxuczp4c2k9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hLWluc3RhbmNlIiB4c2k6c2NoZW1hTG9jYXRpb249Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvc2ltcGxlbmVzdGVkIHNpbXBsZW5lc3RlZC54c2QgIj4KLSAgPGNoaWxkMT5jaGlsZDE8L2NoaWxkMT4KLTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ3VzdG9tRXJyb3JSZXBvcnRlZE9uQ29ycmVjdEVsZW1lbnQvc2ltcGxlbmVzdGVkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvQ3VzdG9tRXJyb3JSZXBvcnRlZE9uQ29ycmVjdEVsZW1lbnQvc2ltcGxlbmVzdGVkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmNmNWFkMi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0N1c3RvbUVycm9yUmVwb3J0ZWRPbkNvcnJlY3RFbGVtZW50L3NpbXBsZW5lc3RlZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zaW1wbGVuZXN0ZWQiIHhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9zaW1wbGVuZXN0ZWQiPgotCi0gICAgPGVsZW1lbnQgbmFtZT0icm9vdCI+Ci0gICAgCTxjb21wbGV4VHlwZT4KLSAgICAJCTxzZXF1ZW5jZT4KLQotICAgIAkJCTxlbGVtZW50IHJlZj0idG5zOmNoaWxkMSI+PC9lbGVtZW50PgotICAgIAkJCTxlbGVtZW50IHJlZj0idG5zOmNoaWxkMiI+PC9lbGVtZW50PgotICAgIAkJPC9zZXF1ZW5jZT4KLSAgICAJPC9jb21wbGV4VHlwZT4KLSAgICA8L2VsZW1lbnQ+Ci0gICAgPGVsZW1lbnQgbmFtZT0iY2hpbGQxIiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLSAgICA8ZWxlbWVudCBuYW1lPSJjaGlsZDIiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotICAgIAotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9FbXB0eUZpbGUvRW1wdHkueG1sCisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm9HcmFtbWFyL05vR3JhbW1hci54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vR3JhbW1hci9Ob0dyYW1tYXIueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwODljODg2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm9HcmFtbWFyL05vR3JhbW1hci54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08cm9vdD4KLQk8Y2hpbGQ+Ci0JCTxjaGlsZDIvPgotCTwvY2hpbGQ+Ci08L3Jvb3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob05hbWVzcGFjZVNjaGVtYS9Ob05hbWVzcGFjZVNjaGVtYS54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBmMTlhMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290IHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSJOb05hbWVzcGFjZVNjaGVtYS54c2QiPgotICA8Y2hpbGQxPmNoaWxkMTwvY2hpbGQxPgotPC9yb290PgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob05hbWVzcGFjZVNjaGVtYS9Ob05hbWVzcGFjZVNjaGVtYS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiMGYyNC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL05vTmFtZXNwYWNlU2NoZW1hL05vTmFtZXNwYWNlU2NoZW1hLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08eHNkOnNjaGVtYSB4bWxuczp4c2Q9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIj4KLSAgICA8eHNkOmVsZW1lbnQgbmFtZT0icm9vdCIgdHlwZT0iUm9vdFR5cGUiPjwveHNkOmVsZW1lbnQ+Ci0gICAgPHhzZDpjb21wbGV4VHlwZSBuYW1lPSJSb290VHlwZSI+Ci0gICAgCTx4c2Q6c2VxdWVuY2U+Ci0gICAgCQk8eHNkOmVsZW1lbnQgbmFtZT0iY2hpbGQxIiB0eXBlPSJ4c2Q6c3RyaW5nIj48L3hzZDplbGVtZW50PgotICAgIAkJPHhzZDplbGVtZW50IG5hbWU9ImNoaWxkMiIgdHlwZT0ieHNkOnN0cmluZyI+PC94c2Q6ZWxlbWVudD4KLSAgICAJPC94c2Q6c2VxdWVuY2U+Ci0gICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob3RXZWxsRm9ybWVkL05vdFdlbGxGb3JtZWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9Ob3RXZWxsRm9ybWVkL05vdFdlbGxGb3JtZWQueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDk5YjJhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvTm90V2VsbEZvcm1lZC9Ob3RXZWxsRm9ybWVkLnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxyb290PgotICA8bm9jbG9zaW5ndGFnPgotPC9yb290PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvUm9vdE5vTlNDaGlsZE5TL1Jvb3ROb05TQ2hpbGROUy54bWwgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1Jvb3ROb05TQ2hpbGROUy9Sb290Tm9OU0NoaWxkTlMueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNGU0NGVmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvUm9vdE5vTlNDaGlsZE5TL1Jvb3ROb05TQ2hpbGROUy54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04JyA/PgotPHJvb3Q+Ci0gIDx0ZXN0OnRlc3QgeG1sbnM6dGVzdD0iaHR0cDovL3Rlc3Qub3JnL3Rlc3QiPgotICA8L3Rlc3Q6dGVzdD4KLTwvcm9vdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERUREludmFsaWQueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFRESW52YWxpZC54bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNGQwYTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhtbC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9idWdmaXhlcy9WYWxpZGF0ZVdpdGhEVEQvVmFsaWRhdGVXaXRoRFRESW52YWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiPz4KLTwhRE9DVFlQRSBzaW1wbGUgU1lTVEVNICJzaW1wbGUuZHRkIj4KLQotPHNpbXBsZSB2ZXJzaW9uPSIyLjAiIHhtbG5zPSJodHRwOi8vd3d3LnNpbXBsZS5jb20vc2ltcGxlIj4KLSA8ZHVtbXk+IDwvZHVtbXk+Ci08L3NpbXBsZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERURFZhbGlkLnhtbCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL1ZhbGlkYXRlV2l0aERURFZhbGlkLnhtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTk5NWQ4Yi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9WYWxpZGF0ZVdpdGhEVERWYWxpZC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiPz4KLTwhRE9DVFlQRSBzaW1wbGUgU1lTVEVNICJzaW1wbGUuZHRkIj4KLQotPHNpbXBsZSB2ZXJzaW9uPSIyLjAiIHhtbG5zPSJodHRwOi8vd3d3LnNpbXBsZS5jb20vc2ltcGxlIj4KLSAgPHNpbXBsZTE+Ci0gICAgPHNpbXBsZTIvPgotICA8L3NpbXBsZTE+Ci08L3NpbXBsZT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL3NpbXBsZS5kdGQgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueG1sLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL2J1Z2ZpeGVzL1ZhbGlkYXRlV2l0aERURC9zaW1wbGUuZHRkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODQ5Yjk3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54bWwudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvYnVnZml4ZXMvVmFsaWRhdGVXaXRoRFREL3NpbXBsZS5kdGQKKysrIC9kZXYvbnVsbApAQCAtMSw3ICswLDAgQEAKLTwhRUxFTUVOVCBzaW1wbGUgKHNpbXBsZTEpPgotPCFBVFRMSVNUIHNpbXBsZSAKLSAgICAgICAgICAgdmVyc2lvbiBDREFUQSAjUkVRVUlSRUQKLSAgICAgICAgICAgeG1sbnMgQ0RBVEEgI0ZJWEVEICdodHRwOi8vd3d3LnNpbXBsZS5jb20vc2ltcGxlJyAKLSAgICAgICAgICAgPgotPCFFTEVNRU5UIHNpbXBsZTEgKHNpbXBsZTIpPgotPCFFTEVNRU5UIHNpbXBsZTIgRU1QVFk+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5jbGFzc3BhdGggYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWQ4YmFmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmNsYXNzcGF0aAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08Y2xhc3NwYXRoPgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJzcmMiIHBhdGg9InNyYy8iLz4KLQk8Y2xhc3NwYXRoZW50cnkga2luZD0iY29uIiBwYXRoPSJvcmcuZWNsaXBzZS5qZHQubGF1bmNoaW5nLkpSRV9DT05UQUlORVIiLz4KLQk8Y2xhc3NwYXRoZW50cnkgcGF0aD0ib3JnLmVjbGlwc2UucGRlLmNvcmUucmVxdWlyZWRQbHVnaW5zIiBraW5kPSJjb24iPgotCQk8YWNjZXNzcnVsZXM+Ci0JCQk8YWNjZXNzcnVsZSBraW5kPSJhY2Nlc3NpYmxlIiBwYXR0ZXJuPSJvcmcvZWNsaXBzZS93c3QvKioiLz4KLQkJPC9hY2Nlc3NydWxlcz4KLQk8L2NsYXNzcGF0aGVudHJ5PgotCTxjbGFzc3BhdGhlbnRyeSBraW5kPSJvdXRwdXQiIHBhdGg9ImJpbiIvPgotPC9jbGFzc3BhdGg+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLmN2c2lnbm9yZSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOGE2ODBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uY3ZzaWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi1iaW4KLWJ1aWxkLnhtbAotdmFsaWRhdGV4c2R0ZXN0cy5qYXIKLXRlbXAuZm9sZGVyCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnByb2plY3QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0OGNkNDcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5wcm9qZWN0CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxwcm9qZWN0RGVzY3JpcHRpb24+Ci0JPG5hbWU+b3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzPC9uYW1lPgotCTxjb21tZW50PjwvY29tbWVudD4KLQk8cHJvamVjdHM+Ci0JPC9wcm9qZWN0cz4KLQk8YnVpbGRTcGVjPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UuamR0LmNvcmUuamF2YWJ1aWxkZXI8L25hbWU+Ci0JCQk8YXJndW1lbnRzPgotCQkJPC9hcmd1bWVudHM+Ci0JCTwvYnVpbGRDb21tYW5kPgotCQk8YnVpbGRDb21tYW5kPgotCQkJPG5hbWU+b3JnLmVjbGlwc2UucGRlLk1hbmlmZXN0QnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JCTxidWlsZENvbW1hbmQ+Ci0JCQk8bmFtZT5vcmcuZWNsaXBzZS5wZGUuU2NoZW1hQnVpbGRlcjwvbmFtZT4KLQkJCTxhcmd1bWVudHM+Ci0JCQk8L2FyZ3VtZW50cz4KLQkJPC9idWlsZENvbW1hbmQ+Ci0JPC9idWlsZFNwZWM+Ci0JPG5hdHVyZXM+Ci0JCTxuYXR1cmU+b3JnLmVjbGlwc2UucGRlLlBsdWdpbk5hdHVyZTwvbmF0dXJlPgotCQk8bmF0dXJlPm9yZy5lY2xpcHNlLmpkdC5jb3JlLmphdmFuYXR1cmU8L25hdHVyZT4KLQk8L25hdHVyZXM+Ci08L3Byb2plY3REZXNjcmlwdGlvbj4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLnByZWZzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmE1YzkxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNUdWUgQXByIDA0IDAzOjM2OjMyIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotZW5jb2RpbmcvPHByb2plY3Q+PUlTTy04ODU5LTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlYzU3NTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSNNb24gQXByIDE3IDAxOjQ4OjM5IEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotbGluZS5zZXBhcmF0b3I9XHJcbgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UuamR0LmNvcmUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmN2JhYzcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQuY29yZS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSNTYXQgQXVnIDE5IDE2OjMxOjQzIEVEVCAyMDA2Ci1lY2xpcHNlLnByZWZlcmVuY2VzLnZlcnNpb249MQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5jbGVhbk91dHB1dEZvbGRlcj1jbGVhbgotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5kdXBsaWNhdGVSZXNvdXJjZVRhc2s9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5pbnZhbGlkQ2xhc3NwYXRoPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuYnVpbGRlci5yZXNvdXJjZUNvcHlFeGNsdXNpb25GaWx0ZXI9Ki5sYXVuY2gKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNpcmN1bGFyQ2xhc3NwYXRoPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jbGFzc3BhdGguZXhjbHVzaW9uUGF0dGVybnM9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY2xhc3NwYXRoLm11bHRpcGxlT3V0cHV0TG9jYXRpb25zPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4uaW5saW5lSnNyQnl0ZWNvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLmNvZGVnZW4udGFyZ2V0UGxhdGZvcm09MS4yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb2RlZ2VuLnVudXNlZExvY2FsPXByZXNlcnZlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5jb21wbGlhbmNlPTEuNAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubGluZU51bWJlcj1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcubG9jYWxWYXJpYWJsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZGVidWcuc291cmNlRmlsZT1nZW5lcmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIuZG9jLmNvbW1lbnQuc3VwcG9ydD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5tYXhQcm9ibGVtUGVyVW5pdD0xMDAKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYW5ub3RhdGlvblN1cGVySW50ZXJmYWNlPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uYXNzZXJ0SWRlbnRpZmllcj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmF1dG9ib3hpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmRlcHJlY2F0aW9uPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kZXByZWNhdGlvbkluRGVwcmVjYXRlZENvZGU9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZGVwcmVjYXRpb25XaGVuT3ZlcnJpZGluZ0RlcHJlY2F0ZWRNZXRob2Q9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5kaXNjb3VyYWdlZFJlZmVyZW5jZT13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmVtcHR5U3RhdGVtZW50PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZW51bUlkZW50aWZpZXI9d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5maWVsZEhpZGluZz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxQYXJhbWV0ZXJCb3VuZD1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uZmluYWxseUJsb2NrTm90Q29tcGxldGluZ05vcm1hbGx5PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmZvcmJpZGRlblJlZmVyZW5jZT1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5oaWRkZW5DYXRjaEJsb2NrPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wYXRpYmxlTm9uSW5oZXJpdGVkSW50ZXJmYWNlTWV0aG9kPXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW5jb21wbGV0ZUVudW1Td2l0Y2g9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmluZGlyZWN0U3RhdGljQWNjZXNzPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5pbnZhbGlkSmF2YWRvY1RhZ3NEZXByZWNhdGVkUmVmPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0uaW52YWxpZEphdmFkb2NUYWdzTm90VmlzaWJsZVJlZj1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLmludmFsaWRKYXZhZG9jVGFnc1Zpc2liaWxpdHk9cHJpdmF0ZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5sb2NhbFZhcmlhYmxlSGlkaW5nPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5tZXRob2RXaXRoQ29uc3RydWN0b3JOYW1lPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdEZXByZWNhdGVkQW5ub3RhdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50cz1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NDb21tZW50c092ZXJyaWRpbmc9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY0NvbW1lbnRzVmlzaWJpbGl0eT1wdWJsaWMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5taXNzaW5nSmF2YWRvY1RhZ3NPdmVycmlkaW5nPWVuYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0ubWlzc2luZ0phdmFkb2NUYWdzVmlzaWJpbGl0eT1wcml2YXRlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdPdmVycmlkZUFubm90YXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm1pc3NpbmdTZXJpYWxWZXJzaW9uPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vRWZmZWN0QXNzaWdubWVudD1lcnJvcgotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5ub0ltcGxpY2l0U3RyaW5nQ29udmVyc2lvbj13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm5vbkV4dGVybmFsaXplZFN0cmluZ0xpdGVyYWw9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLm92ZXJyaWRpbmdQYWNrYWdlRGVmYXVsdE1ldGhvZD13YXJuaW5nCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnBvc3NpYmxlQWNjaWRlbnRhbEJvb2xlYW5Bc3NpZ25tZW50PWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnNwZWNpYWxQYXJhbWV0ZXJIaWRpbmdGaWVsZD1lbmFibGVkCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN0YXRpY0FjY2Vzc1JlY2VpdmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnN1cHByZXNzV2FybmluZ3M9ZW5hYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS5zeW50aGV0aWNBY2Nlc3NFbXVsYXRpb249aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnR5cGVQYXJhbWV0ZXJIaWRpbmc9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuY2hlY2tlZFR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmRvY3VtZW50ZWRFbXB0eUJsb2NrPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bmhhbmRsZWRXYXJuaW5nVG9rZW49d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bm5lY2Vzc2FyeUVsc2U9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVubmVjZXNzYXJ5VHlwZUNoZWNrPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVucXVhbGlmaWVkRmllbGRBY2Nlc3M9aWdub3JlCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnVuc2FmZVR5cGVPcGVyYXRpb249d2FybmluZwotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWREZWNsYXJlZFRocm93bkV4Y2VwdGlvbj1pZ25vcmUKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkRGVjbGFyZWRUaHJvd25FeGNlcHRpb25XaGVuT3ZlcnJpZGluZz1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRJbXBvcnQ9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTGFiZWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkTG9jYWw9ZXJyb3IKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQYXJhbWV0ZXJXaGVuSW1wbGVtZW50aW5nQWJzdHJhY3Q9ZGlzYWJsZWQKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnByb2JsZW0udW51c2VkUGFyYW1ldGVyV2hlbk92ZXJyaWRpbmdDb25jcmV0ZT1kaXNhYmxlZAotb3JnLmVjbGlwc2UuamR0LmNvcmUuY29tcGlsZXIucHJvYmxlbS51bnVzZWRQcml2YXRlTWVtYmVyPWVycm9yCi1vcmcuZWNsaXBzZS5qZHQuY29yZS5jb21waWxlci5wcm9ibGVtLnZhcmFyZ3NBcmd1bWVudE5lZWRDYXN0PXdhcm5pbmcKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmNvbXBpbGVyLnNvdXJjZT0xLjMKLW9yZy5lY2xpcHNlLmpkdC5jb3JlLmluY29tcGF0aWJsZUpES0xldmVsPWlnbm9yZQotb3JnLmVjbGlwc2UuamR0LmNvcmUuaW5jb21wbGV0ZUNsYXNzcGF0aD1lcnJvcgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5qZHQudWkucHJlZnMgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzAxYzdhZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmpkdC51aS5wcmVmcworKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotI01vbiBBcHIgMTcgMDE6NDg6MzkgRURUIDIwMDYKLWVjbGlwc2UucHJlZmVyZW5jZXMudmVyc2lvbj0xCi1pbnRlcm5hbC5kZWZhdWx0LmNvbXBsaWFuY2U9ZGVmYXVsdAotb3JnLmVjbGlwc2UuamR0LnVpLnRleHQuY3VzdG9tX2NvZGVfdGVtcGxhdGVzPTw/eG1sIHZlcnNpb25cPSIxLjAiIGVuY29kaW5nXD0iVVRGLTgiPz5cclxuPHRlbXBsYXRlcy8+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5sdGsuY29yZS5yZWZhY3RvcmluZy5wcmVmcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU5MzY4Yy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvLnNldHRpbmdzL29yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLnByZWZzCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi0jVHVlIEFwciAwNCAwMzozNjozMiBFRFQgMjAwNgotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKLW9yZy5lY2xpcHNlLmx0ay5jb3JlLnJlZmFjdG9yaW5nLmVuYWJsZS5wcm9qZWN0LnJlZmFjdG9yaW5nLmhpc3Rvcnk9ZmFsc2UKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy8uc2V0dGluZ3Mvb3JnLmVjbGlwc2UucGRlLnByZWZzIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZjNTIyYmIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLy5zZXR0aW5ncy9vcmcuZWNsaXBzZS5wZGUucHJlZnMKKysrIC9kZXYvbnVsbApAQCAtMSwxNiArMCwwIEBACi0jTW9uIEFwciAxNyAwMjowMTozMyBFRFQgMjAwNgotY29tcGlsZXJzLmluY29tcGF0aWJsZS1lbnZpcm9ubWVudD0wCi1jb21waWxlcnMucC5idWlsZD0wCi1jb21waWxlcnMucC5kZXByZWNhdGVkPTEKLWNvbXBpbGVycy5wLmlsbGVnYWwtYXR0LXZhbHVlPTAKLWNvbXBpbGVycy5wLm5vLXJlcXVpcmVkLWF0dD0wCi1jb21waWxlcnMucC5ub3QtZXh0ZXJuYWxpemVkLWF0dD0wCi1jb21waWxlcnMucC51bmtub3duLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMucC51bmtub3duLWNsYXNzPTAKLWNvbXBpbGVycy5wLnVua25vd24tZWxlbWVudD0wCi1jb21waWxlcnMucC51bmtub3duLXJlc291cmNlPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtZXgtcG9pbnRzPTAKLWNvbXBpbGVycy5wLnVucmVzb2x2ZWQtaW1wb3J0PTAKLWNvbXBpbGVycy5wLnVudXNlZC1lbGVtZW50LW9yLWF0dHJpYnV0ZT0wCi1jb21waWxlcnMudXNlLXByb2plY3Q9dHJ1ZQotZWNsaXBzZS5wcmVmZXJlbmNlcy52ZXJzaW9uPTEKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRiBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9NRVRBLUlORi9NQU5JRkVTVC5NRgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzE3NDQ1NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvTUVUQS1JTkYvTUFOSUZFU1QuTUYKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi1NYW5pZmVzdC1WZXJzaW9uOiAxLjAKLUJ1bmRsZS1NYW5pZmVzdFZlcnNpb246IDIKLUJ1bmRsZS1OYW1lOiAlQnVuZGxlLU5hbWUuMAotQnVuZGxlLVN5bWJvbGljTmFtZTogb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzCi1CdW5kbGUtVmVyc2lvbjogMS4wLjIwMS5xdWFsaWZpZXIKLUJ1bmRsZS1DbGFzc1BhdGg6IHZhbGlkYXRleHNkdGVzdHMuamFyCi1CdW5kbGUtQWN0aXZhdG9yOiBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luCi1CdW5kbGUtVmVuZG9yOiAlQnVuZGxlLVZlbmRvci4wCi1CdW5kbGUtTG9jYWxpemF0aW9uOiBwbHVnaW4KLVJlcXVpcmUtQnVuZGxlOiBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcywKLSBvcmcuanVuaXQ7YnVuZGxlLXZlcnNpb249IlszLjguMCw0LjAuMCkiLAotIG9yZy5lY2xpcHNlLndzdC54bWwuY29yZSwKLSBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLAotIG9yZy5lY2xpcHNlLndzdC52YWxpZGF0aW9uLAotIG9yZy5lY2xpcHNlLndzdC5jb21tb24udXJpcmVzb2x2ZXIKLUVjbGlwc2UtTGF6eVN0YXJ0OiB0cnVlCi1FeHBvcnQtUGFja2FnZTogb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb247eC1pbnRlcm5hbDo9dHJ1ZSwKLSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlO3gtaW50ZXJuYWw6PXRydWUsCi0gb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsO3gtaW50ZXJuYWw6PXRydWUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9hYm91dC5odG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRlYzU5ODkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL2Fib3V0Lmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi08IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wLy9FTiI+Ci08SFRNTD4KLQotPGhlYWQ+Ci08dGl0bGU+QWJvdXQ8L3RpdGxlPgotPG1ldGEgaHR0cC1lcXVpdj1Db250ZW50LVR5cGUgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiPgotPC9oZWFkPgotCi08Qk9EWSBsYW5nPSJFTi1VUyI+Ci0KLTxIMz5BYm91dCBUaGlzIENvbnRlbnQ8L0gzPgotCi08UD5NYXkgMiwgMjAwNjwvUD4KLQotPEgzPkxpY2Vuc2U8L0gzPgotCi08UD5UaGUgRWNsaXBzZSBGb3VuZGF0aW9uIG1ha2VzIGF2YWlsYWJsZSBhbGwgY29udGVudCBpbiB0aGlzIHBsdWctaW4gCi0oIkNvbnRlbnQiKS4gVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQgYmVsb3csIHRoZSBDb250ZW50IGlzIHByb3ZpZGVkIHRvIHlvdSAKLXVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMCAKLSgiRVBMIikuIEEgY29weSBvZiB0aGUgRVBMIGlzIGF2YWlsYWJsZSBhdAotPEEgaHJlZj0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9vcmcvZG9jdW1lbnRzL2VwbC12MTAucGhwIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnL29yZy9kb2N1bWVudHMvZXBsLXYxMC5waHA8L0E+LiAKLUZvciBwdXJwb3NlcyBvZiB0aGUgRVBMLCAiUHJvZ3JhbSIgd2lsbCBtZWFuIHRoZSBDb250ZW50LjwvUD4KLQotPFA+SWYgeW91IGRpZCBub3QgcmVjZWl2ZSB0aGlzIENvbnRlbnQgZGlyZWN0bHkgZnJvbSB0aGUgRWNsaXBzZSBGb3VuZGF0aW9uLCB0aGUgCi1Db250ZW50IGlzIGJlaW5nIHJlZGlzdHJpYnV0ZWQgYnkgYW5vdGhlciBwYXJ0eSAoIlJlZGlzdHJpYnV0b3IiKSBhbmQgZGlmZmVyZW50IAotdGVybXMgYW5kIGNvbmRpdGlvbnMgbWF5IGFwcGx5IHRvIHlvdXIgdXNlIG9mIGFueSBvYmplY3QgY29kZSBpbiB0aGUgQ29udGVudC4gCi1DaGVjayB0aGUgUmVkaXN0cmlidXRvcpJzIGxpY2Vuc2UgdGhhdCB3YXMgcHJvdmlkZWQgd2l0aCB0aGUgQ29udGVudC4gSWYgbm8gc3VjaCAKLWxpY2Vuc2UgZXhpc3RzLCBjb250YWN0IHRoZSBSZWRpc3RyaWJ1dG9yLiBVbmxlc3Mgb3RoZXJ3aXNlIGluZGljYXRlZCBiZWxvdywgdGhlIAotdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVQTCBzdGlsbCBhcHBseSB0byBhbnkgc291cmNlIGNvZGUgaW4gdGhlIENvbnRlbnQgCi1hbmQgc3VjaCBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQgYXQKLTxBIGhyZWY9Imh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvIj5odHRwOi8vd3d3LmVjbGlwc2Uub3JnLzwvQT4uPC9QPgotCi08L0JPRFk+Ci08L0hUTUw+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvYnVpbGQucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjRiZWQwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9idWlsZC5wcm9wZXJ0aWVzCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1iaW4uaW5jbHVkZXMgPSB2YWxpZGF0ZXhzZHRlc3RzLmphcixcCi0gICAgICAgICAgICAgICB0ZXN0LnhtbCxcCi0gICAgICAgICAgICAgICB0ZXN0cmVzb3VyY2VzLyxcCi0gICAgICAgICAgICAgICBNRVRBLUlORi8sXAotICAgICAgICAgICAgICAgYWJvdXQuaHRtbAotc291cmNlLnZhbGlkYXRleHNkdGVzdHMuamFyID0gc3JjLyAKLQotYmluLmV4Y2x1ZGVzID0gdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlLFwKLSAgICAgICAgICAgICAgIHRlc3RyZXNvdXJjZXMvZ2VuZXJhdGVkUmVzdWx0cy8KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9wbHVnaW4ucHJvcGVydGllcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVhNTQwZC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvcGx1Z2luLnByb3BlcnRpZXMKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLSMgcHJvcGVydGllcyBmaWxlIGZvciBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMKLUJ1bmRsZS1WZW5kb3IuMCA9IEVjbGlwc2UKLUJ1bmRsZS1OYW1lLjAgPSBYU0QgVmFsaWRhdGlvbiBUZXN0cyBQbHVnLWluClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5ODNkNzkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9YU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvblRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDExOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotCi0vKioKLSAqIFRlc3QgdGhlIFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25UZXN0IGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbjsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKSB0aHJvd3MgRXhjZXB0aW9uIAotICB7Ci0Jc3VwZXIuc2V0VXAoKTsKLQljb25maWd1cmF0aW9uID0gbmV3IFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gIH0KLQotCi0gIHByb3RlY3RlZCB2b2lkIHRlYXJEb3duKCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCWNvbmZpZ3VyYXRpb24gPSBudWxsOwotCXN1cGVyLnRlYXJEb3duKCk7Ci0gIH0KLQotCi0gIC8qKgotICAgKiBUZXN0IHRoZSBkZWZhdWx0IHNldHRpbmcgb2YgdGhlIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyBmZWF0dXJlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldEhvbm91ckFsbFNjaGVtYUxvY2F0aW9uc0ZlYXR1cmVEZWZhdWx0KCkKLSAgewotCXRyeQotCXsKLQkJYXNzZXJ0RmFsc2UoIlRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSBpcyBub3Qgc2V0IGJ5IGRlZmF1bHQgdG8gZmFsc2UuIiwgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUykpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gc2V0IHJlYWQgdGhlIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyBmZWF0dXJlOiAiICsgZSk7Ci0JfQotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCBzZXR0aW5nIHRoZSBIT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMgZmVhdHVyZSB0byB0cnVlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldEhvbm91ckFsbFNjaGVtYUxvY2F0aW9uc0ZlYXR1cmVUcnVlKCkKLSAgewotCXRyeQotCXsKLQkgIGNvbmZpZ3VyYXRpb24uc2V0RmVhdHVyZShYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbi5IT05PVVJfQUxMX1NDSEVNQV9MT0NBVElPTlMsIHRydWUpOwotCSAgYXNzZXJ0VHJ1ZSgiVGhlIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyBmZWF0dXJlIGlzIG5vdCBzZXQgdG8gdHJ1ZS4iLCBjb25maWd1cmF0aW9uLmdldEZlYXR1cmUoWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TKSk7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIGZhaWwoIlVuYWJsZSB0byBzZXQgSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TIHRvIHRydWU6ICIgKyBlKTsKLQl9Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHNldHRpbmcgdGhlIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyBmZWF0dXJlIHRvIGZhbHNlLgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldEhvbm91ckFsbFNjaGVtYUxvY2F0aW9uc0ZlYXR1cmVGYWxzZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24uSE9OT1VSX0FMTF9TQ0hFTUFfTE9DQVRJT05TLCBmYWxzZSk7Ci0JICBhc3NlcnRGYWxzZSgiVGhlIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyBmZWF0dXJlIGlzIG5vdCBzZXQgdG8gZmFsc2UuIiwgY29uZmlndXJhdGlvbi5nZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUykpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gc2V0IEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyB0byBmYWxzZTogIiArIGUpOwotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3Qgc2V0dGluZyBhIGZlYXR1cmUgdGhhdCBkb2Vzbid0IGV4aXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNldE5vdEV4aXN0YW50RmVhdHVyZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLnNldEZlYXR1cmUoIk5PTl9FWElTVEFOVF9GRUFUVVJFIiwgZmFsc2UpOwotCSAgZmFpbCgiU2V0dGluZyBhIG5vbiBleGlzdGFudCBmZWF0dXJlIGRpZCBub3QgcHJvZHVjZSBhbiBleGNlcHRpb24uIik7Ci0JfQotCWNhdGNoKEV4Y2VwdGlvbiBlKQotCXsKLQkgIC8vIFRoZSB0ZXN0IHN1Y2NlZWRzIGlmIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LgotCX0KLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgZ2V0dGluZyBhIGZlYXR1cmUgdGhhdCBkb2Vzbid0IGV4aXN0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEdldE5vdEV4aXN0YW50RmVhdHVyZSgpCi0gIHsKLQl0cnkKLQl7Ci0JICBjb25maWd1cmF0aW9uLmdldEZlYXR1cmUoIk5PTl9FWElTVEFOVF9GRUFUVVJFIik7Ci0JICBmYWlsKCJHZXR0aW5nIGEgbm9uIGV4aXN0YW50IGZlYXR1cmUgZGlkIG5vdCBwcm9kdWNlIGFuIGV4Y2VwdGlvbi4iKTsKLQl9Ci0JY2F0Y2goRXhjZXB0aW9uIGUpCi0JewotCSAgLy8gVGhlIHRlc3Qgc3VjY2VlZHMgaWYgdGhlIGV4Y2VwdGlvbiBpcyBjYXVnaHQuCi0JfQotICB9Ci0gIAotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvclRlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkyNDQ2NTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1ZhbGlkYXRvclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDE2MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uSW5wdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5uZXQuVVJMOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5jb3JlLk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5OZXN0ZWRWYWxpZGF0b3JDb250ZXh0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbC5YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW47Ci0KLS8qKgotICogQSB0ZXN0IGNsYXNzIGZvciB0aGUgVmFsaWRhdG9yIGNsYXNzLgotICovCi1wdWJsaWMgY2xhc3MgVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBWYWxpZGF0b3JXcmFwcGVyIHZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3JXcmFwcGVyKCk7Ci0JICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoVmFsaWRhdG9yVGVzdC5jbGFzcyk7Ci0gIH0KLQkgIAotICAvKioKLSAgICogVGVzdCB0aGUgYWRkSW5mb1RvTWVzc2FnZSBtZXRob2QuIFRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHBlcmZvcm1lZDo8YnIvPgotICAgKiAxLiBXaGVuIHRoZSB2YWxpZGF0aW9uIG1lc3NhZ2UgY29udGFpbnMgYSBudWxsIGtleSBub3RoaW5nIGlzIGFkZGVkIHRvIHRoZSBtZXNzYWdlLjxici8+Ci0gICAqIDIuIFdoZW4gdGhlIG1lc3NhZ2UgY29udGFpbnMgdGhlIGtleSAiRU5USVJFX0VMRU1FTlQiIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIGFyZSBhZGRlZAotICAgKiB0byB0aGUgbWV0aG9kIGFuZCB0aGUgU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgaXMgbnVsbC48YnIvPgotICAgKiAzLiBXaGVuIHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSBrZXkgIkVudGl0eU5vdERlY2xhcmVkIiB0aGUgdGhyZWUgYXR0cmlidXRlcyBhcmUgc2V0LgotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFkZEluZm9Ub01lc3NhZ2UoKQotICB7Ci0gICAgLy8gVGhlc2Ugc3RyaW5ncyBhcmUgY29tbW9uIGFkZGl0aW9uIGluZm9ybWF0aW9uIHR5cGVzLgotCVN0cmluZyBDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSA9ICJjb2x1bW5OdW1iZXIiOyAvLyROT04tTkxTLTEkCi0JU3RyaW5nIFNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgPSAic3F1aWdnbGVTZWxlY3Rpb25TdHJhdGVneSI7IC8vJE5PTi1OTFMtMSQKLQlTdHJpbmcgU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgPSAic3F1aWdnbGVOYW1lT3JWYWx1ZSI7IC8vJE5PTi1OTFMtMSQKLQkKLQkvLyBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiB0aGUgYXR0cmlidXRlcyB3aGVuIHRoZSBtZXRob2QgaXMgY2FsbGVkCi0JLy8gd2l0aCBhIG51bGwga2V5LgotCVZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlID0gbmV3IFZhbGlkYXRpb25NZXNzYWdlKCIiLCAxLCAxLCAiIik7Ci0JTWVzc2FnZSBtZXNzYWdlID0gbmV3IE1lc3NhZ2UoKTsKLQl2YWxpZGF0b3IuYWRkSW5mb1RvTWVzc2FnZSh2YWxpZGF0aW9uTWVzc2FnZSwgbWVzc2FnZSk7Ci0JYXNzZXJ0TnVsbCgiQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgd2FzIG5vdCBudWxsIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggYSBudWxsIGtleS4gQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgPSAiICsgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpLCBtZXNzYWdlLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSkpOwotCWFzc2VydE51bGwoIlNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgd2FzIG5vdCBudWxsIGZvciBhIFZhbGlkYXRpb25NZXNzYWdlIHdpdGggYSBudWxsIGtleS4gU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSwgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSkpOwotCWFzc2VydE51bGwoIlNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFIHdhcyBub3QgbnVsbCBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIGEgbnVsbCBrZXkuIFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSwgbWVzc2FnZS5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpKTsKLQkKLQkvLyBUZXN0IHRoYXQgdGhlIG1lc3NhZ2UgY29udGFpbnMgdGhlIHRocmVlIGF0dHJpYnV0ZXMgd2hlbiB0aGUga2V5IGlzIHNldCB0byAiczRzLWVsdC1jaGFyYWN0ZXIiLgotCVZhbGlkYXRpb25NZXNzYWdlIHZhbGlkYXRpb25NZXNzYWdlMiA9IG5ldyBWYWxpZGF0aW9uTWVzc2FnZSgiIiwgMSwgMSwgIiIsICJzNHMtZWx0LWNoYXJhY3RlciIsIG51bGwpOwotCU1lc3NhZ2UgbWVzc2FnZTIgPSBuZXcgTWVzc2FnZSgpOwotCXZhbGlkYXRvci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlMiwgbWVzc2FnZTIpOwotCWFzc2VydEVxdWFscygiQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgd2FzIGNvcnJlY3RseSBzZXQgdG8gMSBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIHRoZSBrZXkgczRzLWVsdC1jaGFyYWN0ZXIuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSksIG5ldyBJbnRlZ2VyKDEpLCBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgd2FzIG5vdCBURVhULiBTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UyLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSwgIlRFWFQiLCBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSkpOwotCWFzc2VydEVxdWFscygiU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUgd2FzIG5vdCBhbiBlbXB0eSBzdHJpbmcgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IHM0cy1lbHQtY2hhcmFjdGVyLiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMi5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpLCAiIiwgbWVzc2FnZTIuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0JCi0gICAgLy8gVGVzdCB0aGF0IHRoZSBtZXNzYWdlIGNvbnRhaW5zIHRoZSB0aHJlZSBhdHRyaWJ1dGVzIHdoZW4gdGhlIGtleSBpcyBzZXQgdG8gInNyYy1yZXNvbHZlIi4KLQlWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZTMgPSBuZXcgVmFsaWRhdGlvbk1lc3NhZ2UoIidNeU5hbWUnIiwgMSwgMSwgIiIsICJzcmMtcmVzb2x2ZSIsIG51bGwpOwotCU1lc3NhZ2UgbWVzc2FnZTMgPSBuZXcgTWVzc2FnZSgpOwotCXZhbGlkYXRvci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlMywgbWVzc2FnZTMpOwotCWFzc2VydEVxdWFscygiQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUgd2FzIGNvcnJlY3RseSBzZXQgdG8gMSBmb3IgYSBWYWxpZGF0aW9uTWVzc2FnZSB3aXRoIHRoZSBrZXkgc3JjLXJlc29sdmUuIENPTFVNTl9OVU1CRVJfQVRUUklCVVRFID0gIiArIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShDT0xVTU5fTlVNQkVSX0FUVFJJQlVURSksIG5ldyBJbnRlZ2VyKDEpLCBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoQ09MVU1OX05VTUJFUl9BVFRSSUJVVEUpKTsKLQlhc3NlcnRFcXVhbHMoIlNRVUlHR0xFX1NFTEVDVElPTl9TVFJBVEVHWV9BVFRSSUJVVEUgd2FzIG5vdCBWQUxVRV9PRl9BVFRSSUJVVEVfV0lUSF9HSVZFTl9WQUxVRS4gU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfU0VMRUNUSU9OX1NUUkFURUdZX0FUVFJJQlVURSksICJWQUxVRV9PRl9BVFRSSUJVVEVfV0lUSF9HSVZFTl9WQUxVRSIsIG1lc3NhZ2UzLmdldEF0dHJpYnV0ZShTUVVJR0dMRV9TRUxFQ1RJT05fU1RSQVRFR1lfQVRUUklCVVRFKSk7Ci0JYXNzZXJ0RXF1YWxzKCJTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSB3YXMgbm90IHNldCB0byBNeU5hbWUgZm9yIGEgVmFsaWRhdGlvbk1lc3NhZ2Ugd2l0aCB0aGUga2V5IHNyYy1yZXNvbHZlLiBTUVVJR0dMRV9OQU1FX09SX1ZBTFVFX0FUVFJJQlVURSA9ICIgKyBtZXNzYWdlMy5nZXRBdHRyaWJ1dGUoU1FVSUdHTEVfTkFNRV9PUl9WQUxVRV9BVFRSSUJVVEUpLCAiTXlOYW1lIiwgbWVzc2FnZTMuZ2V0QXR0cmlidXRlKFNRVUlHR0xFX05BTUVfT1JfVkFMVUVfQVRUUklCVVRFKSk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IHRoZSB2YWxpZGF0ZSBtZXRob2QuIFRlc3RzIHRvIGJlIHBlcmZvcm1lZDo8YnIvPgotICAgKiAxLiBUZXN0IHRoYXQgdmFsaWRhdGluZyBhIHZhbGlkIGZpbGUgZnJvbSBhIFVSSSBvciBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0Ljxici8+Ci0gICAqIDIuIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGFuIGludmFsaWQgZmlsZSBmcm9tIGEgVVJJIG9yIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VmFsaWRhdGUoKQotICB7Ci0JdHJ5Ci0JewotCSAgLy8gVGVzdCB0aGF0IHZhbGlkYXRpbmcgYSB2YWxpZCBmaWxlIGZyb20gYSBVUkkgYW5kIGFuIGlucHV0IHN0cmVhbSBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHQuCi0JICBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEggPSBYU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotCSAgU3RyaW5nIHVyaSA9ICJmaWxlOi8vLyIgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArICJ0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhzZCI7Ci0JICBWYWxpZGF0aW9uUmVwb3J0IHJlcG9ydDEgPSB2YWxpZGF0b3IudmFsaWRhdGUodXJpLCBudWxsLCBuZXcgTmVzdGVkVmFsaWRhdG9yQ29udGV4dCgpKTsKLQkgIFZhbGlkYXRpb25SZXBvcnQgcmVwb3J0MiA9IG51bGw7Ci0JICBJbnB1dFN0cmVhbSBpcyA9IG51bGw7Ci0JICB0cnkKLQkgIHsKLQkgICAgaXMgPSBuZXcgVVJMKHVyaSkub3BlblN0cmVhbSgpOwotCSAgICByZXBvcnQyID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgaXMsIG5ldyBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0KCkpOwotCSAgfQotCSAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JICB7Ci0JCWZhaWwoIkEgcHJvYmxlbSBvY2N1cnJlZCB3aGlsZSB2YWxpZGF0aW5nIGEgdmFsaWQgZmlsZSB3aXRoIGFuIGlucHV0c3RyZWFtOiAiICsgZSk7Ci0JICB9Ci0JICBmaW5hbGx5Ci0JICB7Ci0JCWlmKGlzICE9IG51bGwpCi0JCXsKLQkJICB0cnkKLQkJICB7Ci0JCSAgICBpcy5jbG9zZSgpOwotCQkgIH0KLQkJICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCS8vIERvIG5vdGhpbmcuCi0JCSAgfQotCQl9Ci0JICB9Ci0JICBhc3NlcnRUcnVlKCJWYWxpZGF0aW9uIHVzaW5nIGEgVVJJIGRpZCBub3QgcHJvZHVjdCBhIHZhbGlkIHZhbGlkYXRpb24gcmVzdWx0LiIsIHJlcG9ydDEuaXNWYWxpZCgpKTsKLQkgIGFzc2VydEVxdWFscygiVmFsaWRhdGlvbiB1c2luZyBVUkkgYW5kIHVzaW5nIGlucHV0c3RyZWFtIG9mIHRoZSBzYW1lIGZpbGUgcHJvZHVjZXMgZGlmZmVyZW50IG51bWJlcnMgb2YgZXJyb3JzLiIsIHJlcG9ydDEuZ2V0VmFsaWRhdGlvbk1lc3NhZ2VzKCkubGVuZ3RoLCByZXBvcnQyLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCk7Ci0JICAKLSAgICAgIC8vIFRlc3QgdGhhdCB2YWxpZGF0aW5nIGFuIGludmFsaWQgZmlsZSBmcm9tIGEgVVJJIGFuZCBhbiBpbnB1dCBzdHJlYW0gcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0LgotCSAgdXJpID0gImZpbGU6Ly8vIiArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgInRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QiOwotCSAgcmVwb3J0MSA9IHZhbGlkYXRvci52YWxpZGF0ZSh1cmksIG51bGwsIG5ldyBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0KCkpOwotCSAgcmVwb3J0MiA9IG51bGw7Ci0JICBpcyA9IG51bGw7Ci0JICB0cnkKLQkgIHsKLQkgICAgaXMgPSBuZXcgVVJMKHVyaSkub3BlblN0cmVhbSgpOwotCSAgICByZXBvcnQyID0gdmFsaWRhdG9yLnZhbGlkYXRlKHVyaSwgaXMsIG5ldyBOZXN0ZWRWYWxpZGF0b3JDb250ZXh0KCkpOwotCSAgfQotCSAgY2F0Y2goRXhjZXB0aW9uIGUpCi0JICB7Ci0JCWZhaWwoIkEgcHJvYmxlbSBvY2N1cnJlZCB3aGlsZSB2YWxpZGF0aW5nIGFuIGludmFsaWQgZmlsZSB3aXRoIGFuIGlucHV0c3RyZWFtOiAiICsgZSk7Ci0JICB9Ci0JICBmaW5hbGx5Ci0JICB7Ci0JCWlmKGlzICE9IG51bGwpCi0JCXsKLQkJICB0cnkKLQkJICB7Ci0JCSAgICBpcy5jbG9zZSgpOwotCQkgIH0KLQkJICBjYXRjaChJT0V4Y2VwdGlvbiBlKQotCQkgIHsKLQkJCS8vIERvIG5vdGhpbmcuCi0JCSAgfQotCQl9Ci0JICB9Ci0JICBhc3NlcnRGYWxzZSgiVmFsaWRhdGlvbiB1c2luZyBhIFVSSSBkaWQgbm90IHByb2R1Y3QgYW4gaW52YWxpZCB2YWxpZGF0aW9uIHJlc3VsdC4iLCByZXBvcnQxLmlzVmFsaWQoKSk7Ci0JICBhc3NlcnRFcXVhbHMoIlZhbGlkYXRpb24gdXNpbmcgVVJJIGFuZCB1c2luZyBpbnB1dHN0cmVhbSBvZiB0aGUgc2FtZSBmaWxlIHByb2R1Y2VzIGRpZmZlcmVudCBudW1iZXJzIG9mIGVycm9ycy4iLCByZXBvcnQxLmdldFZhbGlkYXRpb25NZXNzYWdlcygpLmxlbmd0aCwgcmVwb3J0Mi5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKS5sZW5ndGgpOwotCX0KLQljYXRjaChFeGNlcHRpb24gZSkKLQl7Ci0JICBmYWlsKCJVbmFibGUgdG8gbG9jYXRlIHBsdWctaW4gbG9jYXRpb246ICIgKyBlKTsKLQl9Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvVmFsaWRhdG9yV3JhcHBlci5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ODIyMzkyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9WYWxpZGF0b3JXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci0KLS8qKgotICogQSB3cmFwcGVyIGNsYXNzIHRvIGFsbG93IGZvciB0ZXN0aW5nIHRoZSBWYWxpZGF0b3IgY2xhc3MuCi0gKi8KLXB1YmxpYyBjbGFzcyBWYWxpZGF0b3JXcmFwcGVyIGV4dGVuZHMgVmFsaWRhdG9yIAotewotICAvKiAobm9uLUphdmFkb2MpCi0gICAqIEBzZWUgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5WYWxpZGF0b3IjYWRkSW5mb1RvTWVzc2FnZShvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5jb3JlLlZhbGlkYXRpb25NZXNzYWdlLCBvcmcuZWNsaXBzZS53c3QudmFsaWRhdGlvbi5pbnRlcm5hbC5wcm92aXNpb25hbC5jb3JlLklNZXNzYWdlKQotICAgKi8KLSAgcHVibGljIHZvaWQgYWRkSW5mb1RvTWVzc2FnZShWYWxpZGF0aW9uTWVzc2FnZSB2YWxpZGF0aW9uTWVzc2FnZSwgSU1lc3NhZ2UgbWVzc2FnZSkgCi0gIHsKLQlzdXBlci5hZGRJbmZvVG9NZXNzYWdlKHZhbGlkYXRpb25NZXNzYWdlLCBtZXNzYWdlKTsKLSAgfQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRE1lc3NhZ2VJbmZvSGVscGVyVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRE1lc3NhZ2VJbmZvSGVscGVyVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzZlYjFhLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RNZXNzYWdlSW5mb0hlbHBlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDgyICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZTsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZTsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi0vKioKLSAqIFRlc3QgY2FzZSB0byB0ZXN0IHRoZSBYU0RNZXNzYWdlSW5mb0hlbHBlciBjbGFzcy4KLSAqLwotcHVibGljIGNsYXNzIFhTRE1lc3NhZ2VJbmZvSGVscGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICBwcml2YXRlIFhTRE1lc3NhZ2VJbmZvSGVscGVyV3JhcHBlciBoZWxwZXIgPSBuZXcgWFNETWVzc2FnZUluZm9IZWxwZXJXcmFwcGVyKCk7Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShYU0RNZXNzYWdlSW5mb0hlbHBlclRlc3QuY2xhc3MpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGF0IHRoZSBjcmVhdGVNZXNzYWdlSW5mbyBtZXRob2QgcmV0dXJucyB7IiIsICIifSB3aGVuCi0gICAqIGdpdmVuIGEgbm9uLWV4aXN0YW50IGtleSBhbmQgbnVsbCBtZXNzYWdlIGFyZ3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROb3RFeGlzdGFudEtleUFuZE51bGxNZXNzYWdlQXJndW1lbnRzKCkKLSAgewotCVN0cmluZ1tdIG1lc3NhZ2VJbmZvID0gaGVscGVyLmNyZWF0ZU1lc3NhZ2VJbmZvKCJOT05fRVhJU1RBTlRfS0VZIiwgbnVsbCk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgc2VsZWN0aW9uIHN0cmF0ZWd5IHJldHVybmVkIHdhcyBub3QgYW4gZW1wdHkgc3RyaW5nLiIsICIiLCBtZXNzYWdlSW5mb1swXSk7Ci0JYXNzZXJ0RXF1YWxzKCJUaGUgbmFtZU9yVmFsdWUgcmV0dXJuZWQgd2FzIG5vdCBhbiBlbXB0eSBzdHJpbmcuIiwgIiIsIG1lc3NhZ2VJbmZvWzFdKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdGhhdCB0aGUgY3JlYXRlTWVzc2FnZUluZm8gbWV0aG9kIHJldHVybnMgeyIiLCAiIn0gd2hlbgotICAgKiBnaXZlbiBhIG5vbi1leGlzdGFudCBrZXkgYW4gbnVsbCBtZXNzYWdlIGFyZ3VtZW50cy4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3ROdWxsS2V5QW5kTWVzc2FnZUFyZ3VtZW50cygpCi0gIHsKLQlTdHJpbmdbXSBtZXNzYWdlSW5mbyA9IGhlbHBlci5jcmVhdGVNZXNzYWdlSW5mbyhudWxsLCBudWxsKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBzZWxlY3Rpb24gc3RyYXRlZ3kgcmV0dXJuZWQgd2FzIG5vdCBhbiBlbXB0eSBzdHJpbmcuIiwgIiIsIG1lc3NhZ2VJbmZvWzBdKTsKLQlhc3NlcnRFcXVhbHMoIlRoZSBuYW1lT3JWYWx1ZSByZXR1cm5lZCB3YXMgbm90IGFuIGVtcHR5IHN0cmluZy4iLCAiIiwgbWVzc2FnZUluZm9bMV0pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCB0aGUgbWV0aG9kIGdldEZpcnN0U3RyaW5nQmV0d2VlblNpbmdsZVF1b3Rlcy4gVGhlcmUgYXJlIGEgZmV3IHRlc3RzOgotICAgKiAxLiBUZXN0IHRoYXQgYSBzaW1wbGUgc3RyaW5nIHdpdGggc2luZ2xlIHF1b3RlcyAnbmFtZScgcmV0dXJucyBuYW1lLgotICAgKiAyLiBUZXN0IHRoYXQgYSBzdHJpbmcgd2l0aCBubyBzaW5nbGUgcXVvdGVzIHJldHVybnMgbnVsbC4KLSAgICogMy4gVGVzdCB0aGF0IGEgc3RyaW5nIHdpdGggYSBzaW5nbGUgc2luZ2xlIHF1b3RlICduYW1lIHJldHVybnMgbnVsbC4KLSAgICogNC4gVGVzdCB0aGF0IGEgc3RyaW5nIHdpdGggMyBzaW5nbGUgcXVvdGVzICduYW1lJ25hbWUyJyByZXR1cm5zIG5hbWUuCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0R2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKCkKLSAgewotCS8vIDEuIFRlc3QgdGhhdCBhIHNpbXBsZSBzdHJpbmcgd2l0aCBzaW5nbGUgcXVvdGVzICduYW1lJyByZXR1cm5zIG5hbWUuCi0JU3RyaW5nIHJlc3VsdCA9IGhlbHBlci5nZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMoIiduYW1lJyIpOwotCWFzc2VydEVxdWFscygiVGhlIHJldHVybmVkIHN0cmluZyB3YXMgbm90IFwibmFtZVwiIGZvciB0aGUgc3RyaW5nIFwiJ25hbWUnXCIuIiwgIm5hbWUiLCByZXN1bHQpOwotCQotCS8vIDIuIFRlc3QgdGhhdCBhIHN0cmluZyB3aXRoIG5vIHNpbmdsZSBxdW90ZXMgcmV0dXJucyBudWxsLgotCXJlc3VsdCA9IGhlbHBlci5nZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMoIm5hbWUiKTsKLQlhc3NlcnROdWxsKCJUaGUgcmV0dXJuZWQgc3RyaW5nIHdhcyBub3QgbnVsbCBmb3IgdGhlIHN0cmluZyBcIm5hbWVcIiB3aXRoIG5vIHNpbmdsZSBxdW90ZXMuIiwgcmVzdWx0KTsKLQkKLQkvLyAzLiBUZXN0IHRoYXQgYSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBzaW5nbGUgcXVvdGUgJ25hbWUgcmV0dXJucyBudWxsLgotCXJlc3VsdCA9IGhlbHBlci5nZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMoIiduYW1lIik7Ci0JYXNzZXJ0TnVsbCgiVGhlIHJldHVybmVkIHN0cmluZyB3YXMgbm90IG51bGwgZm9yIHRoZSBzdHJpbmcgXCInbmFtZVwiIHdpdGggb25lIHNpbmdsZSBxdW90ZS4iLCByZXN1bHQpOwotCQotCS8vIDQuIFRlc3QgdGhhdCBhIHN0cmluZyB3aXRoIDMgc2luZ2xlIHF1b3RlcyAnbmFtZSduYW1lMicgcmV0dXJucyBuYW1lLgotCXJlc3VsdCA9IGhlbHBlci5nZXRGaXJzdFN0cmluZ0JldHdlZW5TaW5nbGVRdW90ZXMoIiduYW1lJ25hbWUyJyIpOwotCWFzc2VydEVxdWFscygiVGhlIHJldHVybmVkIHN0cmluZyB3YXMgbm90IFwibmFtZVwiIGZvciB0aGUgc3RyaW5nIFwiJ25hbWUnbmFtZTInXCIgd2l0aCAzIHNpbmdsZSBxdW90ZXMuIiwgIm5hbWUiLCByZXN1bHQpOwotICB9Ci0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RNZXNzYWdlSW5mb0hlbHBlcldyYXBwZXIuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC9jb3JlL2ludGVybmFsL3ZhbGlkYXRpb24vZWNsaXBzZS9YU0RNZXNzYWdlSW5mb0hlbHBlcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ0Mjk2NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNETWVzc2FnZUluZm9IZWxwZXJXcmFwcGVyLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2U7Ci0KLS8qKgotICogQSB3cmFwcGVyIGNsYXNzIGZvciB0aGUgWFNETWVzc2FnZUluZm9IZWxwZXIgY2xhc3MgZm9yIHRlc3RpbmcuCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RNZXNzYWdlSW5mb0hlbHBlcldyYXBwZXIgZXh0ZW5kcyBYU0RNZXNzYWdlSW5mb0hlbHBlciAKLXsKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWFNETWVzc2FnZUluZm9IZWxwZXIjZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKGphdmEubGFuZy5TdHJpbmcpCi0gICAqLwotICBwdWJsaWMgU3RyaW5nIGdldEZpcnN0U3RyaW5nQmV0d2VlblNpbmdsZVF1b3RlcyhTdHJpbmcgcykgCi0gIHsKLQlyZXR1cm4gc3VwZXIuZ2V0Rmlyc3RTdHJpbmdCZXR3ZWVuU2luZ2xlUXVvdGVzKHMpOwotICB9Ci19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNEVmFsaWRhdG9yVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVhNzQ1OC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNEVmFsaWRhdG9yVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3Q7Ci1pbXBvcnQganVuaXQuZnJhbWV3b3JrLlRlc3RDYXNlOwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogVGVzdCB0aGUgRWNsaXBzZSBzcGVjaWZpYyBYU0QgdmFsaWRhdG9yLgotICovCi1wdWJsaWMgY2xhc3MgWFNEVmFsaWRhdG9yVGVzdCBleHRlbmRzIFRlc3RDYXNlIAotewotICAvKioKLSAgICogQ3JlYXRlIGEgdGVzdHMgc3VpdGUgZnJvbSB0aGlzIHRlc3QgY2xhc3MuCi0gICAqIAotICAgKiBAcmV0dXJuIEEgdGVzdCBzdWl0ZSBjb250YWluaW5nIHRoaXMgdGVzdCBjbGFzcy4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IFRlc3RTdWl0ZShYU0RWYWxpZGF0b3JUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgdG8gZW5zdXJlIHRoZSBVUkkgcmVzb2x2ZXIgaXMgbm90IG51bGwgaW4gdGhlIEVjbGlwc2UKLSAgICogc3BlY2lmaWMgWFNEIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVUklSZXNvbHZlcklzUmVnaXN0ZXJlZCgpCi0gIHsKLQlYU0RWYWxpZGF0b3JXcmFwcGVyIHZhbGlkYXRvciA9IG5ldyBYU0RWYWxpZGF0b3JXcmFwcGVyKCk7Ci0JYXNzZXJ0Tm90TnVsbCgiVGhlIFVSSSByZXNvbHZlciBpcyBudWxsLiIsIHZhbGlkYXRvci5nZXRVUklSZXNvbHZlcigpKTsKLSAgfQotCi19CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNEVmFsaWRhdG9yV3JhcHBlci5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL2NvcmUvaW50ZXJuYWwvdmFsaWRhdGlvbi9lY2xpcHNlL1hTRFZhbGlkYXRvcldyYXBwZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTE0N2VlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvY29yZS9pbnRlcm5hbC92YWxpZGF0aW9uL2VjbGlwc2UvWFNEVmFsaWRhdG9yV3JhcHBlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LmNvbW1vbi51cmlyZXNvbHZlci5pbnRlcm5hbC5wcm92aXNpb25hbC5VUklSZXNvbHZlcjsKLQotLyoqCi0gKiBXcmFwcGVyIGZvciB0aGUgRWNsaXBzZSBYU0QgdmFsaWRhdG9yIGNsYXNzIHRvIGFsbG93IGZvciB0ZXN0aW5nLgotICovCi1wdWJsaWMgY2xhc3MgWFNEVmFsaWRhdG9yV3JhcHBlciBleHRlbmRzIFhTRFZhbGlkYXRvciAKLXsKLSAgLyoqCi0gICAqIENvbnN0cnVjdG9yLgotICAgKi8KLSAgcHVibGljIFhTRFZhbGlkYXRvcldyYXBwZXIoKQotICB7Ci0Jc3VwZXIoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgVVJJIHJlc29sdmVyIHJlZ2lzdGVyZWQgb24gdGhlIFhNTCB2YWxpZGF0b3IuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoZSBVUkkgcmVzb2x2ZXIgcmVnaXN0ZXJlZCBvbiB0aGUgWE1MIHZhbGlkYXRvci4KLSAgICovCi0gIHB1YmxpYyBVUklSZXNvbHZlciBnZXRVUklSZXNvbHZlcigpCi0gIHsKLQlyZXR1cm4gdXJpcmVzb2x2ZXI7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFhTRFRlc3RzLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9BbGxYU0RUZXN0cy5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YmExZTYxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0FsbFhTRFRlc3RzLmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLQotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdDsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueHNkLmNvcmUuaW50ZXJuYWwudmFsaWRhdGlvbi5lY2xpcHNlLlZhbGlkYXRvclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5YU0RNZXNzYWdlSW5mb0hlbHBlclRlc3Q7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uZWNsaXBzZS5YU0RWYWxpZGF0b3JUZXN0OwotLyoqCi0gKiBUaGUgcm9vdCB0ZXN0IHN1aXRlIHRoYXQgY29udGFpbnMgYWxsIG90aGVyIFhTRCB2YWxpZGF0b3IgdGVzdCBzdWl0ZXMuCi0gKi8KLXB1YmxpYyBjbGFzcyBBbGxYU0RUZXN0cyBleHRlbmRzIGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGUKLXsKLSAgLyoqCi0gICAqIENyZWF0ZSB0aGlzIHRlc3Qgc3VpdGUuCi0gICAqIAotICAgKiBAcmV0dXJuIFRoaXMgdGVzdCBzdWl0ZS4KLSAgICovCi0gIHB1YmxpYyBzdGF0aWMgVGVzdCBzdWl0ZSgpCi0gIHsKLSAgICByZXR1cm4gbmV3IEFsbFhTRFRlc3RzKCk7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBDb25zdHJ1Y3RvcgotICAgKi8KLSAgcHVibGljIEFsbFhTRFRlc3RzKCkKLSAgewotICAgIHN1cGVyKCJBbGxYU0RUZXN0cyIpOwotICAgIGFkZFRlc3QoVmFsaWRhdG9yVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFhTRE1lc3NhZ2VJbmZvSGVscGVyVGVzdC5zdWl0ZSgpKTsKLSAgICBhZGRUZXN0KFhTRFZhbGlkYXRvclRlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChCdWdGaXhlc1Rlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdChQYXRoc1Rlc3Quc3VpdGUoKSk7Ci0gICAgYWRkVGVzdFN1aXRlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uVGVzdC5jbGFzcyk7Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9CYXNlVGVzdENhc2UuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTI4NDU1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0Jhc2VUZXN0Q2FzZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMzMzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotCi1pbXBvcnQgamF2YS5pby5CdWZmZXJlZFJlYWRlcjsKLWltcG9ydCBqYXZhLmlvLkRhdGFPdXRwdXRTdHJlYW07Ci1pbXBvcnQgamF2YS5pby5GaWxlOwotaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOwotaW1wb3J0IGphdmEuaW8uRmlsZU5vdEZvdW5kRXhjZXB0aW9uOwotaW1wb3J0IGphdmEuaW8uRmlsZU91dHB1dFN0cmVhbTsKLWltcG9ydCBqYXZhLmlvLkZpbGVSZWFkZXI7Ci1pbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKLWltcG9ydCBqYXZhLmlvLlJlYWRlcjsKLWltcG9ydCBqYXZhLnV0aWwuSXRlcmF0b3I7Ci1pbXBvcnQgamF2YS51dGlsLkxpc3Q7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2U7Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JRmlsZTsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdDsKLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJlc291cmNlcy5JUHJvamVjdERlc2NyaXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucmVzb3VyY2VzLklXb3Jrc3BhY2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5yZXNvdXJjZXMuUmVzb3VyY2VzUGx1Z2luOwotaW1wb3J0IG9yZy5lY2xpcHNlLmNvcmUucnVudGltZS5Db3JlRXhjZXB0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54bWwuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmNvcmUuVmFsaWRhdGlvbk1lc3NhZ2U7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uY29yZS5WYWxpZGF0aW9uUmVwb3J0OwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLlhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uOwotaW1wb3J0IG9yZy5lY2xpcHNlLndzdC54c2QuY29yZS5pbnRlcm5hbC52YWxpZGF0aW9uLmVjbGlwc2UuWFNEVmFsaWRhdG9yOwotCi0vKioKLSAqIEJhc2UgdGVzdCBjYXNlIGNsYXNzIHdoaWNoIHByb3ZpZGVzIG1ldGhvZHMgdG8gCi0gKiAtIGNyZWF0ZSBsb2dzCi0gKiAtIHJlYWQgZnJvbSBsb2dzCi0gKiAtIHJ1biBsb2cgY29tcGFyaXNvbiB0ZXN0cwotICovCi1wdWJsaWMgY2xhc3MgQmFzZVRlc3RDYXNlIGV4dGVuZHMgVGVzdENhc2UKLXsKLSAgcHJvdGVjdGVkIFN0cmluZyBGSUxFX1BST1RPQ09MID0gImZpbGU6Ly8vIjsgCi0gIHByb3RlY3RlZCBTdHJpbmcgUExVR0lOX0FCU09MVVRFX1BBVEg7Ci0gIHByb3RlY3RlZCBTdHJpbmcgU0FNUExFU19ESVIgPSAidGVzdHJlc291cmNlcy9zYW1wbGVzLyI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgR0VORVJBVEVEX1JFU1VMVFNfRElSID0gInRlc3RyZXNvdXJjZXMvZ2VuZXJhdGVkUmVzdWx0cy8iOwotICBwcm90ZWN0ZWQgU3RyaW5nIElERUFMX1JFU1VMVFNfRElSID0gInRlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzLyI7Ci0gIHByb3RlY3RlZCBTdHJpbmcgTE9HX0ZJTEVfTE9DQVRJT04gPSAicmVzdWx0cy5sb2ciOwotICBwcm90ZWN0ZWQgc3RhdGljIGZpbmFsIFN0cmluZyBQTFVHSU5fTkFNRSA9ICJvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMiOwotICBwcml2YXRlIFhTRFZhbGlkYXRvciB2YWxpZGF0b3IgPSBYU0RWYWxpZGF0b3IuZ2V0SW5zdGFuY2UoKTsKLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKQotICB7Ci0gICAgUExVR0lOX0FCU09MVVRFX1BBVEggPSBYU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4uZ2V0SW5zdGFsbFVSTCgpOwotICB9Ci0gIAotICAvKioKLSAgICogUnVuIGEgdmFsaWRhdG9yIHRlc3QuIFRoZSB0ZXN0IHdpbGwgcnVuIHRoZSB2YWxpZGF0b3IsIGxvZyB0aGUgcmVzdWx0cyBhbmQgY29tcGFyZSB0aGUgcmVzdWx0cwotICAgKiB3aXRoIHRoZSBpZGVhbCByZXN1bHRzLiBUaGUgdGVzdCB3aWxsIG9ubHkgcGFzcyBpZiB0aGUgdHdvIGxvZyBmaWxlcyBhcmUgdGhlIHNhbWUuCi0gICAqIAotICAgKiBAcGFyYW0gdGVzdGZpbGUgVGhlIGZpbGUgdG8gcnVuIHRoZSB2YWxpZGF0b3IgdGVzdCBvbi4KLSAgICogQHBhcmFtIGxvZ2xvY2F0aW9uIFRoZSBsb2NhdGlvbiB0byBjcmVhdGUgdGhlIGxvZyBmaWxlLgotICAgKiBAcGFyYW0gaWRlYWxsb2dsb2NhdGlvbiBUaGUgbG9jYXRpb24gb2YgdGhlIGlkZWFsIGxvZyBmaWxlLgotICAgKi8KLSAgcHVibGljIHZvaWQgcnVuVGVzdChTdHJpbmcgdGVzdGZpbGUsIFN0cmluZyBsb2dsb2NhdGlvbiwgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24pCi0gIHsKLQlydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbiwgbmV3IFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCkpOwotICB9Ci0gIC8qKgotICAgKiBSdW4gYSB2YWxpZGF0b3IgdGVzdC4gVGhlIHRlc3Qgd2lsbCBydW4gdGhlIHZhbGlkYXRvciwgbG9nIHRoZSByZXN1bHRzIGFuZCBjb21wYXJlIHRoZSByZXN1bHRzCi0gICAqIHdpdGggdGhlIGlkZWFsIHJlc3VsdHMuIFRoZSB0ZXN0IHdpbGwgb25seSBwYXNzIGlmIHRoZSB0d28gbG9nIGZpbGVzIGFyZSB0aGUgc2FtZS4KLSAgICogCi0gICAqIEBwYXJhbSB0ZXN0ZmlsZSAKLSAgICogCQlUaGUgZmlsZSB0byBydW4gdGhlIHZhbGlkYXRvciB0ZXN0IG9uLgotICAgKiBAcGFyYW0gbG9nbG9jYXRpb24gCi0gICAqIAkJVGhlIGxvY2F0aW9uIHRvIGNyZWF0ZSB0aGUgbG9nIGZpbGUuCi0gICAqIEBwYXJhbSBpZGVhbGxvZ2xvY2F0aW9uIAotICAgKiAJCVRoZSBsb2NhdGlvbiBvZiB0aGUgaWRlYWwgbG9nIGZpbGUuCi0gICAqIEBwYXJhbSBjb25maWd1cmF0aW9uIAotICAgKiAJCVRoZSBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBmb3IgdGhpcyB2YWxpZGF0aW9uIHRlc3QuCi0gICAqLwotICBwdWJsaWMgdm9pZCBydW5UZXN0KFN0cmluZyB0ZXN0ZmlsZSwgU3RyaW5nIGxvZ2xvY2F0aW9uLCBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiwgWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbikKLSAgewotICAgIFZhbGlkYXRpb25SZXBvcnQgdmFscmVwb3J0ID0gdmFsaWRhdG9yLnZhbGlkYXRlKHRlc3RmaWxlLCBudWxsLCBjb25maWd1cmF0aW9uKTsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBjcmVhdGVMb2cobG9nbG9jYXRpb24sIHZhbHJlcG9ydCk7Ci0gICAgICBTdHJpbmcgZ2VuZXJhdGVkTG9nID0gZ2V0U3RyaW5nRnJvbUZpbGUobG9nbG9jYXRpb24pOwotICAgICAgU3RyaW5nIGlkZWFsTG9nID0gZ2V0U3RyaW5nRnJvbUZpbGUoaWRlYWxsb2dsb2NhdGlvbik7Ci0gICAgICBhc3NlcnRFcXVhbHMoaWRlYWxMb2csIGdlbmVyYXRlZExvZyk7Ci0gICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpCi0gICAgewotICAgICAgZmFpbCgiQ291bGQgbm90IGNvbXBhcmUgbG9nIGZpbGVzIik7Ci0gICAgfQotICB9Ci0gIAotICAvKioKLSAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZmlsZS4KLSAgICogCi0gICAqIEBwYXJhbSBmaWxlbmFtZSB0aGUgZmlsZSBuYW1lIG9mIHRoZSBmaWxlIHRvIGdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLgotICAgKiBAcmV0dXJuIFRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaWYgc3VjY2Vzc2Z1bC4KLSAgICogQHRocm93cyBFeGNlcHRpb24gVGhyb3duIGlmIHVuYWJsZSB0byBjcmVhdGUgYSBzdHJpbmcgcmVwcmVzZW50YWlvbiBvZiB0aGUgZmlsZS4KLSAgICovCi0gIHByaXZhdGUgU3RyaW5nIGdldFN0cmluZ0Zyb21GaWxlKFN0cmluZyBmaWxlbmFtZSkgdGhyb3dzIEV4Y2VwdGlvbgotICB7Ci0gICAgU3RyaW5nQnVmZmVyIGZpbGVzdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7Ci0gICAgUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgQnVmZmVyZWRSZWFkZXIgYnVmcmVhZGVyID0gbnVsbDsKLSAgICB0cnkKLSAgICB7Ci0gICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7Ci0gICAgICByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcihmaWxlKTsKLSAgICAgIGJ1ZnJlYWRlciA9IG5ldyBCdWZmZXJlZFJlYWRlcihyZWFkZXIpOwotICAgICAgd2hpbGUgKGJ1ZnJlYWRlci5yZWFkeSgpKQotICAgICAgewotICAgICAgICBmaWxlc3RyaW5nLmFwcGVuZChidWZyZWFkZXIucmVhZExpbmUoKSArICJcbiIpOwotICAgICAgfQotICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oKTsKLSAgICB9IGZpbmFsbHkKLSAgICB7Ci0gICAgICBidWZyZWFkZXIuY2xvc2UoKTsKLSAgICAgIHJlYWRlci5jbG9zZSgpOwotICAgIH0KLSAgICByZXR1cm4gZmlsZXN0cmluZy50b1N0cmluZygpOwotICB9Ci0gIAotICAvKioKLSAgICogQ3JlYXRlIGEgbG9nIGZpbGUgZm9yIGFuIFhTRCB0ZXN0LgotICAgKiAKLSAgICogQHBhcmFtIGZpbGVuYW1lIFRoZSBuYW1lIG9mIHRoZSBsb2cgZmlsZSB0byBjcmVhdGUuCi0gICAqIEBwYXJhbSB2YWxyZXBvcnQgVGhlIHZhbGlkYXRpb24gcmVwb3J0IGZvciB0aGlzIGZpbGUuCi0gICAqIEByZXR1cm4gVGhlIGZpbGUgY29udGVudHMgYXMgYSBzdHJpbmcgaWYgc3VjY2Vzc2Z1bCBvciBudWxsIGlmIG5vdCBzdWNjZXNzZnVsLgotICAgKi8KLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTG9nKFN0cmluZyBmaWxlbmFtZSwgVmFsaWRhdGlvblJlcG9ydCB2YWxyZXBvcnQpCi0gIHsKLSAgICAgVmFsaWRhdGlvbk1lc3NhZ2VbXSB2YWxtZXNzYWdlcyA9IHZhbHJlcG9ydC5nZXRWYWxpZGF0aW9uTWVzc2FnZXMoKTsKLSAgICAgaW50IG51bW1lc3NhZ2VzID0gdmFsbWVzc2FnZXMubGVuZ3RoOy8vdmFsaWRhdG9yLmdldEVycm9ycygpLnNpemUoKSArIHZhbGlkYXRvci5nZXRXYXJuaW5ncygpLnNpemUoKTsKLSAgICAgU3RyaW5nQnVmZmVyIGVycm9yc1N0cmluZyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKLSAgICAgU3RyaW5nQnVmZmVyIHdhcm5pbmdzU3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICBpbnQgbnVtZXJyb3JzID0gMDsKLSAgICAgaW50IG51bXdhcm5pbmdzID0gMDsKLSAgICAgZm9yKGludCBpID0gMDsgaSA8IG51bW1lc3NhZ2VzOyBpKyspCi0gICAgIHsKLSAgICAgICBWYWxpZGF0aW9uTWVzc2FnZSB2YWxtZXMgPSB2YWxtZXNzYWdlc1tpXTsKLSAgICAgICBpZih2YWxtZXMuZ2V0U2V2ZXJpdHkoKSA9PSBWYWxpZGF0aW9uTWVzc2FnZS5TRVZfTE9XKQotICAgICAgIHsKLSAgICAgICAgIG51bXdhcm5pbmdzKys7Ci0gICAgICAgICBTdHJpbmcgbWVzc2FnZSA9IHZhbG1lcy5nZXRNZXNzYWdlKCk7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCInW14nXSoiICsgUExVR0lOX05BTUUgKyAiW14nL10qLyIsICInIik7Ci0gICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCJbKF1bXihdKiIgKyBQTFVHSU5fTkFNRSArICJbXicvXSovIiwgIigiKTsKLSAgICAgICAgIHdhcm5pbmdzU3RyaW5nLmFwcGVuZChtZXNzYWdlICsgIiBbIiArIHZhbG1lcy5nZXRMaW5lTnVtYmVyKCkgKyIsICIgKyB2YWxtZXMuZ2V0Q29sdW1uTnVtYmVyKCkgKyJdXG4iKTsKLSAgICAgICAgIHdhcm5pbmdzU3RyaW5nLmFwcGVuZChjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKHZhbG1lcy5nZXROZXN0ZWRNZXNzYWdlcygpKSk7Ci0gICAgICAgfQotICAgICAgIGVsc2UKLSAgICAgICB7Ci0gICAgICAgICBudW1lcnJvcnMrKzsKLSAgICAgICAgIFN0cmluZyBtZXNzYWdlID0gdmFsbWVzLmdldE1lc3NhZ2UoKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIidbXiddKiIgKyBQTFVHSU5fTkFNRSArICJbXicvXSovIiwgIiciKTsKLSAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIlsoXVteKF0qIiArIFBMVUdJTl9OQU1FICsgIlteJy9dKi8iLCAiKCIpOwotICAgICAgICAgZXJyb3JzU3RyaW5nLmFwcGVuZChtZXNzYWdlICsgIiBbIiArIHZhbG1lcy5nZXRMaW5lTnVtYmVyKCkgKyIsICIgKyB2YWxtZXMuZ2V0Q29sdW1uTnVtYmVyKCkgKyJdXG4iKTsKLSAgICAgICAgIGVycm9yc1N0cmluZy5hcHBlbmQoY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyh2YWxtZXMuZ2V0TmVzdGVkTWVzc2FnZXMoKSkpOwotICAgICAgIH0KLSAgICAgfQotICAgICBTdHJpbmdCdWZmZXIgbG9nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwotICAgICBsb2cuYXBwZW5kKCJudW1iZXIgb2YgZXJyb3JzICAgICAgOiAiICsgbnVtZXJyb3JzICsgIlxuIik7Ci0gICAgIGlmKG51bXdhcm5pbmdzID4gMCkKLSAgICAgewotICAgICAgIGxvZy5hcHBlbmQoIm51bWJlciBvZiB3YXJuaW5ncyAgICA6ICIgKyBudW13YXJuaW5ncyArICJcbiIpOwotICAgICB9Ci0gICAgIGxvZy5hcHBlbmQoIlxuLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgICBpZihudW1lcnJvcnMgPT0gMCkKLSAgICAgewotICAgICAgIGxvZy5hcHBlbmQoIihub25lKVxuIik7Ci0gICAgIH0KLSAgICAgZWxzZQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZChlcnJvcnNTdHJpbmcudG9TdHJpbmcoKSk7Ci0gICAgIH0KLSAgICAgaWYobnVtd2FybmluZ3MgPiAwKQotICAgICB7Ci0gICAgICAgbG9nLmFwcGVuZCgiLS0tLS0tLS0tLS0td2FybmluZyBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotICAgICAgIGxvZy5hcHBlbmQoZXJyb3JzU3RyaW5nLnRvU3RyaW5nKCkpOwotICAgICB9Ci0gICAgIGxvZy5hcHBlbmQod2FybmluZ3NTdHJpbmcudG9TdHJpbmcoKSk7Ci0gICAgIGxvZy5hcHBlbmQoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKLSAgIAotICAgICBEYXRhT3V0cHV0U3RyZWFtIG91dFN0cmVhbSA9IG51bGw7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgRmlsZSBsb2dmaWxlID0gbmV3IEZpbGUoZmlsZW5hbWUpOwotICAgICAgRmlsZSBwYXJlbnQgPSBsb2dmaWxlLmdldFBhcmVudEZpbGUoKTsKLSAgCWlmICghcGFyZW50LmV4aXN0cygpKSAKLSAgCXsKLSAgCSAgcGFyZW50Lm1rZGlycygpOwotICAJfQotICAgICAgaWYobG9nZmlsZS5leGlzdHMoKSkKLSAgICAgIHsKLSAgICAgICAgbG9nZmlsZS5kZWxldGUoKTsKLSAgICAgIH0KLSAgICAgIGxvZ2ZpbGUuY3JlYXRlTmV3RmlsZSgpOwotICAgICAgCi0gICAgICBvdXRTdHJlYW0gPSBuZXcgRGF0YU91dHB1dFN0cmVhbShuZXcgRmlsZU91dHB1dFN0cmVhbShmaWxlbmFtZSwgdHJ1ZSkpOwotICAgICAgb3V0U3RyZWFtLndyaXRlQnl0ZXMobG9nLnRvU3RyaW5nKCkpOwotICAgICAgb3V0U3RyZWFtLmNsb3NlKCk7Ci0KLSAgICB9IGNhdGNoIChJT0V4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIC8vIElmIHdlIGNhbid0IHdyaXRlIHRoZSBsb2cgdGhlbiBjbGVhciB0aGUgbG9nLgotICAgICAgbG9nLmRlbGV0ZSgwLCBsb2cubGVuZ3RoKCkpOwotICAgIH0KLSAgICByZXR1cm4gbG9nLnRvU3RyaW5nKCk7Ci0gIH0KLSAgCi0gIHByaXZhdGUgU3RyaW5nIGNyZWF0ZU5lc3RlZE1lc3NhZ2VTdHJpbmcoTGlzdCBuZXN0ZWRNZXNzYWdlcykKLSAgewotICAgIHJldHVybiBjcmVhdGVOZXN0ZWRNZXNzYWdlU3RyaW5nKG5lc3RlZE1lc3NhZ2VzLCAwKTsKLSAgfQotICAKLSAgcHJpdmF0ZSBTdHJpbmcgY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyhMaXN0IG5lc3RlZE1lc3NhZ2VzLCBpbnQgZGVwdGgpCi0gIHsKLSAgICBpZihuZXN0ZWRNZXNzYWdlcyAhPSBudWxsICYmIG5lc3RlZE1lc3NhZ2VzLnNpemUoKSA+IDApCi0gICAgewotICAgICAgU3RyaW5nIG1lc3NhZ2VTdHJpbmcgPSAiIjsKLSAgICAgIEl0ZXJhdG9yIG5lc3RlZE1lc0l0ZXIgPSBuZXN0ZWRNZXNzYWdlcy5pdGVyYXRvcigpOwotICAgICAgd2hpbGUobmVzdGVkTWVzSXRlci5oYXNOZXh0KCkpCi0gICAgICB7Ci0gICAgICAgIFZhbGlkYXRpb25NZXNzYWdlIG5lc3ZhbG1lcyA9IChWYWxpZGF0aW9uTWVzc2FnZSluZXN0ZWRNZXNJdGVyLm5leHQoKTsKLSAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IGRlcHRoOyBpKyspCi0gICAgICAgIHsKLSAgICAgICAgICBtZXNzYWdlU3RyaW5nICs9ICIgIjsKLSAgICAgICAgfQotICAgICAgICAvLyBJZiB0aGUgbWVzc2FnZSBjb250YWlucyBhbnkgZmlsZSByZWZlcmVuY2VzIG1ha2UgdGhlbSByZWxhdGl2ZS4KLSAgICAgICAgU3RyaW5nIG1lc3NhZ2UgPSBuZXN2YWxtZXMuZ2V0TWVzc2FnZSgpOwotICAgICAgICBtZXNzYWdlID0gbWVzc2FnZS5yZXBsYWNlQWxsKCInW14nXSoiICsgUExVR0lOX05BTUUgKyAiW14nL10qLyIsICInIik7Ci0gICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2VBbGwoIlsoXVteKF0qIiArIFBMVUdJTl9OQU1FICsgIlteJy9dKi8iLCAiWyhdIik7Ci0gICAgICAgIG1lc3NhZ2VTdHJpbmcgKz0gKCItPiAiICsgbWVzc2FnZSArICIgWyIgKyBuZXN2YWxtZXMuZ2V0TGluZU51bWJlcigpICsiLCAiICsgbmVzdmFsbWVzLmdldENvbHVtbk51bWJlcigpICsiXVxuIik7Ci0gICAgICAgIG1lc3NhZ2VTdHJpbmcgKz0gY3JlYXRlTmVzdGVkTWVzc2FnZVN0cmluZyhuZXN2YWxtZXMuZ2V0TmVzdGVkTWVzc2FnZXMoKSwgZGVwdGggKyAxKTsKLSAgICAgIH0KLSAgICAgIHJldHVybiBtZXNzYWdlU3RyaW5nOwotICAgIH0KLSAgICBlbHNlCi0gICAgewotICAgICAgcmV0dXJuICIiOwotICAgIH0KLSAgfQotICAKLSAgcHJvdGVjdGVkIElQcm9qZWN0IGNyZWF0ZVNpbXBsZVByb2plY3QoU3RyaW5nIHByb2plY3ROYW1lLCBTdHJpbmdbXSBmaWxlcykKLSAgewotICAgIGZpbmFsIElXb3Jrc3BhY2Ugd29ya3NwYWNlID0gUmVzb3VyY2VzUGx1Z2luLmdldFdvcmtzcGFjZSgpOwotICAgIGZpbmFsIElQcm9qZWN0IHByb2plY3QgPSB3b3Jrc3BhY2UuZ2V0Um9vdCgpLmdldFByb2plY3QocHJvamVjdE5hbWUpOwotICAgIGlmKCFwcm9qZWN0LmV4aXN0cygpKQotICAgIHsKLSAgICAgIHRyeQotCSAgewotICAgICAgICBwcm9qZWN0LmNyZWF0ZShudWxsKTsKLSAgICAgIH0KLSAgICAgIGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLQkgIHsKLSAgICAgICAgZmFpbCgiQ291bGQgbm90IGNyZWF0ZSBwcm9qZWN0ICIgKyBwcm9qZWN0TmFtZSArIGUpOwotICAgICAgfSAKLSAgICB9Ci0gICAgaWYoIXByb2plY3QuaXNPcGVuKCkpCi0gICAgewotICAgICAgdHJ5Ci0JICB7Ci0gICAgICAgIHByb2plY3Qub3BlbihudWxsKTsKLQkgIH0KLSAgICAgIGNhdGNoKENvcmVFeGNlcHRpb24gZSkKLSAgICAgIHsKLSAgICAgICAgZmFpbCgiQ291bGQgbm90IG9wZW4gcHJvamVjdCAiICsgcHJvamVjdE5hbWUgKyBlKTsKLQkgIH0KLSAgICB9Ci0gICAgdHJ5Ci0gICAgewotICAgICAgSVByb2plY3REZXNjcmlwdGlvbiBwcm9qZWN0RGVzY3JpcHRpb24gPSBwcm9qZWN0LmdldERlc2NyaXB0aW9uKCk7IAotICAgICAgcHJvamVjdERlc2NyaXB0aW9uLnNldE5hbWUocHJvamVjdE5hbWUpOwotICAgICAgcHJvamVjdC5zZXREZXNjcmlwdGlvbihwcm9qZWN0RGVzY3JpcHRpb24sIG51bGwpOwotICAgIH0KLSAgICBjYXRjaChFeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICBmYWlsKCJVbmFibGUgdG8gc2V0IHByb2plY3QgcHJvcGVydGllcyBmb3IgcHJvamVjdCAiICsgcHJvamVjdE5hbWUgKyAiLiAiICsgZSk7Ci0gICAgfQotCi0gICAgaWYoZmlsZXMgIT0gbnVsbCkKLSAgICB7Ci0gICAgICBpbnQgbnVtZmlsZXMgPSBmaWxlcy5sZW5ndGg7Ci0gICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbnVtZmlsZXM7IGkrKykKLSAgICAgIHsKLSAgICAgICAgdHJ5Ci0JCXsKLSAgICAgICAgICBTdHJpbmcgZmlsZW5hbWUgPSBmaWxlc1tpXTsKLSAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLnJlcGxhY2UoJ1xcJywnLycpOwotICAgICAgICAgIGlmKGZpbGVuYW1lLnN0YXJ0c1dpdGgoImZpbGU6IikpCi0gICAgICAgICAgewotICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zdWJzdHJpbmcoNSk7Ci0JCQl3aGlsZShmaWxlbmFtZS5zdGFydHNXaXRoKCIvIikpCi0JICAgICAgICB7Ci0JICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDEpOwotCSAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICAKLSAgICAgICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShmaWxlbmFtZSk7Ci0gICAgICAgICAgRmlsZUlucHV0U3RyZWFtIGluID0gbmV3IEZpbGVJbnB1dFN0cmVhbShmaWxlKTsKLSAgICAgICAgICBJRmlsZSBpRmlsZSA9IHByb2plY3QuZ2V0RmlsZShmaWxlLmdldE5hbWUoKSk7Ci0gICAgICAgICAgaWYoIWlGaWxlLmV4aXN0cygpKQotICAgICAgICAgIHsKLSAgICAgICAgICAgIGlGaWxlLmNyZWF0ZShpbiwgdHJ1ZSwgbnVsbCk7Ci0gICAgICAgICAgICBpbi5jbG9zZSgpOwotICAgICAgICAgIH0KLQkJfQotICAgICAgICBjYXRjaChFeGNlcHRpb24gZSkKLQkJewotCQkgIGZhaWwoIlVuYWJsZSB0byBsb2NhdGUgZmlsZSAiICsgZmlsZXNbaV0pOwotCQl9IAotICAgICAgfQotICAgIH0KLSAgICB0cnkKLSAgICB7Ci0gICAgICBwcm9qZWN0LnJlZnJlc2hMb2NhbCgtMSwgbnVsbCk7Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHt9Ci0gICAgcmV0dXJuIHByb2plY3Q7Ci0gIH0KLX0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL0J1Z0ZpeGVzVGVzdC5qYXZhIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYTZhZDYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvQnVnRml4ZXNUZXN0LmphdmEKKysrIC9kZXYvbnVsbApAQCAtMSwyMTQgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIENvcHlyaWdodCAoYykgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24gYW5kIG90aGVycy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMKLSAqIGFyZSBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEVjbGlwc2UgUHVibGljIExpY2Vuc2UgdjEuMAotICogd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24sIGFuZCBpcyBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cuZWNsaXBzZS5vcmcvbGVnYWwvZXBsLXYxMC5odG1sCi0gKiAKLSAqIENvbnRyaWJ1dG9yczoKLSAqICAgICBJQk0gQ29ycG9yYXRpb24gLSBpbml0aWFsIEFQSSBhbmQgaW1wbGVtZW50YXRpb24KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotcGFja2FnZSBvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWw7Ci0KLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdDsKLWltcG9ydCBqdW5pdC5mcmFtZXdvcmsuVGVzdFN1aXRlOwotCi1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLlhNTENvcmVQbHVnaW47Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhtbC5jb3JlLmludGVybmFsLmNhdGFsb2cucHJvdmlzaW9uYWwuSUNhdGFsb2dFbnRyeTsKLWltcG9ydCBvcmcuZWNsaXBzZS53c3QueG1sLmNvcmUuaW50ZXJuYWwuY2F0YWxvZy5wcm92aXNpb25hbC5JTmV4dENhdGFsb2c7Ci1pbXBvcnQgb3JnLmVjbGlwc2Uud3N0LnhzZC5jb3JlLmludGVybmFsLnZhbGlkYXRpb24uWFNEVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb247Ci0KLQotCi0vKioKLSAqIFRlc3QgY2xhc3MgZm9yIGJ1ZyBmaXhlcy4KLSAqLwotcHVibGljIGNsYXNzIEJ1Z0ZpeGVzVGVzdCBleHRlbmRzIEJhc2VUZXN0Q2FzZQotewotICBwcml2YXRlIFN0cmluZyBCVUdGSVhFU19ESVIgPSAiQnVnRml4ZXMvIjsKLSAgCi0gIC8qKgotICAgKiBDcmVhdGUgYSB0ZXN0cyBzdWl0ZSBmcm9tIHRoaXMgdGVzdCBjbGFzcy4KLSAgICogCi0gICAqIEByZXR1cm4gQSB0ZXN0IHN1aXRlIGNvbnRhaW5pbmcgdGhpcyB0ZXN0IGNsYXNzLgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBUZXN0IHN1aXRlKCkKLSAgewotICAgIHJldHVybiBuZXcgVGVzdFN1aXRlKEJ1Z0ZpeGVzVGVzdC5jbGFzcyk7Ci0gIH0KLSAgCi0gIC8qIChub24tSmF2YWRvYykKLSAgICogQHNlZSBqdW5pdC5mcmFtZXdvcmsuVGVzdENhc2Ujc2V0VXAoKQotICAgKi8KLSAgcHJvdGVjdGVkIHZvaWQgc2V0VXAoKQotICB7Ci0gICAgc3VwZXIuc2V0VXAoKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL0J1Z0ZpeGVzL0VtcHR5LnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEVtcHR5KCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJFbXB0eSI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiRW1wdHlGaWxlLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJFbXB0eUZpbGUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiRW1wdHlGaWxlLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludmFsaWRTY2hlbWFJblhNTENhdGFsb2coKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkludmFsaWRTY2hlbWFJblhNTENhdGFsb2ciOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgY3JlYXRlU2ltcGxlUHJvamVjdCgiUHJvamVjdCIsIG5ldyBTdHJpbmdbXXt0ZXN0ZmlsZX0pOwotICAgIAotICAgIAotICAgIElDYXRhbG9nIGNhdGFsb2cgPSBYTUxDb3JlUGx1Z2luLmdldERlZmF1bHQoKS5nZXREZWZhdWx0WE1MQ2F0YWxvZygpOwotICAgIElOZXh0Q2F0YWxvZ1tdIG5leHRDYXRhbG9ncyA9IGNhdGFsb2cuZ2V0TmV4dENhdGFsb2dzKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuZXh0Q2F0YWxvZ3MubGVuZ3RoOyBpKyspCi0JewotCQlJTmV4dENhdGFsb2cgbmV4dENhdGFsb2cgPSBuZXh0Q2F0YWxvZ3NbaV07Ci0JCWlmKFhNTENvcmVQbHVnaW4uVVNFUl9DQVRBTE9HX0lELmVxdWFscyhuZXh0Q2F0YWxvZy5nZXRJZCgpKSl7Ci0JCQlJQ2F0YWxvZyB1c2VyQ2F0YWxvZyA9IG5leHRDYXRhbG9nLmdldFJlZmVyZW5jZWRDYXRhbG9nKCk7Ci0JCQlpZih1c2VyQ2F0YWxvZyAhPSBudWxsKQotCQkJewotCQkJCUlDYXRhbG9nRW50cnkgY2F0YWxvZ0VudHJ5ID0gKElDYXRhbG9nRW50cnkpdXNlckNhdGFsb2cuY3JlYXRlQ2F0YWxvZ0VsZW1lbnQoSUNhdGFsb2dFbnRyeS5FTlRSWV9UWVBFX1BVQkxJQyk7Ci0JCQkgICAgY2F0YWxvZ0VudHJ5LnNldEtleSgidGVzdEtleSIpOwotCQkJICAgIGNhdGFsb2dFbnRyeS5zZXRVUkkoImh0dHA6Ly90ZXN0dXJpIik7Ci0JCQkgICAgdXNlckNhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQoY2F0YWxvZ0VudHJ5KTsKLQkJCSAgICBydW5UZXN0KCJwbGF0Zm9ybTovcmVzb3VyY2UvUHJvamVjdC9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZCIvKkZJTEVfUFJPVE9DT0wgKyBmaWxlLmdldExvY2F0aW9uKCkudG9TdHJpbmcoKSovLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0JCQkgICAgY2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudChjYXRhbG9nRW50cnkpOwotCQkJfQkKLQkJfQkKLQl9IAotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0TWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk1pc3NpbmdDbG9zaW5nU2NoZW1hVGFnIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJNaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpcigpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpciI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRJbnZhbGlkTG9jYXRpb24oKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEludmFsaWRMb2NhdGlvbiI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0SW52YWxpZExvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbXBvcnRJbnZhbGlkTG9jYXRpb24vIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiSW1wb3J0SW52YWxpZExvY2F0aW9uLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvVHdvT3BlbkJyYWNrZXRzL1R3b09wZW5CcmFja2V0cy54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUd29PcGVuQnJhY2tldHMoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlR3b09wZW5CcmFja2V0cyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVHdvT3BlbkJyYWNrZXRzLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJUd29PcGVuQnJhY2tldHMvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBCVUdGSVhFU19ESVIgKyAiVHdvT3BlbkJyYWNrZXRzLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvSW1wb3J0V2l0aEluY29ycmVjdFNsYXNoL0EueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0V2l0aEluY29ycmVjdFNsYXNoKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJJbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvZG9nLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEhvbm91ckFsbFNjaGVtYUxvY2F0aW9ucygpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiZG9nIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIkhvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJIb25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBYU0RWYWxpZGF0aW9uQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uID0gbmV3IFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uKCk7Ci0gICAgdHJ5Ci0gICAgewotICAgICAgY29uZmlndXJhdGlvbi5zZXRGZWF0dXJlKFhTRFZhbGlkYXRpb25Db25maWd1cmF0aW9uLkhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUywgdHJ1ZSk7Ci0gICAgfQotICAgIGNhdGNoKEV4Y2VwdGlvbiBlKQotICAgIHsKLSAgICAgIGZhaWwoIlVuYWJsZSB0byBzZXQgdGhlIEhPTk9VUl9BTExfU0NIRU1BX0xPQ0FUSU9OUyBmZWF0dXJlIHRvIHRydWU6ICIgKyBlKTsKLSAgICB9Ci0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24sIGNvbmZpZ3VyYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvQnVnRml4ZXMvWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nL0ludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZyI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJYU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgQlVHRklYRVNfRElSICsgIlhTRFJlZ2lzdGVyZWRXaXRoQ2F0YWxvZy8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIEJVR0ZJWEVTX0RJUiArICJYU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBjcmVhdGVTaW1wbGVQcm9qZWN0KCJQcm9qZWN0IiwgbmV3IFN0cmluZ1tde3Rlc3RmaWxlfSk7Ci0gICAgCi0gICAgCi0gICAgSUNhdGFsb2cgY2F0YWxvZyA9IFhNTENvcmVQbHVnaW4uZ2V0RGVmYXVsdCgpLmdldERlZmF1bHRYTUxDYXRhbG9nKCk7Ci0gICAgSU5leHRDYXRhbG9nW10gbmV4dENhdGFsb2dzID0gY2F0YWxvZy5nZXROZXh0Q2F0YWxvZ3MoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG5leHRDYXRhbG9ncy5sZW5ndGg7IGkrKykKLQl7Ci0JCUlOZXh0Q2F0YWxvZyBuZXh0Q2F0YWxvZyA9IG5leHRDYXRhbG9nc1tpXTsKLQkJaWYoWE1MQ29yZVBsdWdpbi5VU0VSX0NBVEFMT0dfSUQuZXF1YWxzKG5leHRDYXRhbG9nLmdldElkKCkpKXsKLQkJCUlDYXRhbG9nIHVzZXJDYXRhbG9nID0gbmV4dENhdGFsb2cuZ2V0UmVmZXJlbmNlZENhdGFsb2coKTsKLQkJCWlmKHVzZXJDYXRhbG9nICE9IG51bGwpCi0JCQl7Ci0JCQkJSUNhdGFsb2dFbnRyeSBjYXRhbG9nRW50cnkgPSAoSUNhdGFsb2dFbnRyeSl1c2VyQ2F0YWxvZy5jcmVhdGVDYXRhbG9nRWxlbWVudChJQ2F0YWxvZ0VudHJ5LkVOVFJZX1RZUEVfUFVCTElDKTsKLQkJCSAgICBjYXRhbG9nRW50cnkuc2V0S2V5KCJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSIpOwotCQkJICAgIGNhdGFsb2dFbnRyeS5zZXRVUkkoInBsYXRmb3JtOi9yZXNvdXJjZS9Qcm9qZWN0L0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkIik7Ci0JCQkgICAgdXNlckNhdGFsb2cuYWRkQ2F0YWxvZ0VsZW1lbnQoY2F0YWxvZ0VudHJ5KTsKLQkJCSAgICBydW5UZXN0KCJwbGF0Zm9ybTovcmVzb3VyY2UvUHJvamVjdC9JbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZy54c2QiLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0JCQkgICAgY2F0YWxvZy5yZW1vdmVDYXRhbG9nRWxlbWVudChjYXRhbG9nRW50cnkpOwotCQkJfQkKLQkJfQkKLQl9Ci0gIH0KLX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9QYXRoc1Rlc3QuamF2YSBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmIxMmE1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy9zcmMvb3JnL2VjbGlwc2Uvd3N0L3hzZC92YWxpZGF0aW9uL3Rlc3RzL2ludGVybmFsL1BhdGhzVGVzdC5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsMTA4NiArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogQ29weXJpZ2h0IChjKSAyMDAxLCAyMDA0IElCTSBDb3Jwb3JhdGlvbiBhbmQgb3RoZXJzLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscwotICogYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRWNsaXBzZSBQdWJsaWMgTGljZW5zZSB2MS4wCi0gKiB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbiwgYW5kIGlzIGF2YWlsYWJsZSBhdAotICogaHR0cDovL3d3dy5lY2xpcHNlLm9yZy9sZWdhbC9lcGwtdjEwLmh0bWwKLSAqIAotICogQ29udHJpYnV0b3JzOgotICogICAgIElCTSBDb3Jwb3JhdGlvbiAtIGluaXRpYWwgQVBJIGFuZCBpbXBsZW1lbnRhdGlvbgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1wYWNrYWdlIG9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy5pbnRlcm5hbDsKLQotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0OwotaW1wb3J0IGp1bml0LmZyYW1ld29yay5UZXN0U3VpdGU7Ci0KLS8qKgotICogVGVzdHMgdGhhdCB0ZXN0IHZhcmlvdXMgdHlwZXMgb2YgdmFyaWF0aW9ucyBpbiBmaWxlIHBhdGhzLgotICovCi1wdWJsaWMgY2xhc3MgUGF0aHNUZXN0IGV4dGVuZHMgQmFzZVRlc3RDYXNlCi17Ci0gIHByaXZhdGUgU3RyaW5nIFBBVEhTX0RJUiA9ICJQYXRocy8iOwotICAKLSAgLyoqCi0gICAqIENyZWF0ZSBhIHRlc3RzIHN1aXRlIGZyb20gdGhpcyB0ZXN0IGNsYXNzLgotICAgKiAKLSAgICogQHJldHVybiBBIHRlc3Qgc3VpdGUgY29udGFpbmluZyB0aGlzIHRlc3QgY2xhc3MuCi0gICAqLwotICBwdWJsaWMgc3RhdGljIFRlc3Qgc3VpdGUoKQotICB7Ci0gICAgcmV0dXJuIG5ldyBUZXN0U3VpdGUoUGF0aHNUZXN0LmNsYXNzKTsKLSAgfQotICAKLSAgLyogKG5vbi1KYXZhZG9jKQotICAgKiBAc2VlIGp1bml0LmZyYW1ld29yay5UZXN0Q2FzZSNzZXRVcCgpCi0gICAqLwotICBwcm90ZWN0ZWQgdm9pZCBzZXRVcCgpCi0gIHsKLSAgICBzdXBlci5zZXRVcCgpOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0U3BhY2VJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiU3BhY2VJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlNwYWNlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZSBJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0KUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXRJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RDbG9zZUJyYWNrZXR0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXQpSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdENsb3NlQnJhY2tldEluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiQ2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0Q2xvc2VCcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkNsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3REYXNoSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkRhc2gtSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdERhc2hJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRGFzaC1JbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb24hSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRXhjbGFtYXRpb25JblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb24hSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbiFJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RFeGNsYW1hdGlvbkluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRXhjbGFtYXRpb24hSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb24hSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0RXhjbGFtYXRpb25JbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiRXhjbGFtYXRpb24hSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0KEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0KEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJPcGVuQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXQoSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0T3BlbkJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0KEluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0KEluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdE9wZW5CcmFja2V0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIk9wZW5CcmFja2V0KEluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2RJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RQZXJpb2RJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlBlcmlvZC5JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFBlcmlvZEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlJ0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlF1b3RlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlJ0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJRdW90ZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGUnSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZSdJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0UXVvdGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlF1b3RlJ0luRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlJ0luRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFF1b3RlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlF1b3RlJ0luRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdFNwYWNlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZSBJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RTcGFjZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJTcGFjZSBJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVGlsZGVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlRpbGRlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZX5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RUaWxkZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVGlsZGV+SW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VGlsZGVJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiVGlsZGV+SW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0VW5kZXJzY29yZUluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJVbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RVbmRlcnNjb3JlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIlVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0SW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QW5nbGVIYXRJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJBbmdsZUhhdEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXReSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0QW5nbGVIYXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEFuZ2xlSGF0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKioqKioqKioqKioqKioqKgotICAgKiBUZXN0IEltcG9ydHMKLSAgICoqKioqKioqKioqKioqKioqLwotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0QW5nbGVIYXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQW5nbGVIYXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEFuZ2xlSGF0SW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkFuZ2xlSGF0XkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJBbmdsZUhhdF5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0KLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFNwYWNlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFNwYWNlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRTcGFjZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2UgSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlIEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJDbG9zZUJyYWNrZXQpSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9DbG9zZUJyYWNrZXQpSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0Q2xvc2VCcmFja2V0dEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldClJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0KUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0KUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRDbG9zZUJyYWNrZXRJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydENsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0KUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydENsb3NlQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRDbG9zZUJyYWNrZXQpSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkNsb3NlQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnREYXNoSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydERhc2hJblBhdGhWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2gtSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RGFzaEluUGF0aEludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydERhc2hJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoLUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaC1JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnREYXNoSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnREYXNoLUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRGFzaEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnREYXNoSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydERhc2gtSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkRhc2hJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJEYXNoSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb24hSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uIUluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvbiFJbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0RXhjbGFtYXRpb25JbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEV4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiRXhjbGFtYXRpb25JbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydEV4Y2xhbWF0aW9uSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydEV4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIkV4Y2xhbWF0aW9uSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJFeGNsYW1hdGlvbkluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldChJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0KEluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldChJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXQoSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydE9wZW5CcmFja2V0SW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRPcGVuQnJhY2tldChJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIk9wZW5CcmFja2V0SW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRPcGVuQnJhY2tldEluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRPcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJPcGVuQnJhY2tldEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiT3BlbkJyYWNrZXRJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRQZXJpb2RJblBhdGhWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUGVyaW9kLkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2QuSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZC5JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0UGVyaW9kSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRQZXJpb2RJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJQZXJpb2RJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlBlcmlvZEluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRRdW90ZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRRdW90ZUluUGF0aFZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZSdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFF1b3RlSW5QYXRoSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlJ0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZSdJblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGUnSW5GaWxlbmFtZVZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFF1b3RlSW5GaWxlbmFtZVZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRRdW90ZSdJbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlF1b3RlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZSdJbkZpbGVuYW1lSW52YWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRRdW90ZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRRdW90ZSdJbkZpbGVuYW1lSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJRdW90ZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiUXVvdGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QKLSAgICovCi0gIHB1YmxpYyB2b2lkIHRlc3RJbXBvcnRTcGFjZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0U3BhY2UgSW5GaWxlbmFtZVZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJTcGFjZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0U3BhY2VJbkZpbGVuYW1lSW52YWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiU3BhY2VJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlNwYWNlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aFZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFRpbGRlSW5QYXRoVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFRpbGRlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRUaWxkZUluUGF0aEludmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGV+SW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlfkluUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0VGlsZGVJbkZpbGVuYW1lVmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFRpbGRlfkluRmlsZW5hbWVWYWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVGlsZGVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFRpbGRlSW5GaWxlbmFtZUludmFsaWQoKQotICB7Ci0gICAgU3RyaW5nIHRlc3RuYW1lID0gIkltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlRpbGRlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJUaWxkZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBUZXN0IC9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRVbmRlcnNjb3JlSW5QYXRoVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlX0luUGF0aC8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZAotICAgKi8KLSAgcHVibGljIHZvaWQgdGVzdEltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZCI7Ci0gICAgU3RyaW5nIHRlc3RmaWxlID0gRklMRV9QUk9UT0NPTCArIFBMVUdJTl9BQlNPTFVURV9QQVRIICsgU0FNUExFU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZV9JblBhdGgvIiArIHRlc3RuYW1lICsgIi54c2QiOwotICAgIFN0cmluZyBsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgR0VORVJBVEVEX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgU3RyaW5nIGlkZWFsbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIElERUFMX1JFU1VMVFNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVfSW5QYXRoLyIgKyB0ZXN0bmFtZSArICIueHNkLWxvZyI7Ci0gICAgCi0gICAgcnVuVGVzdCh0ZXN0ZmlsZSwgbG9nbG9jYXRpb24sIGlkZWFsbG9nbG9jYXRpb24pOwotICB9Ci0gIAotICAvKioKLSAgICogVGVzdCAvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0VW5kZXJzY29yZUluRmlsZW5hbWVWYWxpZCgpCi0gIHsKLSAgICBTdHJpbmcgdGVzdG5hbWUgPSAiSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQiOwotICAgIFN0cmluZyB0ZXN0ZmlsZSA9IEZJTEVfUFJPVE9DT0wgKyBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIFNBTVBMRVNfRElSICsgUEFUSFNfRElSICsgIlVuZGVyc2NvcmVJbkZpbGVuYW1lLyIgKyB0ZXN0bmFtZSArICIueHNkIjsKLSAgICBTdHJpbmcgbG9nbG9jYXRpb24gPSBQTFVHSU5fQUJTT0xVVEVfUEFUSCArIEdFTkVSQVRFRF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIFN0cmluZyBpZGVhbGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBJREVBTF9SRVNVTFRTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZC1sb2ciOwotICAgIAotICAgIHJ1blRlc3QodGVzdGZpbGUsIGxvZ2xvY2F0aW9uLCBpZGVhbGxvZ2xvY2F0aW9uKTsKLSAgfQotICAKLSAgLyoqCi0gICAqIFRlc3QgL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkCi0gICAqLwotICBwdWJsaWMgdm9pZCB0ZXN0SW1wb3J0VW5kZXJzY29yZUluRmlsZW5hbWVJbnZhbGlkKCkKLSAgewotICAgIFN0cmluZyB0ZXN0bmFtZSA9ICJJbXBvcnRVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkIjsKLSAgICBTdHJpbmcgdGVzdGZpbGUgPSBGSUxFX1BST1RPQ09MICsgUExVR0lOX0FCU09MVVRFX1BBVEggKyBTQU1QTEVTX0RJUiArIFBBVEhTX0RJUiArICJVbmRlcnNjb3JlSW5GaWxlbmFtZS8iICsgdGVzdG5hbWUgKyAiLnhzZCI7Ci0gICAgU3RyaW5nIGxvZ2xvY2F0aW9uID0gUExVR0lOX0FCU09MVVRFX1BBVEggKyBHRU5FUkFURURfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICBTdHJpbmcgaWRlYWxsb2dsb2NhdGlvbiA9IFBMVUdJTl9BQlNPTFVURV9QQVRIICsgSURFQUxfUkVTVUxUU19ESVIgKyBQQVRIU19ESVIgKyAiVW5kZXJzY29yZUluRmlsZW5hbWUvIiArIHRlc3RuYW1lICsgIi54c2QtbG9nIjsKLSAgICAKLSAgICBydW5UZXN0KHRlc3RmaWxlLCBsb2dsb2NhdGlvbiwgaWRlYWxsb2dsb2NhdGlvbik7Ci0gIH0KLSAgCi19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3NyYy9vcmcvZWNsaXBzZS93c3QveHNkL3ZhbGlkYXRpb24vdGVzdHMvaW50ZXJuYWwvWFNEVmFsaWRhdGlvblRlc3RzUGx1Z2luLmphdmEgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4uamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4NzFjMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvc3JjL29yZy9lY2xpcHNlL3dzdC94c2QvdmFsaWRhdGlvbi90ZXN0cy9pbnRlcm5hbC9YU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4uamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDQgSUJNIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzCi0gKiBhcmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYxLjAKLSAqIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLCBhbmQgaXMgYXZhaWxhYmxlIGF0Ci0gKiBodHRwOi8vd3d3LmVjbGlwc2Uub3JnL2xlZ2FsL2VwbC12MTAuaHRtbAotICogCi0gKiBDb250cmlidXRvcnM6Ci0gKiAgICAgSUJNIENvcnBvcmF0aW9uIC0gaW5pdGlhbCBBUEkgYW5kIGltcGxlbWVudGF0aW9uCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXBhY2thZ2Ugb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzLmludGVybmFsOwotaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247Ci0KLWltcG9ydCBvcmcuZWNsaXBzZS5jb3JlLnJ1bnRpbWUuRmlsZUxvY2F0b3I7Ci1pbXBvcnQgb3JnLmVjbGlwc2UuY29yZS5ydW50aW1lLlBsdWdpbjsKLWltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOwotaW1wb3J0IG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVDb250ZXh0OwotCi0vKioKLSAqIFRoZSBwbHVnaW4gY2xhc3MgZm9yIHRoaXMgdGVzdCBwbHVnaW4uCi0gKi8KLXB1YmxpYyBjbGFzcyBYU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4gZXh0ZW5kcyBQbHVnaW4KLXsKLSAgcHJvdGVjdGVkIHN0YXRpYyBCdW5kbGUgcGx1Z2luQnVuZGxlOwotCi0gIHB1YmxpYyBYU0RWYWxpZGF0aW9uVGVzdHNQbHVnaW4oKQotICB7Ci0gIH0KLSAgCi0gIC8qKgotICAgKiBAc2VlIG9yZy5vc2dpLmZyYW1ld29yay5CdW5kbGVBY3RpdmF0b3Ijc3RhcnQob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdGFydChCdW5kbGVDb250ZXh0IGNvbnRleHQpIHRocm93cyBFeGNlcHRpb24gCi0gIHsKLQlzdXBlci5zdGFydChjb250ZXh0KTsKLQlwbHVnaW5CdW5kbGUgPSBjb250ZXh0LmdldEJ1bmRsZSgpOwotICB9Ci0gIAotICAvKioKLSAgICogQHNlZSBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQWN0aXZhdG9yI3N0b3Aob3JnLm9zZ2kuZnJhbWV3b3JrLkJ1bmRsZUNvbnRleHQpCi0gICAqLwotICBwdWJsaWMgdm9pZCBzdG9wKEJ1bmRsZUNvbnRleHQgY29udGV4dCkgdGhyb3dzIEV4Y2VwdGlvbiAKLSAgewotCXBsdWdpbkJ1bmRsZSA9IG51bGw7Ci0Jc3VwZXIuc3RvcChjb250ZXh0KTsKLSAgfQotICAKLSAgLyoqCi0gICAqIEdldCB0aGUgaW5zdGFsbCBVUkwgb2YgdGhpcyBwbHVnaW4uCi0gICAqIAotICAgKiBAcmV0dXJuIHRoZSBpbnN0YWxsIHVybCBvZiB0aGlzIHBsdWdpbgotICAgKi8KLSAgcHVibGljIHN0YXRpYyBTdHJpbmcgZ2V0SW5zdGFsbFVSTCgpCi0gIHsKLSAgICB0cnkKLSAgICB7Ci0gICAgICByZXR1cm4gRmlsZUxvY2F0b3IucmVzb2x2ZShwbHVnaW5CdW5kbGUuZ2V0RW50cnkoIi8iKSkuZ2V0RmlsZSgpOwotICAgIH0KLSAgICBjYXRjaCAoSU9FeGNlcHRpb24gZSkKLSAgICB7Ci0gICAgICByZXR1cm4gbnVsbDsKLSAgICB9Ci0gIH0KLQotfQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZmRlYzgxLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0LnhtbAorKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotCi08cHJvamVjdAotICAgIG5hbWU9InRlc3RzdWl0ZSIKLSAgICBkZWZhdWx0PSJydW4iCi0gICAgYmFzZWRpcj0iLiI+Ci0gICAgCi0gICAgPCEtLSBUaGUgZm9sbG93aW5nIHByb3BlcnRpZXMgc2hvdWxkIGJlIHBhc3NlZCBpbnRvIHRoaXMgc2NyaXB0IC0tPgotICAgIDwhLS0gJHtlY2xpcHNlLWhvbWV9ICAgLS0+Ci0gICAgPCEtLSAke2J1aWxkRGlyZWN0b3J5fSAgLS0+Ci0gICAgPCEtLSAke2J1aWxkTGFiZWx9ICAgICAgICAtLT4KLQotICAgIDwhLS0gc2hvdWxkIGJlIGxpdHRsZSBuZWVkIHRvIGNoYW5nZSB3aGF0J3MgYWJvdmUgIC0tPgotICAgIAotCTxwcm9wZXJ0eQotCQluYW1lPSJwbHVnaW4tbmFtZSIKLQkJdmFsdWU9Im9yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cyIgLz4KLQotICAgIDxwcm9wZXJ0eQotICAgICAgICBuYW1lPSJjbGFzc25hbWUiCi0gICAgICAgIHZhbHVlPSJvcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMuaW50ZXJuYWwuQWxsWFNEVGVzdHMiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9InRlc3RUeXBlIgotICAgICAgICB2YWx1ZT0iY29yZS10ZXN0IiAvPgotCi0gICAgPCEtLSBzaG91bGQgYmUgbGl0dGxlIG5lZWQgdG8gY2hhbmdlIHdoYXQncyBiZWxvdyAtLT4KLQotICAgIDxlY2hvIG1lc3NhZ2U9ImJhc2VkaXI6ICR7YmFzZWRpcn0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iZWNsaXBzZS1ob21lOiAke2VjbGlwc2UtaG9tZX0iIC8+Ci0gICAgPGVjaG8gbWVzc2FnZT0iYnVpbGREaXJlY3Rvcnk6ICR7YnVpbGREaXJlY3Rvcnl9IiAvPgotICAgIDxlY2hvIG1lc3NhZ2U9InBsdWdpbi1uYW1lOiAke3BsdWdpbi1uYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJjbGFzc25hbWU6ICR7Y2xhc3NuYW1lfSIgLz4KLSAgICA8ZWNobyBtZXNzYWdlPSJ0ZXN0VHlwZSAke3Rlc3RUeXBlfSIgLz4KLQotCi0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9ImxpYnJhcnktZmlsZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zL29yZy5lY2xpcHNlLnRlc3RfMy4xLjAvbGlicmFyeS54bWwiIC8+Ci0gICAgPHByb3BlcnR5Ci0gICAgICAgIG5hbWU9IndvcmtzcGFjZSIKLSAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9qdW5pdHdvcmtzcGFjZXMvJHtwbHVnaW4tbmFtZX0iIC8+Ci0gICAgICAgIAotICAgIDwhLS0gVGhpcyB0YXJnZXQgaG9sZHMgYWxsIGluaXRpYWxpemF0aW9uIGNvZGUgdGhhdCBuZWVkcyB0byBiZSBkb25lIGZvciAtLT4KLSAgICA8IS0tIGFsbCB0ZXN0cyB0aGF0IGFyZSB0byBiZSBydW4uIEluaXRpYWxpemF0aW9uIGZvciBpbmRpdmlkdWFsIHRlc3RzIC0tPgotICAgIDwhLS0gc2hvdWxkIGJlIGRvbmUgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBzdWl0ZSB0YXJnZXQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iaW5pdCI+Ci0gICAgICAgIDx0c3RhbXAgLz4KLSAgICAgICAgPGRlbGV0ZT4KLSAgICAgICAgICAgIDxmaWxlc2V0Ci0gICAgICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iCi0gICAgICAgICAgICAgICAgaW5jbHVkZXM9IiR7cGx1Z2luLW5hbWV9Lip4bWwiIC8+Ci0gICAgICAgIDwvZGVsZXRlPgotICAgICAgICA8IS0tIG1ha2UgZGlyZWN0b3J5LCBpbiBjYXNlIHBhdGggZG9lc24ndCBleGlzdCB5ZXQgLS0+Ci0gICAgICAgIDxta2RpciBkaXI9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgPCEtLSAgYnV0IGRlbGV0ZSB0byBtYWtlIHN1cmUgZnJlc2ggY29udGVudHMtLT4KLSAgICAgICAgPGRlbGV0ZQotICAgICAgICAgICAgZGlyPSIke3dvcmtzcGFjZX0iCi0gICAgICAgICAgICBxdWlldD0idHJ1ZSIgLz4KLQotICAgIDwvdGFyZ2V0PgotCi0gICAgPCEtLSBUaGlzIHRhcmdldCBkZWZpbmVzIHRoZSB0ZXN0cyB0aGF0IG5lZWQgdG8gYmUgcnVuLiAtLT4KLSAgICA8dGFyZ2V0IG5hbWU9InN1aXRlIj4KLQotICAgICAgICA8YW50Ci0gICAgICAgICAgICB0YXJnZXQ9IiR7dGVzdFR5cGV9IgotICAgICAgICAgICAgYW50ZmlsZT0iJHtsaWJyYXJ5LWZpbGV9IgotICAgICAgICAgICAgZGlyPSIke2VjbGlwc2UtaG9tZX0iPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0iZGF0YS1kaXIiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7d29ya3NwYWNlfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9InBsdWdpbi1uYW1lIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfSIgLz4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImNsYXNzbmFtZSIKLSAgICAgICAgICAgICAgICB2YWx1ZT0iJHtjbGFzc25hbWV9IiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0icGx1Z2luLXBhdGgiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7ZWNsaXBzZS1ob21lfS9wbHVnaW5zLyR7cGx1Z2luLW5hbWV9IiAvPgotICAgICAgICA8L2FudD4KLQotICAgICAgICA8Y29weQotICAgICAgICAgICAgZmFpbG9uZXJyb3I9ImZhbHNlIgotICAgICAgICAgICAgZmlsZT0iJHt3b3Jrc3BhY2V9Ly5tZXRhZGF0YS8ubG9nIgotICAgICAgICAgICAgdG9maWxlPSIke2J1aWxkRGlyZWN0b3J5fS8ke2J1aWxkTGFiZWx9L3Rlc3RSZXN1bHRzL2NvbnNvbGVsb2dzLyR7cGx1Z2luLW5hbWV9LmNvbnNvbGVsb2cudHh0IiAvPgotCi0gICAgPC90YXJnZXQ+Ci0KLSAgICA8IS0tIFRoaXMgdGFyZ2V0IGhvbGRzIGNvZGUgdG8gY2xlYW51cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudCBhZnRlciAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCBvZiB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1bi4gWW91IGNhbiB1c2UgdGhpcyB0YXJnZXQgdG8gLS0+Ci0gICAgPCEtLSBkZWxldGUgdGVtcG9yYXJ5IGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0ZWQuIC0tPgotICAgIDx0YXJnZXQgbmFtZT0iY2xlYW51cCI+Ci0gICAgICAgIDwhLS0gdXN1YWxseSBubyBuZWVkIHRvIGRlbGV0ZSB3b3Jrc3BhY2UgdW50aWwgbmV4dCBydW4sIGFuZCBsZWF2aW5nIGl0IGFsbG93cyBpbnNwZWN0aW9uIC0tPgotICAgICAgICA8IS0tIDxkZWxldGUgZGlyPSIke3dvcmtzcGFjZX0iIHF1aWV0PSJ0cnVlIiAvPiAtLT4KLSAgICA8L3RhcmdldD4KLQotICAgIDwhLS0gVGhpcyB0YXJnZXQgcnVucyB0aGUgdGVzdCBzdWl0ZS4gQW55IGFjdGlvbnMgdGhhdCBuZWVkIHRvIGhhcHBlbiAtLT4KLSAgICA8IS0tIGFmdGVyIGFsbCB0aGUgdGVzdHMgaGF2ZSBiZWVuIHJ1biBzaG91bGQgZ28gaGVyZS4gLS0+Ci0gICAgPHRhcmdldAotICAgICAgICBuYW1lPSJydW4iCi0gICAgICAgIGRlcGVuZHM9ImluaXQsc3VpdGUsY2xlYW51cCI+Ci0gICAgICAgIDxhbnQKLSAgICAgICAgICAgIHRhcmdldD0iY29sbGVjdCIKLSAgICAgICAgICAgIGFudGZpbGU9IiR7bGlicmFyeS1maWxlfSIKLSAgICAgICAgICAgIGRpcj0iJHtlY2xpcHNlLWhvbWV9Ij4KLSAgICAgICAgICAgIDxwcm9wZXJ0eQotICAgICAgICAgICAgICAgIG5hbWU9ImluY2x1ZGVzIgotICAgICAgICAgICAgICAgIHZhbHVlPSIke3BsdWdpbi1uYW1lfS4qeG1sIiAvPgotICAgICAgICAgICAgPHByb3BlcnR5Ci0gICAgICAgICAgICAgICAgbmFtZT0ib3V0cHV0LWZpbGUiCi0gICAgICAgICAgICAgICAgdmFsdWU9IiR7cGx1Z2luLW5hbWV9LnhtbCIgLz4KLSAgICAgICAgPC9hbnQ+Ci0gICAgPC90YXJnZXQ+Ci0KLTwvcHJvamVjdD4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy8uY3ZzaWdub3JlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYjUzNTc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzLy5jdnNpZ25vcmUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1nZW5lcmF0ZWRSZXN1bHRzCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL2RvZy54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9kb2cueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL2RvZy54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydEludmFsaWRMb2NhdGlvbi9JbXBvcnRJbnZhbGlkTG9jYXRpb24ueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmFmZmNlZi4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0SW52YWxpZExvY2F0aW9uL0ltcG9ydEludmFsaWRMb2NhdGlvbi54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi1udW1iZXIgb2Ygd2FybmluZ3MgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLXdhcm5pbmcgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1zY2hlbWFfcmVmZXJlbmNlLjQ6IEZhaWxlZCB0byByZWFkIHNjaGVtYSBkb2N1bWVudCAnc3ViZGlyL2ltcG9ydGluZy54c2RhJywgYmVjYXVzZSAxKSBjb3VsZCBub3QgZmluZCB0aGUgZG9jdW1lbnQ7IDIpIHRoZSBkb2N1bWVudCBjb3VsZCBub3QgYmUgcmVhZDsgMykgdGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgZG9jdW1lbnQgaXMgbm90IDx4c2Q6c2NoZW1hPi4gWzMsIDk4XQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQS54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTRhNjY1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXNyYy1yZXNvbHZlLjQuMjogRXJyb3IgcmVzb2x2aW5nIGNvbXBvbmVudCAnc3RyaW5nYScuIEl0IHdhcyBkZXRlY3RlZCB0aGF0ICdzdHJpbmdhJyBpcyBpbiBuYW1lc3BhY2UgJ2h0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hJywgYnV0IGNvbXBvbmVudHMgZnJvbSB0aGlzIG5hbWVzcGFjZSBhcmUgbm90IHJlZmVyZW5jZWFibGUgZnJvbSBzY2hlbWEgZG9jdW1lbnQgJ3BsYXRmb3JtOi9yZXNvdXJjZS9Qcm9qZWN0L0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkJy4gSWYgdGhpcyBpcyB0aGUgaW5jb3JyZWN0IG5hbWVzcGFjZSwgcGVyaGFwcyB0aGUgcHJlZml4IG9mICdzdHJpbmdhJyBuZWVkcyB0byBiZSBjaGFuZ2VkLiBJZiB0aGlzIGlzIHRoZSBjb3JyZWN0IG5hbWVzcGFjZSwgdGhlbiBhbiBhcHByb3ByaWF0ZSAnaW1wb3J0JyB0YWcgc2hvdWxkIGJlIGFkZGVkIHRvICdwbGF0Zm9ybTovcmVzb3VyY2UvUHJvamVjdC9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nLnhzZCcuIFszLCA1MF0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlN2ZiMDBkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9CdWdGaXhlcy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzIsIDEyNV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvVHdvT3BlbkJyYWNrZXRzL1R3b09wZW5CcmFja2V0cy54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL1R3b09wZW5CcmFja2V0cy9Ud29PcGVuQnJhY2tldHMueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YzMzk5Ny4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvVHdvT3BlbkJyYWNrZXRzL1R3b09wZW5CcmFja2V0cy54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGUgbWFya3VwIGluIHRoZSBkb2N1bWVudCBwcmVjZWRpbmcgdGhlIHJvb3QgZWxlbWVudCBtdXN0IGJlIHdlbGwtZm9ybWVkLiBbMSwgMl0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nL0ludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvQnVnRml4ZXMvWFNEUmVnaXN0ZXJlZFdpdGhDYXRhbG9nL0ludmFsaWRTY2hlbWFXaXRoTmFtZXNwYWNlSW5DYXRhbG9nLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZDFhOTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL0J1Z0ZpeGVzL1hTRFJlZ2lzdGVyZWRXaXRoQ2F0YWxvZy9JbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZy54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1FbGVtZW50IHR5cGUgImNvbXBsZXhUeXBlIiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGVpdGhlciBhdHRyaWJ1dGUgc3BlY2lmaWNhdGlvbnMsICI+IiBvciAiLz4iLiBbNiwgM10KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNTk0Yzk5Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9BbmdsZUhhdF5JbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZmE2MTM1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDNhNjcyZS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldClJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmNmNDliLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkY2VmMTguLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2gtSW5QYXRoL0ltcG9ydERhc2hJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjY5N2RmLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvRXhjbGFtYXRpb25JblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvblwwNDFJblBhdGgvSW1wb3J0RXhjbGFtYXRpb25JblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDYyN2Q0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uIUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGE4ZjQyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uIUluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvSW1wb3J0RXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZDliZTguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXQoSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvSW1wb3J0T3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL09wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkZDhiY2UuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0T3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXQoSW5GaWxlbmFtZUludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYwYTcwMjEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZC5JblBhdGgvUGVyaW9kSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU3OWFlYS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YzczOWY5Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoSW52YWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlJ0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aFZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL0ltcG9ydFF1b3RlSW5QYXRoVmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aEludmFsaWQueHNkLWxvZyIKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54c2QtbG9nIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9RdW90ZUluUGF0aFZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmODA3MWUyLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL0ltcG9ydFF1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlJ0luRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2ciCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2ciCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIgorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU2OWE2ZTIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiNzgxMjQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9TcGFjZUluRmlsZW5hbWUvU3BhY2UgSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9Db3B5IG9mIC1mb3JYZXJjZXMyLjYuMi0gSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvQ29weSBvZiAtZm9yWGVyY2VzMi42LjItIEltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiOWIxMDkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9Db3B5IG9mIC1mb3JYZXJjZXMyLjYuMi0gSW1wb3J0VGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQ0KLQ0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZSU3RUluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0NCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZjZlOTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZCkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcmlnaHQgY2xpY2sgb24gdGhlIG1lc3NhZ2UgYW5kIHNlbGVjdCAiU2hvdyBEZXRhaWxzLi4uIiBbMSwgMF0KLS0+IFhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1YTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9UaWxkZX5JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1OTcxMzAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUmVmZXJlbmNlZCBmaWxlIGNvbnRhaW5zIGVycm9ycyAodGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkKS4gIEZvciBtb3JlIGluZm9ybWF0aW9uLCByaWdodCBjbGljayBvbiB0aGUgbWVzc2FnZSBhbmQgc2VsZWN0ICJTaG93IERldGFpbHMuLi4iIFsxLCAwXQotLT4gWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aFZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2Y4YWE3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVhNTCBkb2N1bWVudCBzdHJ1Y3R1cmVzIG11c3Qgc3RhcnQgYW5kIGVuZCB3aXRoaW4gdGhlIHNhbWUgZW50aXR5LiBbNCwgMV0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAwCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0obm9uZSkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDllYTNmNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QtbG9nCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi1udW1iZXIgb2YgZXJyb3JzICAgICAgOiAxCi0KLS0tLS0tLS0tLS0tLWVycm9yIGxpc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1SZWZlcmVuY2VkIGZpbGUgY29udGFpbnMgZXJyb3JzICh0ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3ZjhhYTcuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDliYWRhNTAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZC1sb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZTc3ODYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDEKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVJlZmVyZW5jZWQgZmlsZSBjb250YWlucyBlcnJvcnMgKHRlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJpZ2h0IGNsaWNrIG9uIHRoZSBtZXNzYWdlIGFuZCBzZWxlY3QgIlNob3cgRGV0YWlscy4uLiIgWzEsIDBdCi0tPiBYTUwgZG9jdW1lbnQgc3RydWN0dXJlcyBtdXN0IHN0YXJ0IGFuZCBlbmQgd2l0aGluIHRoZSBzYW1lIGVudGl0eS4gWzQsIDFdCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QtbG9nIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL0ltcG9ydFVuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QtbG9nCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YmFkYTUwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMAotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKG5vbmUpCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvaWRlYWxSZXN1bHRzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZC1sb2cgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTdmOGFhNy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkLWxvZworKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotbnVtYmVyIG9mIGVycm9ycyAgICAgIDogMQotCi0tLS0tLS0tLS0tLS1lcnJvciBsaXN0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotWE1MIGRvY3VtZW50IHN0cnVjdHVyZXMgbXVzdCBzdGFydCBhbmQgZW5kIHdpdGhpbiB0aGUgc2FtZSBlbnRpdHkuIFs0LCAxXQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkLWxvZyBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL2lkZWFsUmVzdWx0cy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkLWxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJhZGE1MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9pZGVhbFJlc3VsdHMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZC1sb2cKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLW51bWJlciBvZiBlcnJvcnMgICAgICA6IDAKLQotLS0tLS0tLS0tLS0tZXJyb3IgbGlzdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLShub25lKQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvRW1wdHlGaWxlL0VtcHR5LnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0VtcHR5RmlsZS9FbXB0eS54c2QKKysrIC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvUGFydDEueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvUGFydDEueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWM4MWY3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL1BhcnQxLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2ciIAotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2ciID4KLQotICAgIDxjb21wbGV4VHlwZSBuYW1lPSJIZWFkIj48L2NvbXBsZXhUeXBlPgotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvUGFydDIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvUGFydDIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjEzZDA1Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSG9ub3VyQWxsU2NoZW1hTG9jYXRpb25zL1BhcnQyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2ciIAotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2ciID4KLQotCi0gICAgPGNvbXBsZXhUeXBlIG5hbWU9IlRhaWwiPjwvY29tcGxleFR5cGU+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9kb2cueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ib25vdXJBbGxTY2hlbWFMb2NhdGlvbnMvZG9nLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmM0YzY2OS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0hvbm91ckFsbFNjaGVtYUxvY2F0aW9ucy9kb2cueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIgotCXRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9BRG9nIgotCXhtbG5zOnRucz0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9BRG9nIgotCXhtbG5zOnByZWY9Imh0dHA6Ly93d3cuZXhhbXBsZS5vcmcvRG9nIj4KLQkKLQk8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLm9yZy9Eb2ciCi0JCXNjaGVtYUxvY2F0aW9uPSJQYXJ0MS54c2QiPgotCTwvaW1wb3J0PgotCTxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL0RvZyIKLQkJc2NoZW1hTG9jYXRpb249IlBhcnQyLnhzZCI+Ci0JPC9pbXBvcnQ+Ci0KLQk8Y29tcGxleFR5cGUgbmFtZT0iRG9nVHlwZSI+Ci0JCTxzZXF1ZW5jZT4KLQotCQkJPGVsZW1lbnQgbmFtZT0iVGFpbCIgdHlwZT0icHJlZjpUYWlsIj48L2VsZW1lbnQ+Ci0JCQk8ZWxlbWVudCBuYW1lPSJCb2R5IiB0eXBlPSJzdHJpbmciPjwvZWxlbWVudD4KLQkJPC9zZXF1ZW5jZT4KLQk8L2NvbXBsZXhUeXBlPgotCi0JPGVsZW1lbnQgbmFtZT0iYURvZyIgdHlwZT0idG5zOkRvZ1R5cGUiPjwvZWxlbWVudD4KLQotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydEludmFsaWRMb2NhdGlvbi9JbXBvcnRJbnZhbGlkTG9jYXRpb24ueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRJbnZhbGlkTG9jYXRpb24vSW1wb3J0SW52YWxpZExvY2F0aW9uLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI4MzQ3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydEludmFsaWRMb2NhdGlvbi9JbXBvcnRJbnZhbGlkTG9jYXRpb24ueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9yb290IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9yb290Ij4KLSAgICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnRpbmciIHNjaGVtYUxvY2F0aW9uPSJzdWJkaXIvaW1wb3J0aW5nLnhzZGEiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQS54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMyMGZlMS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9BLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9BQyI+Ci0gIDx4c2Q6aW5jbHVkZSBzY2hlbWFMb2NhdGlvbj0iQy54c2QiLz4KLSAgPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vQiIgc2NoZW1hTG9jYXRpb249IkIueHNkIi8+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQi54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9CLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjQ1MDA3ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9CLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9CIj4KLSAgPHhzZDppbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vQUMiIHNjaGVtYUxvY2F0aW9uPSIuXEMueHNkIi8+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRXaXRoSW5jb3JyZWN0U2xhc2gvQy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9DLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjZkZjY3NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ltcG9ydFdpdGhJbmNvcnJlY3RTbGFzaC9DLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTx4c2Q6c2NoZW1hIHhtbG5zOnhzZD0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIGVsZW1lbnRGb3JtRGVmYXVsdD0icXVhbGlmaWVkIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly9BQyI+Ci0gICA8eHNkOmNvbXBsZXhUeXBlIG5hbWU9IlNhbXBsZVR5cGUiPgotICAgIDx4c2Q6c2VxdWVuY2U+Ci0gICAgIDx4c2Q6ZWxlbWVudCBuYW1lPSJTYW1wbGVFbGVtZW50IiBuaWxsYWJsZT0idHJ1ZSIgdHlwZT0ieHNkOnN0cmluZyIvPgotICAgIDwveHNkOnNlcXVlbmNlPgotICAgPC94c2Q6Y29tcGxleFR5cGU+Ci08L3hzZDpzY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL0ltcG9ydFhTRFdpdGhYU0RJbXBvcnRJbkRpZmZEaXIueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWU2YWYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vcm9vdCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vcm9vdCI+Ci0gICAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0aW5nIiBzY2hlbWFMb2NhdGlvbj0ic3ViZGlyL2ltcG9ydGluZy54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL3N1YmRpci9pbXBvcnRpbmcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL3N1YmRpci9pbXBvcnRpbmcueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWY1NDYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9zdWJkaXIvaW1wb3J0aW5nLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0aW5nIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnRpbmciIHhtbG5zOnNpbXBsZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9zaW1wbGUiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9zaW1wbGUiIHNjaGVtYUxvY2F0aW9uPSJzaW1wbGUueHNkIi8+Ci0gICAgPHNpbXBsZVR5cGUgbmFtZT0ibXlTaW1wbGVUeXBlIj4KLSAgICA8bGlzdCBpdGVtVHlwZT0ic3RyaW5nIi8+Ci0gIDwvc2ltcGxlVHlwZT4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL3N1YmRpci9zaW1wbGUueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbXBvcnRYU0RXaXRoWFNESW1wb3J0SW5EaWZmRGlyL3N1YmRpci9zaW1wbGUueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODEwYTRkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvSW1wb3J0WFNEV2l0aFhTREltcG9ydEluRGlmZkRpci9zdWJkaXIvc2ltcGxlLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vc2ltcGxlIiB4bWxuczppYm09Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vc2ltcGxlIj4KLSAgICA8ZWxlbWVudCBuYW1lPSJteUVsZW1lbnQiIHR5cGU9InN0cmluZyIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cvSW52YWxpZFNjaGVtYUluWE1MQ2F0YWxvZy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwNDQzMTkuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9JbnZhbGlkU2NoZW1hSW5YTUxDYXRhbG9nL0ludmFsaWRTY2hlbWFJblhNTENhdGFsb2cueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbnZhbGlkIiB4bWxuczppbnZhbGlkPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ludmFsaWQiPgotCTxlbGVtZW50IG5hbWU9Ik5ld0dsb2JhbEVsZW1lbnQiIHR5cGU9InN0cmluZ2EiPjwvZWxlbWVudD4KLTwvc2NoZW1hPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcvTWlzc2luZ0Nsb3NpbmdTY2hlbWFUYWcueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZDc2MzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy9NaXNzaW5nQ2xvc2luZ1NjaGVtYVRhZy54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ud29PcGVuQnJhY2tldHMvVHdvT3BlbkJyYWNrZXRzLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvQnVnRml4ZXMvVHdvT3BlbkJyYWNrZXRzL1R3b09wZW5CcmFja2V0cy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5N2M4ZjYuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9Ud29PcGVuQnJhY2tldHMvVHdvT3BlbkJyYWNrZXRzLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1R3b09wZW5CcmFja2V0cyIgeG1sbnM6dG5zPSJodHRwOi8vd3d3LmV4YW1wbGUub3JnL1R3b09wZW5CcmFja2V0cyI+Ci08L3NjaGVtYT4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL1hTRFJlZ2lzdGVyZWRXaXRoQ2F0YWxvZy9JbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZy54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL0J1Z0ZpeGVzL1hTRFJlZ2lzdGVyZWRXaXRoQ2F0YWxvZy9JbnZhbGlkU2NoZW1hV2l0aE5hbWVzcGFjZUluQ2F0YWxvZy54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZTI0ZGEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9CdWdGaXhlcy9YU0RSZWdpc3RlcmVkV2l0aENhdGFsb2cvSW52YWxpZFNjaGVtYVdpdGhOYW1lc3BhY2VJbkNhdGFsb2cueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiAKLSAgICAgICAgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmVjbGlwc2Uub3JnL3dlYnRvb2xzL0NhdGFsb2d1ZSIgeG1sbnM6Yz0iaHR0cDovL3d3dy5lY2xpcHNlLm9yZy93ZWJ0b29scy9DYXRhbG9ndWUiPgotCi0JPGNvbXBsZXhUeXBlIG5hbWU9IlB1YmxpY2F0aW9uVHlwZSIKLQkJPHNlcXVlbmNlPgotCQkJPGVsZW1lbnQgbmFtZT0idGl0bGUiIHR5cGU9InN0cmluZyI+PC9lbGVtZW50PgotCQkJPGVsZW1lbnQgbmFtZT0iYXV0aG9yIiB0eXBlPSJzdHJpbmciIG1pbk9jY3Vycz0iMCIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPjwvZWxlbWVudD4KLQkJCTxlbGVtZW50IG5hbWU9ImRhdGUiIHR5cGU9ImdZZWFyIj48L2VsZW1lbnQ+Ci0JCTwvc2VxdWVuY2U+Ci0JPC9jb21wbGV4VHlwZT4KLQkKLQk8Y29tcGxleFR5cGUgbmFtZT0iQm9va1R5cGUiPgotCQk8Y29tcGxleENvbnRlbnQ+Ci0JCQk8ZXh0ZW5zaW9uIGJhc2U9ImM6UHVibGljYXRpb25UeXBlIj4KLQkJCSAgICA8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9ImlzYm4iIHR5cGU9InN0cmluZyIgLz4KLQkJCQkJPGVsZW1lbnQgbmFtZT0icHVibGlzaGVyIiB0eXBlPSJzdHJpbmciLz4KLSAgICAgICAgICAgICAgICA8L3NlcXVlbmNlPgotCQkJPC9leHRlbnNpb24+Ci0JCTwvY29tcGxleENvbnRlbnQ+Ci0JPC9jb21wbGV4VHlwZT4KLQkKLQk8Y29tcGxleFR5cGUgbmFtZT0iTWFnYXppbmVUeXBlIj4KLQkJPGNvbXBsZXhDb250ZW50PgkJCQotCQkJPHJlc3RyaWN0aW9uIGJhc2U9ImM6UHVibGljYXRpb25UeXBlIj4KLQkJCQk8c2VxdWVuY2U+Ci0gICAgICAgICAgICAgICAgICAgIDxlbGVtZW50IG5hbWU9InRpdGxlIiB0eXBlPSJzdHJpbmciIC8+Ci0JCQkJCTxlbGVtZW50IG5hbWU9ImF1dGhvciIgdHlwZT0ic3RyaW5nIiBtaW5PY2N1cnM9IjAiIG1heE9jY3Vycz0iMCIvPgotCQkJCQk8ZWxlbWVudCBuYW1lPSJkYXRlIiB0eXBlPSJnWWVhciI+PC9lbGVtZW50PgotCQkJCTwvc2VxdWVuY2U+Ci0JCQk8L3Jlc3RyaWN0aW9uPgotCQk8L2NvbXBsZXhDb250ZW50PgotCTwvY29tcGxleFR5cGU+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iUHVibGljYXRpb24iIHR5cGU9ImM6UHVibGljYXRpb25UeXBlIiBhYnN0cmFjdD0idHJ1ZSI+PC9lbGVtZW50PgotCQotCTxlbGVtZW50IG5hbWU9IkJvb2siIHR5cGU9ImM6Qm9va1R5cGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJjOlB1YmxpY2F0aW9uIj48L2VsZW1lbnQ+Ci0KLQk8ZWxlbWVudCBuYW1lPSJNYWdhemluZSIgdHlwZT0iYzpNYWdhemluZVR5cGUiIHN1YnN0aXR1dGlvbkdyb3VwPSJjOlB1YmxpY2F0aW9uIj48L2VsZW1lbnQ+Ci0JCi0JPGVsZW1lbnQgbmFtZT0iQ2F0YWxvZ3VlIj4KLQkJPGNvbXBsZXhUeXBlPgotCQkJPHNlcXVlbmNlPgotCQkJCTxlbGVtZW50IHJlZj0iYzpQdWJsaWNhdGlvbiIgbWF4T2NjdXJzPSJ1bmJvdW5kZWQiPjwvZWxlbWVudD4KLQkJCTwvc2VxdWVuY2U+Ci0JCTwvY29tcGxleFR5cGU+Ci0JPC9lbGVtZW50PgotCQotPC9zY2hlbWE+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0FuZ2xlSGF0XkluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmRmMTQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXRJbkZpbGVuYW1lL0ltcG9ydEFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkFuZ2xlSGF0XkluRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdEluRmlsZW5hbWUvSW1wb3J0QW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTA4NGU2ZS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0SW5GaWxlbmFtZS9JbXBvcnRBbmdsZUhhdF5JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iQW5nbGVIYXReSW5GaWxlbmFtZVZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9BbmdsZUhhdEluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0FuZ2xlSGF0SW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9BbmdsZUhhdF5JblBhdGgvSW1wb3J0QW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmQ4MmM5NS4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iQW5nbGVIYXRJblBhdGhJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0FuZ2xlSGF0XkluUGF0aC9JbXBvcnRBbmdsZUhhdEluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2N2JkMGQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQW5nbGVIYXReSW5QYXRoL0ltcG9ydEFuZ2xlSGF0SW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iQW5nbGVIYXRJblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0Nsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9DbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvQ2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0XDA1MUluUGF0aC9JbXBvcnRDbG9zZUJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJkOWE3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkNsb3NlQnJhY2tldEluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldFwwNTFJblBhdGgvSW1wb3J0Q2xvc2VCcmFja2V0SW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjE4MDUxMy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRcMDUxSW5QYXRoL0ltcG9ydENsb3NlQnJhY2tldEluUGF0aFZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJDbG9zZUJyYWNrZXRJblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvQ2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9DbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0Nsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Nsb3NlQnJhY2tldEluRmlsZW5hbWUvSW1wb3J0Q2xvc2VCcmFja2V0XDA1MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ2MGQwNmYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZUludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkNsb3NlQnJhY2tldClJbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvQ2xvc2VCcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRDbG9zZUJyYWNrZXRcMDUxSW5GaWxlbmFtZVZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2EyNTAzYi4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9DbG9zZUJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydENsb3NlQnJhY2tldFwwNTFJbkZpbGVuYW1lVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkNsb3NlQnJhY2tldClJbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9EYXNoSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvRGFzaEluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2gtSW5QYXRoL0Rhc2hJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NjQ4Y2EuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJEYXNoSW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoLUluUGF0aC9JbXBvcnREYXNoSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZjJkYThkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaC1JblBhdGgvSW1wb3J0RGFzaEluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkRhc2hJblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvRGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9EYXNoLUluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0Rhc2hJbkZpbGVuYW1lL0Rhc2gtSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1MzRkODMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkRhc2gtSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRGFzaEluRmlsZW5hbWUvSW1wb3J0RGFzaC1JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MzM0YWUuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9EYXNoSW5GaWxlbmFtZS9JbXBvcnREYXNoLUluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJEYXNoLUluRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9FeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0V4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMTg5ZmYzLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aEludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkV4Y2xhbWF0aW9uSW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uXDA0MUluUGF0aC9JbXBvcnRFeGNsYW1hdGlvbkluUGF0aFZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4MzkwYzYuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25cMDQxSW5QYXRoL0ltcG9ydEV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkV4Y2xhbWF0aW9uSW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0V4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9FeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9FeGNsYW1hdGlvbkluRmlsZW5hbWUvRXhjbGFtYXRpb25cMDQxSW5GaWxlbmFtZVZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM0MzA1MjguLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJFeGNsYW1hdGlvbiFJbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvRXhjbGFtYXRpb25JbkZpbGVuYW1lL0ltcG9ydEV4Y2xhbWF0aW9uXDA0MUluRmlsZW5hbWVWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTJkZDk3Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL0V4Y2xhbWF0aW9uSW5GaWxlbmFtZS9JbXBvcnRFeGNsYW1hdGlvblwwNDFJbkZpbGVuYW1lVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IkV4Y2xhbWF0aW9uIUluRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDEyNTE2Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249Ik9wZW5CcmFja2V0SW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9JbXBvcnRPcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVlNDYxZGQuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRcMDUwSW5QYXRoL0ltcG9ydE9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249Ik9wZW5CcmFja2V0SW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aEludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldFwwNTBJblBhdGgvT3BlbkJyYWNrZXRJblBhdGhWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0XDA1MEluUGF0aC9PcGVuQnJhY2tldEluUGF0aFZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcwYTY3ZTkuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJPcGVuQnJhY2tldChJbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL0ltcG9ydE9wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGFiNzM4Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9JbXBvcnRPcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249Ik9wZW5CcmFja2V0KEluRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9PcGVuQnJhY2tldEluRmlsZW5hbWUvT3BlbkJyYWNrZXRcMDUwSW5GaWxlbmFtZUludmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0ICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvT3BlbkJyYWNrZXRJbkZpbGVuYW1lL09wZW5CcmFja2V0XDA1MEluRmlsZW5hbWVWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL09wZW5CcmFja2V0SW5GaWxlbmFtZS9PcGVuQnJhY2tldFwwNTBJbkZpbGVuYW1lVmFsaWQueHNkIgorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL0ltcG9ydFBlcmlvZEluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODk3ODAyLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlBlcmlvZEluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZC5JblBhdGgvSW1wb3J0UGVyaW9kSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMjNhYjMzLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9JbXBvcnRQZXJpb2RJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJQZXJpb2RJblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kLkluUGF0aC9QZXJpb2RJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2QuSW5QYXRoL1BlcmlvZEluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGM2MjU0NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvSW1wb3J0UGVyaW9kLkluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlBlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL0ltcG9ydFBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZTk3ZDQ3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9JbXBvcnRQZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlBlcmlvZC5JbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9QZXJpb2RJbkZpbGVuYW1lL1BlcmlvZC5JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUGVyaW9kSW5GaWxlbmFtZS9QZXJpb2QuSW5GaWxlbmFtZVZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1BlcmlvZEluRmlsZW5hbWUvUGVyaW9kLkluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aEludmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmQ3NDk2Yy4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJRdW90ZUluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aFZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvSW1wb3J0UXVvdGVJblBhdGhWYWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZjgzYzg1Li4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlXDA0N0luUGF0aC9JbXBvcnRRdW90ZUluUGF0aFZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJRdW90ZUluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZCIgImIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVcMDQ3SW5QYXRoL1F1b3RlSW5QYXRoVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZVwwNDdJblBhdGgvUXVvdGVJblBhdGhWYWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZUludmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QiCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMWZiMzRiLi4wMDAwMDAwCi0tLSAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QiCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iUXVvdGUnSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9JbXBvcnRRdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWNjZjZkZS4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvSW1wb3J0UXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJRdW90ZSdJbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lSW52YWxpZC54c2QiICJiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZCIKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEwYzZhNjAuLjAwMDAwMDAKLS0tICJhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvUXVvdGVJbkZpbGVuYW1lL1F1b3RlXDA0N0luRmlsZW5hbWVJbnZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCAiYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkIiAiYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1F1b3RlSW5GaWxlbmFtZS9RdW90ZVwwNDdJbkZpbGVuYW1lVmFsaWQueHNkIgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDI3ZjQ3NC4uMDAwMDAwMAotLS0gImEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9RdW90ZUluRmlsZW5hbWUvUXVvdGVcMDQ3SW5GaWxlbmFtZVZhbGlkLnhzZCIKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9JbXBvcnRTcGFjZUluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2M2EyN2FkLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJTcGFjZUluUGF0aEludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL0ltcG9ydFNwYWNlSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjOTNkMjAuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvSW1wb3J0U3BhY2VJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJTcGFjZUluUGF0aFZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZSBJblBhdGgvU3BhY2VJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aEludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotCmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlIEluUGF0aC9TcGFjZUluUGF0aFZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2UgSW5QYXRoL1NwYWNlSW5QYXRoVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3YzBiYWEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9TcGFjZUluRmlsZW5hbWUvSW1wb3J0U3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iU3BhY2UgSW5GaWxlbmFtZUludmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9JbXBvcnRTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MTZiYTM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL0ltcG9ydFNwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJTcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1NwYWNlSW5GaWxlbmFtZS9TcGFjZSBJbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvU3BhY2VJbkZpbGVuYW1lL1NwYWNlIEluRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEwOTg1My4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlSW5GaWxlbmFtZS9JbXBvcnRUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJUaWxkZX5JbkZpbGVuYW1lSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL0ltcG9ydFRpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZTlhNmMuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvSW1wb3J0VGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlRpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGVJbkZpbGVuYW1lL1RpbGRlfkluRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZUluRmlsZW5hbWUvVGlsZGV+SW5GaWxlbmFtZVZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL0ltcG9ydFRpbGRlSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5NjNkNGIuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlRpbGRlSW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvSW1wb3J0VGlsZGVJblBhdGhWYWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aFZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM4MTEzMy4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9JbXBvcnRUaWxkZUluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlRpbGRlSW5QYXRoVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1RpbGRlfkluUGF0aC9UaWxkZUluUGF0aEludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVGlsZGV+SW5QYXRoL1RpbGRlSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9UaWxkZX5JblBhdGgvVGlsZGVJblBhdGhWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmRhMTZlLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJVbmRlcnNjb3JlX0luRmlsZW5hbWVJbnZhbGlkLnhzZCIvPgotPC9zY2hlbWE+CmRpZmYgLS1naXQgYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL0ltcG9ydFVuZGVyc2NvcmVfSW5GaWxlbmFtZVZhbGlkLnhzZCBiL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZjIxNmZjLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvSW1wb3J0VW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkCisrKyAvZGV2L251bGwKQEAgLTEsNCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPHNjaGVtYSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHRhcmdldE5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCI+Ci0gIDxpbXBvcnQgbmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiBzY2hlbWFMb2NhdGlvbj0iVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkIi8+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVJbkZpbGVuYW1lL1VuZGVyc2NvcmVfSW5GaWxlbmFtZUludmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGM2YTYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci0KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZUluRmlsZW5hbWUvVW5kZXJzY29yZV9JbkZpbGVuYW1lVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyN2Y0NzQuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlSW5GaWxlbmFtZS9VbmRlcnNjb3JlX0luRmlsZW5hbWVWYWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSI+Ci08L3NjaGVtYT4KZGlmZiAtLWdpdCBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aEludmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1Mjc3YTEuLjAwMDAwMDAKLS0tIGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08c2NoZW1hIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgdGFyZ2V0TmFtZXNwYWNlPSJodHRwOi8vd3d3LmV4YW1wbGUuY29tL2ltcG9ydCIgeG1sbnM6ZXg9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0Ij4KLSAgPGltcG9ydCBuYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHNjaGVtYUxvY2F0aW9uPSJVbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9JbXBvcnRVbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDc0MjY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvSW1wb3J0VW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vaW1wb3J0IiB4bWxuczpleD0iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbXBvcnQiPgotICA8aW1wb3J0IG5hbWVzcGFjZT0iaHR0cDovL3d3dy5leGFtcGxlLmNvbSIgc2NoZW1hTG9jYXRpb249IlVuZGVyc2NvcmVJblBhdGhWYWxpZC54c2QiLz4KLTwvc2NoZW1hPgpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoSW52YWxpZC54c2QgYi90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTBjNmE2MC4uMDAwMDAwMAotLS0gYS90ZXN0cy9vcmcuZWNsaXBzZS53c3QueHNkLnZhbGlkYXRpb24udGVzdHMvdGVzdHJlc291cmNlcy9zYW1wbGVzL1BhdGhzL1VuZGVyc2NvcmVfSW5QYXRoL1VuZGVyc2NvcmVJblBhdGhJbnZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLQpkaWZmIC0tZ2l0IGEvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkIGIvdGVzdHMvb3JnLmVjbGlwc2Uud3N0LnhzZC52YWxpZGF0aW9uLnRlc3RzL3Rlc3RyZXNvdXJjZXMvc2FtcGxlcy9QYXRocy9VbmRlcnNjb3JlX0luUGF0aC9VbmRlcnNjb3JlSW5QYXRoVmFsaWQueHNkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMjdmNDc0Li4wMDAwMDAwCi0tLSBhL3Rlc3RzL29yZy5lY2xpcHNlLndzdC54c2QudmFsaWRhdGlvbi50ZXN0cy90ZXN0cmVzb3VyY2VzL3NhbXBsZXMvUGF0aHMvVW5kZXJzY29yZV9JblBhdGgvVW5kZXJzY29yZUluUGF0aFZhbGlkLnhzZAorKysgL2Rldi9udWxsCkBAIC0xLDMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTxzY2hlbWEgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvWE1MU2NoZW1hIiB0YXJnZXROYW1lc3BhY2U9Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20iIHhtbG5zOmV4PSJodHRwOi8vd3d3LmV4YW1wbGUuY29tIj4KLTwvc2NoZW1hPgo=